发新帖本帖赏金 200.00元(功能说明)我要提问
12下一页
返回列表
[N32L4xx]

低功耗MCU怎么选,国民技术N32L4x系列可以帮您忙

[复制链接]
2442|32
手机看帖
扫描二维码
随时随地手机跟帖
jinglixixi|  楼主 | 2022-3-2 18:56 | 显示全部楼层 |阅读模式
#申请原创#
在芯片国产化日益高涨的情况下,一些新的芯片厂家脱颖而出如以串口通讯发展起来字的沁恒微电子的WCH、兆易创新的GD、雅特力的AT、中科蓝讯的AB及国民技术等。
其中的国民技术则属于后起之秀,其主打的产品有基于M0内核的N32G03X 通用系列、基于M4内核的N32G45X 通用系列及面向低功耗的N32L4XX系列。
这样在选取低功耗MCU时,我们就多出了一种选择,也加大了设计的灵活性。
此外,国民技术所主打的3个系列产品是支持以MDK来进行开发的,这样对于那些出道早的程序者就天然地增添了一份亲近感,你可别 小看了这份亲近感,常言道“不怕千招会,就怕一招熟”,用惯的东西好上手,它起到事半功倍的性能。
下面就有请我们的主角N32L43XRL-STB开发板上场,它的MCU为N32L436CBL7,其最高主频可达108MHz,是采用LQFP48 管脚封装。
该芯片的主要性能及参数为:
l  采用 32 位 ARMCortex-M4 内核+ FPU,支持单周期硬件乘除法指令,支持 DSP 指令和 MPU。
l  高达 128KByte片内 Flash,10万次擦写次数,10 年数据保持。
l  高达 32KByte片内 SRAM ,包括 24KbyteSRAM1和 8 Kbyte SRAM2。
l  高性能模拟接口,含 1 个 12bit 5MspsADC,且多种精度可配置、2 个轨到轨运算放大器、2 个高速模拟比较器、多达 24 通道电容式触摸按键、1 个采样率为1Msps的12bit DAC。
l  丰富的通信接口,有3 个 USART接口、2 个 UART接口、1 个 LPUART、2 个速率高达 27 MHz的 SPI 接口、2 个速率高达 1 MHz 的I2C 接口、1 个 USB2.0 Fullspeed Device 接口及1 个 CAN 2.0A/B总线接口。
l  多样的定时计数器,有2 个 16bit 高级定时计数器、5 个 16bit 通用定时计数器、2 个 16bit 基础定时计数器、1 个 16bit 低功耗定时计数器、1x24bit SysTick、1x 7bit 窗口看门狗、1x 12bit 独立看门狗
所以它在性能方面是完成可以胜任常规芯片要求的,下面再看一下我们最为关注的一个指标,那就是它的功耗情况。
在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.02257 W。
1.jpg
图1 开发板的对比
2.jpg
图2 N32L43XRL-STB的功耗
3.jpg
图3 N32G45XVL-STB的功耗

如何构建开发环境:
前面说过国民技术的MCU是支持MDK来开发的,那么对于N32L4x系列的开发板是如何来构建其开发环境的呢?
首先要做的自然是要安装MDK,其版本可以是V5.25。
随后为支持此类芯片的使用,需安装Nationstech.N32L43x_DFP.0.1.0。
这样再打开MDK,就可在芯片列表中见到N32L4x系列的身影,见图4所示。
4.jpg
图4 添加芯片支持
至此,开发环境就基本构建好了。
此外,为了便于了解和学习程序的设计方法,还应下载一个函数库与例程,其压缩包为Nationstech.N32L43x_Library.1.1.0.7Z。
以例程LedBlink为例,经编译其结果如图5所示。
5.jpg
图5 完成编译
为进行下载测试,需按图6所示来设置调试工具的类型,并按图7所示来选取烧录算法。
6.jpg
图6 设置调试工具
7.jpg
图7 设置烧录算法

在开发板上载有3个彩色LED,其电路原理图见图8所示,使用例程就可见到图9所示的流水灯效果。
仿照该例程,可获得GPIO口的使用方法,并实现开发板的功能扩展。
8.jpg
图8 原理图
9.jpg
图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.jpg
图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.jpg
图11 显示效果
12.jpg
图12 整体功耗

至此,就在N32L43XRL-STB开发板上完成了温度大气压检测装置的设计,并针对其低功耗的特点对相应环境的功耗进行了跟踪测量。尽管测试的工具不很专业,但它还是能够带来一个很直观的感性认识。所以在低功耗的设计中,使用N32L43X芯片是可行的也是十分方便的,其功耗也是能够达到认可的!

源码:

main.zip

4.68 KB, 阅读权限: 10

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 200.00 元 2022-03-25
理由:恭喜通过优质文章审核!请多多加油哦!

国民技术代理,有需要样品 demo板可以找我17779050039

使用特权

评论回复
jinglixixi|  楼主 | 2022-3-2 19:30 | 显示全部楼层
东裕光大张浩 发表于 2022-3-2 19:06
国民技术代理,有需要样品 demo板可以找我17779050039

好的!

使用特权

评论回复
kiwis66| | 2022-3-3 09:07 | 显示全部楼层
这个齿轮状的显示,
一眼就看中了

使用特权

评论回复
redone| | 2022-3-3 17:41 | 显示全部楼层
这是低功耗单片机么,
性价比怎么样

使用特权

评论回复
jinglixixi|  楼主 | 2022-3-3 19:19 | 显示全部楼层
redone 发表于 2022-3-3 17:41
这是低功耗单片机么,
性价比怎么样

没错是主打低功耗的产品,性能是十分不错的,价格手头还没有。

使用特权

评论回复
jinglixixi|  楼主 | 2022-3-3 19:21 | 显示全部楼层
kiwis66 发表于 2022-3-3 09:07
这个齿轮状的显示,
一眼就看中了

哈哈兑换的,还是比较好使的。

使用特权

评论回复
kiwis66| | 2022-3-4 10:50 | 显示全部楼层
jinglixixi 发表于 2022-3-3 19:21
哈哈兑换的,还是比较好使的。

能给个型号么,我搜搜去

使用特权

评论回复
jinglixixi|  楼主 | 2022-3-4 11:33 | 显示全部楼层
kiwis66 发表于 2022-3-4 10:50
能给个型号么,我搜搜去

https://item.jd.com/51464320481.html

使用特权

评论回复
kiwis66| | 2022-3-4 13:13 | 显示全部楼层
jinglixixi 发表于 2022-3-4 11:33
https://item.jd.com/51464320481.html

谢!!!

使用特权

评论回复
chenglcd| | 2022-3-4 17:25 | 显示全部楼层
与STM8L152比功耗怎么样?

使用特权

评论回复
chenglcd| | 2022-3-4 17:26 | 显示全部楼层
价格比STM8L152有没有优势

使用特权

评论回复
yangxiaor520| | 2022-3-4 19:00 | 显示全部楼层
这个功耗表现和MSP430相比咋样?

使用特权

评论回复
jinglixixi|  楼主 | 2022-3-5 09:24 | 显示全部楼层
chenglcd 发表于 2022-3-4 17:26
价格比STM8L152有没有优势

手头没有STM8L152也就无从比较了但STM8L152是属8位机?N32L43X属32机性能会强相对。

使用特权

评论回复
jinglixixi|  楼主 | 2022-3-5 09:26 | 显示全部楼层
yangxiaor520 发表于 2022-3-4 19:00
这个功耗表现和MSP430相比咋样?

MSP430主打低功耗,可能性能上会稍差,能耗会低一些。

使用特权

评论回复
jinglixixi|  楼主 | 2022-3-5 10:07 | 显示全部楼层
东裕光大张浩 发表于 2022-3-2 19:06
国民技术代理,有需要样品 demo板可以找我17779050039

能帮助申请块N32WB031开发板板吗?据说它的无线通信能力很不错,谢谢!

使用特权

评论回复
单片小菜| | 2022-3-7 10:38 | 显示全部楼层
现在国民技术的芯片能够做到这么低的功耗了。不错。

使用特权

评论回复
redone| | 2022-3-7 14:56 | 显示全部楼层
jinglixixi 发表于 2022-3-3 19:19
没错是主打低功耗的产品,性能是十分不错的,价格手头还没有。

最近看了好几个楼主的评测,真的是实实在在的干货,很棒

使用特权

评论回复
jinglixixi|  楼主 | 2022-3-7 23:09 | 显示全部楼层
redone 发表于 2022-3-7 14:56
最近看了好几个楼主的评测,真的是实实在在的干货,很棒

感谢鼓励,继续努力!!!

使用特权

评论回复
jinglixixi|  楼主 | 2022-3-7 23:11 | 显示全部楼层
单片小菜 发表于 2022-3-7 10:38
现在国民技术的芯片能够做到这么低的功耗了。不错。

为国民技术点赞!!!

使用特权

评论回复
发新帖 本帖赏金 200.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2675

帖子

37

粉丝