【疑问】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




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
flwjn
2019-07-21 08:29
edmund1234 发表于 2019-3-23 14:52
LDR 是一条虚指令, 指令集可能找不到的, 但ARM的文档内容会找到

多谢指点。
话说指令集我下午的时候搜了搜,没找到有带注解的。

之前,我都是用8位单片机,去年因为硬件资源不足,才用F103做了个小项目。
这个F407的开发板,上周六拿到手的,时钟用了3天才整出来,还是翻例程才发现缺少电源和Flash的配置,估计是因为系统时钟超过一定频率后,默认的电源和Flash的配置会跟不上。但也没有找到详细的说明。
可是库函数,我实在是用不惯。但cortex-m4的NVIC_TypeDef突然发现找不到,看来还有很多没有理解的地方。有意思。

一周热门 更多>