关于STM32F103C8T6端口配置寄存器的代码思路(附中文手册)

最近在做关于stm32的项目时看到的一个参考代码,里面的IO口配置是使用寄存器配置的,因为直接接触的比较少,不太清楚其原理,琢磨了好一会才理解整个思路,下面是对这段代码的解释。

这段代码配置的是一个IIC通信中SDA的方向和输出模式,整体分为MPU_SDA_IN()和MPU_SDA_OUT()两个方向的配置。

#define MPU_SDA_IN()  {GPIOB->CRH &= 0XFFFF0FFF;GPIOB->CRH |= (u32)8<<12;}
#define MPU_SDA_OUT() {GPIOB->CRH &= 0XFFFF0FFF;GPIOB->CRH |= (u32)3<<12;}

一、GPIOB->CHR

对应端口配置高寄存器,也就是PB8-PB15端口。

二、&= 0XFFFF0FFF

指寄存器的第12位清零,除了第12位,其他的都是1,也就是擦除了CNF11【1:0】和MODE【1:0】的数据,不影响其他IO口的配置。

三、|= (u32)8<<12:

这行代码将第12位引脚的模式设置为输出模式。(u32)3指的是将3转换为32位无符号整数。 3<<12表示数字3左移12位,得到0x00008000,也就是0x0000 0000 0000 0000 1000 0000 0000 0000。然后,通过位或运算(|=)将其与GPIOB->CRH的当前值合并,从而设置第12位引脚的模式。

四、对应模式

引脚的配置如下图所示,0011对应的是CNF11【1:0】为10,MODE【1:0】为00,所以定义的IO口配置为通用推挽输出。

五、输出速度

根据上面的分析我们得知MPU_SDA_IN()的MODE【1:0】为输入模式,而在输出模式中可以选择其速度。我们分析可得,MPU_SDA_OUT()的MODE【1:0】为11,对应50MHz。

下图为整体思路的总结:

stm32c8t6的中文手册:

链接:https://pan.baidu.com/s/10ZqjuypXtfU6aHr0O14scA?pwd=m52c 
提取码:m52c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值