【疑问】STM32其实是16位单片机?

2019-07-20 03:01发布

本帖最后由 flwjn 于 2019-3-22 13:29 编辑

最近在用F407,事事不顺。
刚搞定时钟,又遇到原来的GPIO位操作头文件不能用了的问题。
发现GPIO寄存器里,比F103少了个BRR。
偷懒,找了个现成的头文件用。说实话,并没看懂。
所以,实测了一下,感觉有点诡异。
突然有了兴致。
先用F407的BSRR重新定义了头文件。
测试却发现,高低电平的保持时间不一致。
强迫症表示不能接受。。
测了下,电平的保持时间刚好是2倍关系。
感觉是和数据的位数有关系。
看了下资料,GPIO 寄存器8位、16位、32位都可以操作。
重定义了一下寄存器的地址。将BSRR(32位)一分为二:BSR(16位)和BRR(16位)。
这次得到了,想要的结果。
不过,我就想啊,如果进行8位的操作,IO的翻转是不是能更快。
然后就又定义了一下,分成:
BSRH、BSRL、BRRH、BRRL
测试结果,和16位的操作一样。

个人比较偏实践,理论不足。
就感觉上,这像是个16位单片机,兼容8位操作,但实际是16位操作。所以8位和16位的操作速度是一样的。
在进行32位操作时,其实是进行了2次16位操作,所以会比16位操作多用1倍的时间。
当然,也许内核是32位的,但由于某个瓶颈造成的表现。

*测试程序和波形。PA8引脚,GP PP SP100.


1.png
3组
22.png
1组
23.png
展开 24.png




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。