STM32 IO口的八种模式

【冉冰的成长日记007】

STM32 的 IO 口可以由软件配置成如下 8 种模式:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏复用功能

图片出自正点原子,侵删
图片出自正点原子,侵删
每组IO口包含7个寄存器。
分别是

- GPIOx_CRL:端口配置低寄存器
- GPIOx_CRH:端口配置高寄存器
- GPIOx_IDR:端口输入寄存器
- GPIOx_ODR:端口输出寄存器

  • GPIOx_BSRR:端口位设置/清除寄存器
  • GPIOx_BRR:端口位清除寄存器
  • GPIOx_LCKR:端口配置锁存寄存器
    - 注:x表示A-G

前四个重要一点,是要记住的!!

图片出自正点原子,侵删
每个GPIO有16个IO口,每四位配置一个IO口的工作模式,因此需要64位来控制GPIO。而STM32是32位的,所以需要两个寄存器来来一起控制。(个人理解,好像不是很准确,我也没太明白,等我回头再问问)例如CRL和CRH,CRL控制低八位,CRH控制高八位。

GPIO:每个连接到I/O总线上的设备都有自己的I/O地址集,即所谓的I/O端口。类似51单片机的P0~P3,但与51单片机不同的是,对stm32的GPIO来说,使用前需要设置其工作方式。。STM32
的每个 IO 端口都有 7 个寄存器来控制其工作方式,而每一个寄存器都需要用32bit来控制。在STM32中,一组GPIO有16个IO口。
———————————————— 版权声明:本文为CSDN博主「凯之~」的原创文章,遵循CC 4.0
BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_47447179/article/details/105923956

每个引脚用4位来配置,高两位是CNF、低两位是MODE.
要先看低两位MODE,先看工作模式是输入还是输出。再看高两位CNF,看是那种模式。这样就可以通过四位来配置八种工作模式里的一种了,有点绕,但是很好理解哈。。

该寄存器的复位值为 0X4444 4444,复位值其实就是配置端口为浮空 输入模式。从上图还可以得出:STM32 的 CRL 控制着每组
IO 端口(A~G)的低 8 位的模式。 每个 IO 端口的位占用 CRL 的 4 个位,高两位为 CNF,低两位为
MODE。这里我们可以记住几个常用的配置,比如 0X0 表示模拟输入模式(ADC 用)、0X3 表示推挽输出模式(做输出口用,50M
速率)、0X8 表示上/下拉输入模式(做输入口用)、0XB 表示复用输出(使用 IO 口的第二功能,50M 速率)。

//以上引用自正点原子的pdf

图片出自正点原子,侵删

图片出自正点原子,侵删

图片出自正点原子,侵删
当IO口被配置为0100,也就是上拉/下拉输入模式的时候需要用ODR来判断是上拉还是下拉模式。如果ODR为0则为下拉,为1则为上拉。

注:IDR和ODR只有低16位,**IDR只能读出IO口对应的状态,但ODR可读可写还可以分别对ODR的某一位进行独立的设置和清除。 **

GPIOC->CRH&=0XFFF00FFF;//清掉这 2 个位原来的设置,同时也不影响其他位的设置
GPIOC->CRH|=0X00038000; //PC11 输入,PC12 输出
GPIOC->ODR=1<<11; //PC11 上拉

现在再来看这句话,是不是就很好理解了呢
首先将 GPIOC 的11.12IO口清空,再给11配置位0100 ,即上拉下拉输入模式。12配置位1000,即推挽输出最大50M。(P.S.:11.12是倒着数的,我刚刚就迷惑了一下,手动狗头
然后给ODR11个1,所以就是上拉模式

感谢大佬的博客!!欢迎围观

好了,今天这个寄存器就介绍到这里吧!!.
谢谢观看,感谢感谢

补充:上拉电阻和下拉电阻二者共同的作用是:避免电压的“悬浮”,造成电路的不稳定。

一、上拉电阻如图所示:

上拉电阻

1、概念:将一个不确定的信号,通过一个电阻与电源VCC相连,固定在高电平;
  2、上拉是对器件注入电流,灌电流;
  3、当一个接有上拉电阻的IO端口设置为输入状态时,它的常态为高电平。

二、下拉电阻如图所示:

下拉电阻

1、 概念:将一个不确定的信号,通过一个电阻与地GND相连,固定在低电平;
  2、下拉是从器件输出电流,拉电流;
  3、当一个接有下拉电阻的IO端口设置为输入状态时,它的常态为低电平。

昨天只知道能配置上拉/下拉输入,也不知道什么意思,就去查了查,勿喷

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冉冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值