完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
关于STM32 bit_band有一个疑问:
#define BITBAND(addr, bitnum) ((addr & 0xF0000000) + 0x2000000 + ((addr & 0xFFFFF) << 5) + (bitnum << 2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) 其中bitnum取值范围为多少。 在M3权威指南里面范围为0--7 每个IO口最多可以支持16个端口,我赋值为13的时候对应的IO口操作没有问题,说明这个值可以大于7 还请大侠帮忙分析下,谢谢! |
|
相关推荐
7个回答
|
|
不太清楚
|
|
|
|
没研究过,,,,
|
|
|
|
本帖最后由 creep 于 2015-7-8 16:57 编辑
其实这只是计算的方式不同而已,结果是一样的。 进行bitband的时候是按字节进行划分的,所以bitnum的大小为0-7,但是IO的寄存器是32位的并且低16位都可以映射,此时我们使用了IO的最低的字节的地址进行计算,因为有个偏移地址,所以BIT8-15得到的结果也是对的。 使用下面的公式: 比如GPIOA的地址为0x40020014,计算GPIOA.8有2种方法; 1)bit_band_base = 0x40020014,byte_offset = 0,bit_number = 8;(从0x40020014开始第8个bit) 2)bit_band_base = 0x40020014,byte_offset = 1,bit_number = 0;(从0x40020015开始第0个bit) 上面的地址只为说明使用,可能与实际的地址不符。 |
|
|
|
看情况吧,如果寄存器是32位的,应该是最大到31,如果是16位的话,应该是到15
|
|
|
|
M3 里面说的清楚...
|
|
|
|
学习了。。。
|
|
|
|
4楼好给力
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2101 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1219 浏览 0 评论
2857 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2619 浏览 3 评论
5305 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-14 22:09 , Processed in 0.726115 second(s), Total 85, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号