在之前的一次用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 |
【MCU实战经验】基于STM32F103C8T6的hart总线调试器设计
求教STM32F103进入STOP模式后用外部中断唤醒的问题
基于STM32F103RCT6的无源蜂鸣器音乐播放(生日快乐歌)
STM32F103c8t6有没有DAC 功能?
STM32F103x中文数据手册
新手求教,为何在我电脑上找不到STM32F1Xx.h文件
金龙107例程汇总(STM32F107)
万利STM32F107VC 原理图
STM32F103 ADC多通道检测必须要DMA吗?
【官方例程】STM32F107以太网官方例程
一个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或的?