打印
[AT32F421]

AT32F421的GPIO是否支持位带操作

[复制链接]
1571|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhjerry|  楼主 | 2020-12-4 19:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
AT32F421的GPIO是否支持位带操作

正在使用AT32F421移植原来使用SXX32F103的设计。
发现GPIO的位带操作无效。相对F103的GPIO位带定义已经把OsODR/OsIDR分别由12/8改为20/16, 已经验证无效。
请厂家确认。如果可行请指导正确方法。

使用特权

评论回复
沙发
muyichuan2012| | 2020-12-4 21:22 | 只看该作者
421的地址是按着st030排的 因此和st030一样,gpio 不支持bitband。但是 421 gpio有单独的set 和rset寄存器,和bitband操作一样。

使用特权

评论回复
板凳
zhjerry|  楼主 | 2020-12-7 08:51 | 只看该作者
谢谢解答。改代码问题解决了,没有BITBAND效率稍低而已。
M4内核本身是支持BITBAND的, 而且F421的SRAM区域也支持这个功能,开发库有应用实例。
不了解为什么把GPIO的BITBAND功能给阉割了,能节省很多逻辑门 ?
更不理解的是这么重要的信息在DS和RM中为什么只字不提?一定要用户自己摸索或到论坛提问?

使用特权

评论回复
地板
ughbss| | 2020-12-7 22:25 | 只看该作者
其实DS和RM中已经说明,BITBAND地址段是ARM规定的,而421的GPIO相关寄存器不在BITBAND地址段中,所以不支持BITBAND功能。参考M4权威手册

使用特权

评论回复
5
嵌入小菜菜| | 2020-12-8 21:48 | 只看该作者
现在的位操作效率很低吧,为什么还用?

使用特权

评论回复
6
muyichuan2012| | 2020-12-9 17:17 | 只看该作者
本帖最后由 muyichuan2012 于 2020-12-9 17:18 编辑
zhjerry 发表于 2020-12-7 08:51
谢谢解答。改代码问题解决了,没有BITBAND效率稍低而已。
M4内核本身是支持BITBAND的, 而且F421的SRAM区域 ...

前面已经很明确的回答您了,使用GPIOx_BSRE 效率和bitband是一样的。GPIOx_BSRE 设计的目的就是为了快速进行GPIO set和reset,
其优势在于:操作时,直接写1即可,写0是无效的,无须把寄存器值读出来。




使用特权

评论回复
7
zhjerry|  楼主 | 2020-12-9 20:18 | 只看该作者
muyichuan2012 发表于 2020-12-9 17:17
前面已经很明确的回答您了,使用GPIOx_BSRE 效率和bitband是一样的。GPIOx_BSRE 设计的目的就是为了快速进 ...

写操作效率差不多,读操作效率略低。
而代码可读性也差一点。

使用特权

评论回复
8
muyichuan2012| | 2020-12-9 20:37 | 只看该作者
本帖最后由 muyichuan2012 于 2020-12-9 20:38 编辑

代码可读性的决定因素是程序员编写风格,421对标的是st030,st030的设计也是这样的。
当然您的确想使用bitband功能,也可以使用at32f415  413 403a 407等型号,这些型号对标的是st103.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

232

帖子

4

粉丝