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是一样,都是如此操作。求原子大大指点一二
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。