在之前的一次用STM32F1配置AT24C02时,之前错误的写法是这样 //#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;} //#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;} 配置正确的写法是这样: #define SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)4<<4;} #define SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)3<<4;} 就是这两行写的不一样导致的这个错误,这个应该怎么解释?把CRL改成CRH就可以了是什么原因呢? file:///C:\Users\Administrator\Documents\Tencent Files\643011664\Image\C2C\~0JVYN3ZF04J_LR9VR%UN(2.png file:///C:\Users\Administrator\Documents\Tencent Files\643011664\Image\C2C\~0JVYN3ZF04J_LR9VR%UN(2.png |
STM32F103x中文数据手册
新手求教,为何在我电脑上找不到STM32F1Xx.h文件
金龙107例程汇总(STM32F107)
万利STM32F107VC 原理图
STM32F103 ADC多通道检测必须要DMA吗?
【官方例程】STM32F107以太网官方例程
STM32F105 USB接收数据不断进入中断,出现“死机”现象
使用STM32F107和最新库跑CoOS操作系统的例程
请教STM32F103C8T6支持DFU功能吗?
STM32F107,PWM频率理论与实际差4.6倍
一个io配置位口占4bit,通过CNF1,CNF0,MODE1,MODE0组合可以配置成各种模式。
GPIOB->CRH&=0XFFFFFF0F;这里用与运算,和0相与都为0,和1相与都为本身,所以可以清除PB9的配置位又能保持其他IO口配置不变。
GPIOB->CRH|=(u32)4<<4;前面的是4,因为4的二进制是0100,也就是浮空输入;后面左移4是因为PB9是在CRH寄存器的bit4-bit7,所有左移4位;
用或运算,可以配置PB9又能保持其他IO口配置不变。
点评
是的,的确和所说一样#define SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)4<<4;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)3<<4;}
比方说4 << 4 后面的4 表示的是PB9 ,但是手册里面还有一个5是否也可以写成 4<<5? 那写在前面的3和4表示的是什么?
GPIOB->CRH&=0XFFFFFF0F;为啥前面与,后面又是GPIOB->CRH|=(u32)4<<4;或的?
是的,的确和所说一样#define SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)4<<4;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=(u32)3<<4;}
比方说4 << 4 后面的4 表示的是PB9 ,但是手册里面还有一个5是否也可以写成 4<<5? 那写在前面的3和4表示的是什么?
GPIOB->CRH&=0XFFFFFF0F;为啥前面与,后面又是GPIOB->CRH|=(u32)4<<4或的?