F0和F3是不是不支持位带操作bitband?

2019-07-20 11:30发布

今天试了下F0和F3的位带操作,发现没效果。
是F0和F3不支持这种吗?一个M0,一个M4。


#define GPIOA_ODR_A  (GPIOA_BASE+0x14)
#define GPIOA_IDR_A  (GPIOA_BASE+0x10)
#define GPIOB_ODR_A  (GPIOB_BASE+0x14)
#define GPIOB_IDR_A  (GPIOB_BASE+0x10)
#define GPIOC_ODR_A  (GPIOC_BASE+0x14)
#define GPIOC_IDR_A  (GPIOC_BASE+0x10)
#define GPIOD_ODR_A  (GPIOD_BASE+0x14)
#define GPIOD_IDR_A  (GPIOD_BASE+0x10)
#define GPIOE_ODR_A  (GPIOE_BASE+0x14)
#define GPIOE_IDR_A  (GPIOE_BASE+0x10)
//????????
#define BitBand(Addr,BitNum)    *((volatile unsigned long *)((Addr&0xF0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))  //volatile??Addr???????????????,???
#define PAout(n)   BitBand(GPIOA_ODR_A,n)
#define PAin(n)    BitBand(GPIOA_IDR_A,n)
#define PBout(n)   BitBand(GPIOB_ODR_A,n)
#define PBin(n)    BitBand(GPIOB_IDR_A,n)
#define PCout(n)   BitBand(GPIOC_ODR_A,n)
#define PCin(n)    BitBand(GPIOC_IDR_A,n)
#define PDout(n)   BitBand(GPIOD_ODR_A,n)
#define PDin(n)    BitBand(GPIOD_IDR_A,n)
#define PEout(n)   BitBand(GPIOE_ODR_A,n)
#define PEin(n)    BitBand(GPIOE_IDR_A,n)

bitband如上。偏移地址根据数据手册改过了,

经验证不是时钟的问题,因为用了GPIO_WriteBit可以起作用,但是这个位带操作就用不了。想不懂是什么原因。权威手册里讲的也是跟M3是一样,都是如此操作。求原子大大指点一二
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
styleno1
1楼-- · 2019-07-21 09:27
 精彩回答 2  元偷偷看……
李马克
2楼-- · 2019-07-21 11:40
回复【8楼】styleno1:
---------------------------------
-。-还是不行,我还是放弃了。
我估计是KEIL5哪里设置有问题了
wddjj
3楼-- · 2019-07-21 17:00
 精彩回答 2  元偷偷看……
李马克
4楼-- · 2019-07-21 22:04
 精彩回答 2  元偷偷看……
lison0103
5楼-- · 2019-07-22 03:32
真是坑跌,F3是F4阉割版,变相的连位带操作也不行。。。
qq243380211
6楼-- · 2019-07-22 05:08
直接操作寄存器,我觉得这种比较容易理解。位带操作的话就比较简练

一周热门 更多>