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-20 11:47
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-07-20 17:36
F0,不知道,F3肯定支持。
F3和F4一样,F3=阉割版的F4。但是也支持位带操作的。
李马克
3楼-- · 2019-07-20 19:26
回复【2楼】styleno1:
---------------------------------
这样。但我还是很纠结这个问题。至少得找出问题所在。
李马克
4楼-- · 2019-07-20 20:25
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-07-21 01:00
回复【5楼】李马克:
---------------------------------
不可能啊。
我用F4的位带操作很爽的。
李马克
6楼-- · 2019-07-21 05:56
回复【6楼】正点原子:
---------------------------------
我的是F302R8,M4核。
M4的位带操作和我上面的宏定义应该是一样呀

一周热门 更多>