在芯片國產化日益高漲的情況下,一些新的芯片廠家脫穎而出,比如以串口通訊發展起來的沁恒微電子的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文章
17184瀏覽量
351689 -
計數器
+關注
關注
32文章
2256瀏覽量
94712 -
開發板
+關注
關注
25文章
5082瀏覽量
97708
原文標題:低功耗MCU怎么選?看網友親測國民技術N32L4xx系列!
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論