在芯片国产化日益高涨的情况下,一些新的芯片厂家脱颖而出,比如以串口通讯发展起来的沁恒微电子的WCH、兆易创新的GD、雅特力的AT、中科蓝讯的AB,以及国民技术等。
其中的国民技术则属于后起之秀,其主打的产品有基于M0内核的N32G03X通用系列、基于M4内核的N32G45X通用系列,以及面向低功耗的N32L4XX系列。
这样在选取低功耗MCU时,我们就多出了一种选择,也加大了设计的灵活性。
此外,国民技术所主打的3个系列产品是支持以MDK来进行开发的,这样对于那些出道早的程序者就天然地增添了一份亲近感。你可别小看了这份亲近感,常言道“不怕千招会,就怕一招熟”,用惯的东西好上手,它起到事半功倍的性能。
下面就有请我们的主角N32L43XRL-STB开发板上场,它的MCU为N32L436CBL7,其最高主频可达108 MHz,是采用LQFP48管脚封装。
该芯片的主要性能及参数:
● 采用32位ARMCortex-M4内核+FPU,支持单周期硬件乘除法指令,支持DSP指令和MPU。
● 高达128KByte片内Flash,10万次擦写次数,10年数据保持。
● 高达32KByte片内SRAM,包括24Kbyte SRAM1和8Kbyte SRAM2。
● 高性能模拟接口,含1个12bit 5MspsADC,且多种精度可配置、2个轨到轨运算放大器、2个高速模拟比较器、多达24通道电容式触摸按键、1个采样率为1Msps的12bit DAC。
● 丰富的通信接口,有3个USART接口、2个UART接口、1个LPUART、2个速率高达27 MHz的SPI接口、2个速率高达1 MHz的I2C接口、1个USB2.0 Fullspeed Device接口及1个CAN 2.0A/B总线接口。
● 多样的定时计数器,有2个16bit高级定时计数器、5个16bit通用定时计数器、2个16bit基础定时计数器、1个16bit低功耗定时计数器、1x24bit SysTick、1x7bit窗口看门狗、1x12bit独立看门狗。
所以,它在性能方面是完全可以胜任常规芯片要求的! 该芯片的功耗情况:
● 在Standby模式下:典型值为1.5uA,即所有备份寄存器保持,IO保持,可选 RTC Run,8KByte Retention SRAM保持,可快速唤醒。
● 在Stop2模式下:典型值为3uA,RTC Run,8KByte Retention SRAM2保持,CPU寄存器保持,IO保持,可快速唤醒。
● 在Run模式下:90uA/MHz@108MHz/3.3V,100uA/MHz@72MHz/3.3V。
接下来,就将N32L43XRL-STB开发板与N32G45XVL-STB开发板放到一起,做一下功耗的对比。当然,这是在都配有调试下载工具的情况下,会比单纯的芯片对比要大一些,但相对来讲还是比较公平的。 经检测,N32L43XRL-STB开发板的功耗为0.13135W,N32G45XVL-STB开发板的功耗为0.15392W,二者净差值为0.02257W。
图1 开发板的对比
图2 N32L43XRL-STB的功耗
图3 N32G45XVL-STB的功耗
如何构建开发环境:
前面说过国民技术的MCU是支持MDK来开发的,那么对于N32L4x系列的开发板,是如何来构建其开发环境的呢?
首先要做的自然是要安装MDK,其版本可以是V5.25。
随后,为支持此类芯片的使用,还需要安装Nationstech.N32L43x_DFP.0.1.0。
这样再打开MDK,就可在芯片列表中见到N32L4x系列的身影,见图4所示。
图4 添加芯片支持
至此,开发环境就基本构建好了。
此外,为了便于了解和学习程序的设计方法,还应下载一个函数库与例程,其压缩包为Nationstech.N32L43x_Library.1.1.0.7Z。
以例程LedBlink为例,经编译其结果如图5所示。
图5 完成编译
为进行下载测试,需按图6所示来设置调试工具的类型,并按图7所示来选取烧录算法。
图6 设置调试工具
图7 设置烧录算法
在开发板上载有3个彩色LED,其电路原理图见图8所示,使用例程就可见到图9所示的流水灯效果。
仿照该例程,可获得GPIO口的使用方法,并实现开发板的功能扩展。
图8 原理图
图9 测试效果
驱动相应器件的功耗对比
1)OLED屏显示及功耗
OLED屏是一种自发光的显示器件,但又较之数码管要更节省电能。此外,对I2C接口的OLED屏来讲,它的引脚少又能节省对GPIO口资源的占用,且所显示的信息及形式更丰富,故极适合与N32L43X系列这样的芯片相配合来设计低功耗产品。
那么,在N32L43X系列芯片的开发环境下,要实现I2C接口的OLED屏驱动是否容易呢?
其实,要实现起来并不复杂,所需要的只是2个GPIO口及相应等级的延时函数支持,从而保证以GPIO口模拟的方式来完成I2C通讯。
在OLED屏与开发板按一下关系来连接的情况下:
SCL----PA1
SDA----PA2
对引脚功能的配置函数为:
void OLEDInit(void) { GPIO_InitType GPIO_InitStructure; RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE); GPIO_InitStruct(&GPIO_InitStructure); GPIO_InitStructure.Pin = GPIO_PIN_1|GPIO_PIN_2; GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA; GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); }
而输出高低电平的引脚定义为:
#define OLED_SCLK_Clr() GPIOC-》PBA = GPIO_PIN_1 #define OLED_SCLK_Set() GPIOA-》PBSC = GPIO_PIN_1 #define OLED_SDIN_Clr() GPIOA-》PBC = GPIO_PIN_2 #define OLED_SDIN_Set() GPIOA-》PBSC = GPIO_PIN_2
延时函数的配备:
由于在MDK的开发板平台下,并未提供毫秒级和微秒级延时的函数,因此需要使用系统的滴答时钟来自行设计。
微秒级延时函数:
void Delayus(uint32_t count) { SysTick_Delay_Us(count); }
毫秒级延时函数:
void Delayms(uint32_t count) { count=count*1000; SysTick_Delay_Us(count); }
使用微秒级延时函数的I2C启动函数为:
void IIC_Start() { OLED_SCLK_Set(); Delayus(2); OLED_SDIN_Set(); Delayus(2); OLED_SDIN_Clr(); Delayus(2); OLED_SCLK_Clr(); Delayus(2); } 有了以上的基础,就不难将OLED屏的驱动功能移植给N32L43X系列芯片。 实现OLED屏显示功能测试的主程序为:int main(void) { LedInit(PORT_GROUP2, LED3_PIN); OLEDInit(); OLED_Init(); OLED_Clear(); OLED_ShowString(20,0,“N32L43x ”,16); OLED_ShowString(20,2,“OLED TEST”,16); OLED_ShowString(20,4,“jinglixixi”,16); OLED_ShowString(20,6,“2022.3.2”,16); while (1) { LedOn(PORT_GROUP2, LED3_PIN); Delayms(500); LedOff(PORT_GROUP2, LED3_PIN); Delayms(500); } } 在OLED屏显示的情况下,其整体功耗如图10所示。
图10 功耗测试
2)传感器检测及功耗 以BMP085温度大气压传感器为例,其器件的连接关系为:
OLED_CLK_PIN---PA1
OLED_DIN_PIN---PA2
BMP_CLK_PIN---PB0
BMP_DIN_PIN---PB1
读取传感器数据的语句定义为:
#define IIC_SDA_IN GPIO_ReadInputDataBit(GPIOB, GPIO_PIN_1)
实现数据引脚输入输出功能定义的函数为:
void IIC_INPUT_MODE_SET() { GPIO_InitType GPIO_InitStructure; RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE); GPIO_InitStruct(&GPIO_InitStructure); GPIO_InitStructure.Pin = GPIO_PIN_1; GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Input; GPIO_InitStructure.GPIO_Pull = GPIO_Pull_Up; //GPIO_No_Pull GPIO_Pull_Down GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure); } void IIC_OUTPUT_MODE_SET() { GPIO_InitType GPIO_InitStructure; RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE); GPIO_InitStruct(&GPIO_InitStructure); GPIO_InitStructure.Pin = GPIO_PIN_1; GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull; GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure); }
模拟I2C发送字节数据的函数为:
void BMP085_Send_Byte(char txd) { char t; IIC_OUTPUT_MODE_SET(); SCL_Clr(); for(t=0;t《8;t++) { if((txd&0x80)》》7) SDA_Set(); else SDA_Clr(); txd《《=1; SysTick_Delay_Us(2); SCL_Set(); SysTick_Delay_Us(2); SCL_Clr(); SysTick_Delay_Us(2); } }
读取温度大气压的函数为:
void bmp085Convert() { unsigned int ut; unsigned long up; long x1, x2, b5, b6, x3, b3, p; unsigned long b4, b7; ut = bmp085ReadTemp(); up = bmp085ReadPressure(); x1 = (((long)ut - (long)ac6)*(long)ac5) 》》 15; x2 = ((long) mc 《《 11) / (x1 + md); b5 = x1 + x2; temperature = ((b5 + 8) 》》 4); b6 = b5 - 4000; x1 = (b2 * (b6 * b6)》》12)》》11; x2 = (ac2 * b6)》》11; x3 = x1 + x2; b3 = (((((long)ac1)*4 + x3)《《OSS) + 2)》》2; x1 = (ac3 * b6)》》13; x2 = (b1 * ((b6 * b6)》》12))》》16; x3 = ((x1 + x2) + 2)》》2; b4 = (ac4 * (unsigned long)(x3 + 32768))》》15; b7 = ((unsigned long)(up - b3) * (50000》》OSS)); if (b7 《 0x80000000) p = (b7《《1)/b4; else p = (b7/b4)《《1; x1 = (p》》8) * (p》》8); x1 = (x1 * 3038)》》16; x2 = (-7357 * p)》》16; pressure = p+((x1 + x2 + 3791)》》4); }
检测温度大气压的主程序为:
int main(void) { LedInit(PORT_GROUP2, LED3_PIN); BMP085_Init(); Init_BMP085(); OLEDInit(); OLED_Init(); OLED_Clear(); OLED_ShowString(20,0,“N32L43x ”,16); OLED_ShowString(20,2,“OLED & BMP085”,16); OLED_ShowString(20,4,“t= C”,16); OLED_ShowString(20,6,“p= KPa”,16); while (1) { bmp085Convert(); OLED_ShowNum(44,4,temperature/10,3,16); OLED_ShowNum(44,6,pressure/100,5,16); LedOn(PORT_GROUP2, LED3_PIN); Delayms(500); LedOff(PORT_GROUP2, LED3_PIN); Delayms(500); } } 在添加传感器的情况下,其显示效果及整体功耗分别如图11和图12所示。
图11 显示效果
图12 整体功耗
至此,就在N32L43XRL-STB开发板上完成了温度大气压检测装置的设计,并针对其低功耗的特点对相应环境的功耗进行了跟踪测量。尽管测试的工具不很专业,但它还是能够带来一个很直观的感性认识。所以在低功耗的设计中,使用N32L43X芯片是可行的也是十分方便的,其功耗也是能够达到认可的!
审核编辑 :李倩
-
mcu
+关注
关注
146文章
17144浏览量
351145 -
计数器
+关注
关注
32文章
2256浏览量
94545 -
开发板
+关注
关注
25文章
5046浏览量
97438
原文标题:低功耗MCU怎么选?看网友亲测国民技术N32L4xx系列!
文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论