又一次的拿到ST的評估板了。不太喜歡每次的測評都寫的千篇一律,那樣沒什麼意思。我覺得寫東西也好,生活也好。太過於重複的東西往往讓人會變得麻木。拿到Nucleo-L432KC,就該想想改從什麼地方入手,說實話,我覺得僅僅靠一篇或者幾篇帖子難以對一個微控制器(MCU)做非常全面的剖析。至少我覺得應該從自己熟悉以及感興趣的方面入手,做一些操作,表達一下看法吧。這樣在這麼炎熱的天氣,才有動力測評下去。唉~~~,說起來,真的好熱啊……
一、外觀
在這裡我拿Nucleo-F042K6與其做外觀對比。至於Nucleo-l432kc的性能說明,官網都有。我就不搬磚過來啦。
STM32L432KC 官網介紹
從以上兩個不同型號的Nucleo-32板外觀的對比,我們可以發現兩個不同之處:
a、那就是Nucleo-L432K多了X1;從原理圖看就是如下紅色方框中的X1.
從datasheet,L4用戶手冊看這個地方就是比起其他Nucleo的板子在OSC32_IN/OUT的引腳多了個X1的晶振 。
b、MCU的封裝由LPQFP變成了UFQFN。至於外面的那個焊盤是幹什麼用的,我請教過@dcexpert
這個焊盤是預留的QFP的封裝,這樣同一個板子就可以兼容兩種不同封裝的晶片了。
另一方面:NUCLEO-L432KC開發板是首個集成一款QFN32微型封裝微控制器的Nucleo-32開發板,板載一顆STM32L432KCU6微控制器(UFQFPN32)。
另外,Nucleo-L432的引腳分布看起來也和別的Nucleo-32的板子沒什麼區別。
當然,別看這個L432「小個子」,但是它的內部的模塊一點也不比F4的有些型號少。特別是它還增加了可編程的運放單元。
二、將程序放在SRAM中執行
方法一:
a、這裡以LED電平翻轉的程序為例。首先用CubeMX配置LED電平翻轉的程序。
b、打開MDK工程,打開Options for Target 選項。打開Linker選項,可以看到
Flash 起始地址:0x08000000
RAM 起始地址: 0x20000000
編譯工程後,可以看到Memory map文件GPIO_IOToggle.map文件在該工程的目錄下:
用Notepad打開該文件,可以看到如下兩個函數的地址在FLASH中
HAL_GPIO_TogglePin();
HAL_Delay();
通過#pragma arm section code = "RAMCODE" 和#pragma arm section
具體的方法如下:
1、找到,並打開.sct文件(我使用Notepad打開)
2、修改.sct文件。自定義一個RAMCODE的section,放在RW_IARM執行區域,地址範圍為:
0x20000000~0x20000800(這裡我放2KB的空間)
因為從map文件來看。Total ROM Size 就佔用的Flash大小,Total RW Size是佔用的SRAM大小
led電平翻轉這個程序,所佔SRAM大小為1kb左右
修改.sct文件,並保存
3、在工程中,Options for Target 的Linker選項中,使用剛才修改過的.SCT文件。
4、以#pragma arm section code = "RAMCODE"為開頭。將所有需要放到RAMCODE section的函數包含進來。
這個時候編譯器會自動將這些函數放到RAMCODE所在的0x200000000開始的區域。
所以,重新編譯後,打開map文件,就可以看到這幾個函數的地址在SRAM中了。
方法二:
1、同樣需要修改.SCT文件(修改的方法同方法一的1、2);(我修改成64KB的RAM(因為L432隻有64kb的Sram))
2、將需要在RAM中執行的函數前面添加__attribute__((section("RAMCODE")))聲明該函數放在RAMCODE section中。這裡需要注意的是:如果將這個聲明放在函數前面,那麼這個函數調用的所有函數也會放到RAMCODE的section中。
不過還是需要像方法一一樣,使用修改過的.sct文件(詳見方法一的3)
// #pragma arm section code = "RAMCODE"
__attribute__((section("RAMCODE")))
void Toggle_LED(void)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
HAL_Delay(300);
}
複製代碼
打開map文件,看到這幾個函數的地址在ram中
由此可見,我覺得這個方法二比起方法一,要更加的靈活一些。因為方法二隻需要添加聲明就可以了。方法一太過於死板了。
三、L432 的特色:OPAMP(可編程運放單元)
如英文版的用戶手冊描述:它的正向輸入端可連接到內部DAC;輸出端可連接到內部的ADC
如下為引腳連接功能:
打開en.stm32cubel4\STM32Cube_FW_L4_V1.5.0\Projects\STM32L432KC\Nucleo\Examples\OPAMP\OPAMP_PGA
這個工程:
/* set to 1 after PA.12 (Arduino D2) interrupt */
__IO uint32_t UserButtonStatus = 0;
PA12作為按鍵中斷,來改變opamp的放大增益。所以將杜邦線的一頭接在PA12,另一頭接GND或者不接GND來實現PA12的這個按鍵功能。
[請點擊閱讀原文觀看代碼]
量測PA4(DAC1_OUT1),PA3(OPAMP_OUT1),通過將PA12接地或者不接地的次數得到如下波形,可以看出,這個時候的放大倍數約為4倍。
但就這個例子來看,運算放大後的波形還是有些失真的。
總結:
1、對於同樣的cortex-M4內核的這個「小個子」MCU來說,它的功能並沒有隨著它的小體積而減少;
2、本來還想玩玩CoreMark的,但是移植成功後,使用串口1來列印,就是不成功。我折騰了下,工程編譯沒有錯誤,但是就是不顯示列印信息我就不拿這個程序出來獻醜了。這個花的時間挺多的,加上天氣熱,弄得我很惱火我自己。
這裡我放出,CoreMark軟體下載連結:CoreMark下載連結(需註冊)
如何將coremark程序移植到STM32上.pdf
有興趣的網友玩玩,我後面有空下來再研究下,就是想看看我們測出來跟官方測試出來差異有多大。
3、最近有個項目中,新打樣回來一批板子(5pcs)。其中有3pcs都是剛開始沒什麼問題,用段時間(幾天吧),就發現CPU(STM32F405RGT6)發燙。用數顯的Power Supply看電流最小的有200~300mA,最大的2A左右了。所以就懷疑CPU問題。解焊其中一塊CPU,量測本體3.3V 對 GND阻抗,發現阻抗為0
a、購買新的CPU回來後,重新焊接後,量測3.3v對地不短路。重新上電後,過段時間CPU依然發燙(焊接好CPU後,用洗板水擦洗過);
b、拿打樣剩餘的空板,只焊接CPU外圍電路,重新上電,過段時間CPU依然發燙(焊接好CPU後,用洗板水擦洗過);
同樣的,我同事負責的另一個項目中,也是有顆CPU有問題。焊接好CPU後,用洗板水擦洗過板子。發現上電後,CPU部位冒煙了。。。。所以我們一致認為洗板水有問題(是從某寶購買的)。
下周,抽個時間再浪費1pcs(30多塊RMB)驗證下,這次不用洗板水,看看效果。。。。
4、好了言歸正傳的說下這個Nucleo-L432KC的板子,這個板子首款有QFN32的Nucleo-32的板子。所以有點蓋頭換面的意思。當然,雖然沒有太深入的去理解它自帶的OPAMP的功能。但是從介紹中可以看得出,這個是與ADC,和DAC有關係的。最近我同事有個傳感器上就是需要運放,因為如果將那個傳感器的輸出接在ADC上,顯示只有0.8v的信號,這樣用adc採樣的數值就不是很準確了,所以他們最近在使用放大器在設計電路來放大信號。所以如果MCU自帶AMP的話,想必這個外圍電路會相對小一些。
以上,就是我的測評內容,歡迎指正,大牛勿噴。謝謝。
點擊閱讀原文與原作者探討、交流。
歡迎微博@EEWORLD
如果你也寫過此類原創乾貨請關注微信公眾號:EEWORLD(電子工程世界)回復「投稿」,一經入選,我們將幫你登上頭條!
與更多行業內網友進行交流請登陸EEWORLD論壇。