在芯片國(guó)產(chǎn)化日益高漲的情況下,一些新的芯片廠家脫穎而出,比如以串口通訊發(fā)展起來(lái)的沁恒微電子的WCH、兆易創(chuàng)新的GD、雅特力的AT、中科藍(lán)訊的AB,以及國(guó)民技術(shù)等。
其中的國(guó)民技術(shù)則屬于后起之秀,其主打的產(chǎn)品有基于M0內(nèi)核的N32G03X通用系列、基于M4內(nèi)核的N32G45X通用系列,以及面向低功耗的N32L4XX系列。
這樣在選取低功耗MCU時(shí),我們就多出了一種選擇,也加大了設(shè)計(jì)的靈活性。
此外,國(guó)民技術(shù)所主打的3個(gè)系列產(chǎn)品是支持以MDK來(lái)進(jìn)行開(kāi)發(fā)的,這樣對(duì)于那些出道早的程序者就天然地增添了一份親近感。你可別小看了這份親近感,常言道“不怕千招會(huì),就怕一招熟”,用慣的東西好上手,它起到事半功倍的性能。
下面就有請(qǐng)我們的主角N32L43XRL-STB開(kāi)發(fā)板上場(chǎng),它的MCU為N32L436CBL7,其最高主頻可達(dá)108 MHz,是采用LQFP48管腳封裝。
該芯片的主要性能及參數(shù):
● 采用32位ARMCortex-M4內(nèi)核+FPU,支持單周期硬件乘除法指令,支持DSP指令和MPU。
● 高達(dá)128KByte片內(nèi)Flash,10萬(wàn)次擦寫(xiě)次數(shù),10年數(shù)據(jù)保持。
● 高達(dá)32KByte片內(nèi)SRAM,包括24Kbyte SRAM1和8Kbyte SRAM2。
● 高性能模擬接口,含1個(gè)12bit 5MspsADC,且多種精度可配置、2個(gè)軌到軌運(yùn)算放大器、2個(gè)高速模擬比較器、多達(dá)24通道電容式觸摸按鍵、1個(gè)采樣率為1Msps的12bit DAC。
● 豐富的通信接口,有3個(gè)USART接口、2個(gè)UART接口、1個(gè)LPUART、2個(gè)速率高達(dá)27 MHz的SPI接口、2個(gè)速率高達(dá)1 MHz的I2C接口、1個(gè)USB2.0 Fullspeed Device接口及1個(gè)CAN 2.0A/B總線接口。
● 多樣的定時(shí)計(jì)數(shù)器,有2個(gè)16bit高級(jí)定時(shí)計(jì)數(shù)器、5個(gè)16bit通用定時(shí)計(jì)數(shù)器、2個(gè)16bit基礎(chǔ)定時(shí)計(jì)數(shù)器、1個(gè)16bit低功耗定時(shí)計(jì)數(shù)器、1x24bit SysTick、1x7bit窗口看門(mén)狗、1x12bit獨(dú)立看門(mén)狗。
所以,它在性能方面是完全可以勝任常規(guī)芯片要求的! 該芯片的功耗情況:
● 在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。
接下來(lái),就將N32L43XRL-STB開(kāi)發(fā)板與N32G45XVL-STB開(kāi)發(fā)板放到一起,做一下功耗的對(duì)比。當(dāng)然,這是在都配有調(diào)試下載工具的情況下,會(huì)比單純的芯片對(duì)比要大一些,但相對(duì)來(lái)講還是比較公平的。 經(jīng)檢測(cè),N32L43XRL-STB開(kāi)發(fā)板的功耗為0.13135W,N32G45XVL-STB開(kāi)發(fā)板的功耗為0.15392W,二者凈差值為0.02257W。
圖1 開(kāi)發(fā)板的對(duì)比
圖2 N32L43XRL-STB的功耗
圖3 N32G45XVL-STB的功耗
如何構(gòu)建開(kāi)發(fā)環(huán)境:
前面說(shuō)過(guò)國(guó)民技術(shù)的MCU是支持MDK來(lái)開(kāi)發(fā)的,那么對(duì)于N32L4x系列的開(kāi)發(fā)板,是如何來(lái)構(gòu)建其開(kāi)發(fā)環(huán)境的呢?
首先要做的自然是要安裝MDK,其版本可以是V5.25。
隨后,為支持此類芯片的使用,還需要安裝Nationstech.N32L43x_DFP.0.1.0。
這樣再打開(kāi)MDK,就可在芯片列表中見(jiàn)到N32L4x系列的身影,見(jiàn)圖4所示。
圖4 添加芯片支持
至此,開(kāi)發(fā)環(huán)境就基本構(gòu)建好了。
此外,為了便于了解和學(xué)習(xí)程序的設(shè)計(jì)方法,還應(yīng)下載一個(gè)函數(shù)庫(kù)與例程,其壓縮包為Nationstech.N32L43x_Library.1.1.0.7Z。
以例程LedBlink為例,經(jīng)編譯其結(jié)果如圖5所示。
圖5 完成編譯
為進(jìn)行下載測(cè)試,需按圖6所示來(lái)設(shè)置調(diào)試工具的類型,并按圖7所示來(lái)選取燒錄算法。
圖6 設(shè)置調(diào)試工具
圖7 設(shè)置燒錄算法
在開(kāi)發(fā)板上載有3個(gè)彩色LED,其電路原理圖見(jiàn)圖8所示,使用例程就可見(jiàn)到圖9所示的流水燈效果。
仿照該例程,可獲得GPIO口的使用方法,并實(shí)現(xiàn)開(kāi)發(fā)板的功能擴(kuò)展。
圖8 原理圖
圖9 測(cè)試效果
驅(qū)動(dòng)相應(yīng)器件的功耗對(duì)比
1)OLED屏顯示及功耗
OLED屏是一種自發(fā)光的顯示器件,但又較之數(shù)碼管要更節(jié)省電能。此外,對(duì)I2C接口的OLED屏來(lái)講,它的引腳少又能節(jié)省對(duì)GPIO口資源的占用,且所顯示的信息及形式更豐富,故極適合與N32L43X系列這樣的芯片相配合來(lái)設(shè)計(jì)低功耗產(chǎn)品。
那么,在N32L43X系列芯片的開(kāi)發(fā)環(huán)境下,要實(shí)現(xiàn)I2C接口的OLED屏驅(qū)動(dòng)是否容易呢?
其實(shí),要實(shí)現(xiàn)起來(lái)并不復(fù)雜,所需要的只是2個(gè)GPIO口及相應(yīng)等級(jí)的延時(shí)函數(shù)支持,從而保證以GPIO口模擬的方式來(lái)完成I2C通訊。
在OLED屏與開(kāi)發(fā)板按一下關(guān)系來(lái)連接的情況下:
SCL----PA1
SDA----PA2
對(duì)引腳功能的配置函數(shù)為:
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
延時(shí)函數(shù)的配備:
由于在MDK的開(kāi)發(fā)板平臺(tái)下,并未提供毫秒級(jí)和微秒級(jí)延時(shí)的函數(shù),因此需要使用系統(tǒng)的滴答時(shí)鐘來(lái)自行設(shè)計(jì)。
微秒級(jí)延時(shí)函數(shù):
void Delayus(uint32_t count) { SysTick_Delay_Us(count); }
毫秒級(jí)延時(shí)函數(shù):
void Delayms(uint32_t count) { count=count*1000; SysTick_Delay_Us(count); }
使用微秒級(jí)延時(shí)函數(shù)的I2C啟動(dòng)函數(shù)為:
void IIC_Start() { OLED_SCLK_Set(); Delayus(2); OLED_SDIN_Set(); Delayus(2); OLED_SDIN_Clr(); Delayus(2); OLED_SCLK_Clr(); Delayus(2); } 有了以上的基礎(chǔ),就不難將OLED屏的驅(qū)動(dòng)功能移植給N32L43X系列芯片。 實(shí)現(xiàn)OLED屏顯示功能測(cè)試的主程序?yàn)椋篿nt 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 功耗測(cè)試
2)傳感器檢測(cè)及功耗 以BMP085溫度大氣壓傳感器為例,其器件的連接關(guān)系為:
OLED_CLK_PIN---PA1
OLED_DIN_PIN---PA2
BMP_CLK_PIN---PB0
BMP_DIN_PIN---PB1
讀取傳感器數(shù)據(jù)的語(yǔ)句定義為:
#define IIC_SDA_IN GPIO_ReadInputDataBit(GPIOB, GPIO_PIN_1)
實(shí)現(xiàn)數(shù)據(jù)引腳輸入輸出功能定義的函數(shù)為:
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發(fā)送字節(jié)數(shù)據(jù)的函數(shù)為:
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); } }
讀取溫度大氣壓的函數(shù)為:
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); }
檢測(cè)溫度大氣壓的主程序?yàn)椋?/p>
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開(kāi)發(fā)板上完成了溫度大氣壓檢測(cè)裝置的設(shè)計(jì),并針對(duì)其低功耗的特點(diǎn)對(duì)相應(yīng)環(huán)境的功耗進(jìn)行了跟蹤測(cè)量。盡管測(cè)試的工具不很專業(yè),但它還是能夠帶來(lái)一個(gè)很直觀的感性認(rèn)識(shí)。所以在低功耗的設(shè)計(jì)中,使用N32L43X芯片是可行的也是十分方便的,其功耗也是能夠達(dá)到認(rèn)可的!
審核編輯 :李倩
-
mcu
+關(guān)注
關(guān)注
146文章
17841瀏覽量
360498 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2284瀏覽量
96036 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5530瀏覽量
102350
原文標(biāo)題:低功耗MCU怎么選?看網(wǎng)友親測(cè)國(guó)民技術(shù)N32L4xx系列!
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
32位低功耗MCU設(shè)計(jì)
轉(zhuǎn):32位低功耗MCU設(shè)計(jì)
超低功耗MCU如何降低功耗
如何選擇超低功耗MCU
MCU如何降低功耗?
低功耗MCU
如何保證MCU的低功耗
低功耗MCU選型要點(diǎn)
TI MCU設(shè)計(jì)研討會(huì):低功耗MCU的性能介紹
關(guān)于MCU的低功耗問(wèn)題
低功耗MCU設(shè)計(jì)理念

MCU低功耗設(shè)計(jì)(三)產(chǎn)品

低功耗MCU選型

評(píng)論