今天试了下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是一样,都是如此操作。求原子大大指点一二
F3和F4一样,F3=阉割版的F4。但是也支持位带操作的。
---------------------------------
这样。但我还是很纠结这个问题。至少得找出问题所在。
---------------------------------
不可能啊。
我用F4的位带操作很爽的。
---------------------------------
我的是F302R8,M4核。
M4的位带操作和我上面的宏定义应该是一样呀
一周热门 更多>