Cortex‐M3和Cortex‐M0是否都能位带操作

最近在进行stm32l011f4的编程,想到stm32有位带操作,便想试一试,但是事与愿违,先贴下位带操作代码

Cortex‐M0的位带操作代码

//IO输出方向设置
#define SDA_IN()  {GPIOA->MODER&=0XFFF1FFFF;}        //PA_10设置成输入
#define SDA_OUT() {GPIOA->MODER&=0XFFF5FFFF;}       //PA_10设置成输出

// SDA = PA_10;SCL = PA_9
#define IIC_SCL    PAout(9)
#define IIC_SDA    PAout(10)
#define READ_SDA   PAin(10)

MODER寄存器为IO端口功能寄存器

Cortex‐M3的位带操作代码

//IO输入输出设置
#define SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}

//SDA=PB_11;SCL=PB_10	 
#define IIC_SCL    PBout(10) //SCL
#define IIC_SDA    PBout(11) //SDA	 
#define READ_SDA   PBin(11)  //SDA设为输入 

CRH为Cortex‐M3的端口功能寄存器

但是Cortex‐M0编译一直有问题,经过查阅资料,Cortex‐M0芯片不支持位带操作

Cortex‐M3存在端口映射区,所以支持位带操作。

Cortex‐M0不存在端口映射区,所以不支持位带操作。

所以同学们在编写Cortex‐M0的程序时,可以不考虑位带操作。

猜你喜欢

转载自blog.csdn.net/iefenghao/article/details/81805160