STM32L432KC 测评

又一次的拿到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)

  1. //   #pragma arm section code = "RAMCODE"

  2. __attribute__((section("RAMCODE")))

  3. void Toggle_LED(void)

  4. {

  5. HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);

  6. HAL_Delay(300);

  7. }

复制代码

打开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的话,想必这个外围电路会相对小一些。
以上,就是我的测评内容,欢迎指正,大牛勿喷。谢谢。

(0)

相关推荐