最近在进行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的程序时,可以不考虑位带操作。
本文介绍了STM32L011F4编程中尝试使用位带操作的经历,通过对比Cortex-M0与Cortex-M3芯片的特点,解释了为何Cortex-M0不支持位带操作,并给出了具体的代码示例。
6371

被折叠的 条评论
为什么被折叠?



