本帖最后由 wqz 于 2012-8-16 13:24 编辑
【STM32F0实验】+GPIO性能测试
首次接触STM32F0的MCU,为了更好理解使用,我尽量使用寄存器操作,而不使用库去编写程序。下面两个项目都已经编译测试通过,大家可以直接用压缩包里的HEX文件烧写测试。
实验工具:
硬件: STM32F0探索套件
示波器: Tektronix TDS 1002 带宽:60 MHz 采样率:1GS/s
开发软件:Keil MDK-ARM uVision V4.23.00.0
1.GPIO_Test1
GPIO_Test1.rar
(182.3 KB)
烧写文件HEX位置:\GPIO_Test1\MDK\Output\GPIO_Test1.hex
这个项目主要测试目的:
1.GPIO输出带宽
2.LED闪烁
3.按键功能
操作板上的USER按键,可以循环LD4(蓝色LED)切换的闪烁频率(LD4 off → 60Hz → 30Hz → 15Hz → 7.5Hz),
因为60Hz闪烁超出人眼的响应速度,所以你肉眼可能看不到闪烁,但搭上示波器是可以观察到波形的。
60Hz
30Hz
15Hz
7.5Hz
在按键切换闪烁频率的时候,程序同时改变了GPIOC->OSPEEDR值,以便于观察GPIO的输出带宽,GPIO 口输出速度寄存器与闪烁频率对应如下:
60Hz: 高速50MHz
30Hz: 中速10MHz
15Hz: 低速2MHz
7.5Hz: 低速2MHz
高速50MHz
中速10MHz
低速2MHz
这里我用示波器采集PC8引脚波形的上升沿,以便于我们清楚的观察改变寄存器值后的波形变化。
波形是我用相机拍的,效果不是很好,大家将就着看吧。
另外,采集波形的上升沿测量结果与示波器采样率及示波器探头的校正或外部负载电容的差异都有关系,这里结果不一定准确,但从波形的趋势可以明显的分别。因为手头没有更高采样率的示波器,所以这个波形仅供大家参考。
至于LED闪烁和按键操作是常见功能,我就不多做介绍。
-----------------------------------------------------------------------------
2.GPIO_Test2
GPIO_Test2.rar
(175.94 KB)
烧写文件HEX位置:\GPIO_Test2\MDK\Output\GPIO_Test2.hex
这个项目主要目的是测试GPIO的翻转速率,这里我使用两种方法进行测试。
a.传统的操作方法,通过GPIO的ODR寄存器直接操作(Test1函数)
b.通过GPIO的BSRR和BRR 寄存器进行操作(Test2函数)
操作板上的USER按键,可在这两种测试方式中切换。LD4(蓝色)亮时执行Test1函数,LD3(绿色)亮时执行Test2函数。
实际测试中发现这两种测试模式下GPIO的翻转速率都可以达到12MHz。
注:这个项目里波形输出引脚为PC6
结言:
通过上述的实验,发现ST M0 MCU的GPIO功能确实非常有特色。
其一,不但有很高的翻转速率,而且有3种输出速度可选(2MHz、10MHz和50MHz),这对EMC有要求的电路是一个非常实用的功能。
其二,GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。
当然STM32 GPIO的强大远不止这些,如:GPIO锁定机制、端口复用(AF)、 5V容忍I/O端口等等,都值得认真去探究。
最后说明一下,以上实验都是使用片上振荡HSI,实验结果看,片上振荡的精度还是非常不错的。 |