
浅析STM32之GPIO寄存器(CRL/CRH)配置" F0 {. q% x1 ^- d! A$ X 一、前言- @$ D- p% z& u3 l) ?. t3 L- Z GPIO的配置可以说是STM单片机的一大特色,通过GPIO的配置我们可以进行多种不同模式的输入和输出,并且进行配置的方式也有多种,一般我们在使用的过程中可能大多数都是通过库函数来进行配置的,这样确实也比较方便,但有时候我们也不难免会使用寄存器进行配置,代码可能会更加简洁,所以掌握寄存器的配置对我们来说也很重要。 特别是在进行IIC的数据引脚输入输出配置时寄存器的作用十分重要 ) \; o+ [( |# o4 u3 e7 S- N 二、寄存器配置分析
在stm32单片机中我们可以发现,单片机的引脚分成了很多组GPIOA~GPIOE,并且每一组中又有0-15共16个引脚,每个IO口由4bit位来控制,那么一组IO就需要16*4 = 64bit,但我们使用的是32位的单片机,所以又将64Bit分成了两部分,高32bit又GPIOX_CRH寄存器来配置,低32bit由GPIOX_CRLj寄存器来进行配置.对应的引脚CRL为0到7CRH为8到15。: f2 e$ a/ u! a$ j 9 }/ e' Y* x5 H) \! t 下面是官方数据手册的内容 GPIOX_CRL 3 R9 @- Q( B8 {$ v9 k$ a: Q. y ![]() GPIOX_CRH3 t5 h+ }. o! D3 s! N ![]() % F( D! }$ B$ G7 k# h! N$ I 从上面我们可以看出不管是GPIOX_CRL还是GPIOX_CRH每个IO都是由CNF[1:0]和MODE[1:0]两部分进行配置选择的,其中MODE[1:0]是进行配置输入还是输出一般00为输入 11为输出。CNF[1:0]则配合MODE[1:0]进行具体的模式配置。! Z Y8 `6 C) _ 4 i/ n# R% X- Y4 ]: a) d' @
三、代码解析 GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<28;, C- _# b8 w+ i1 {$ w5 W0 X* e8 w. t 首先我们从0x0FFFFFFF这句代码中可以看出我们是进行GPIO_Pin_7配置,先将7引脚Io的控制位清零其余的位保持不变,8 ----->1000 为CNF[1:0] 为10 上拉MODE[1:0] 为00输入则将引脚配置成上拉输入模式 8 << 28 可以看成 1111 1111 1111 1111 1111 1111 1111 1000 左移28位则变成了1000 1111 1111 1111 1111 1111 1111 1111,可以看出就是GPIO_Pin_7引脚进行配置了上拉输入模式。 同理5 q* B# m6 y4 L- z. T3 ?$ \) K GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<28; 首先从0X0FFFFFFF这句代码我们是进行GPIO_Pin_7配置,先将7引脚Io控制位清零其余位保持不变,3------>0011为CNF[1:0] 为00推挽,MODE[1:0]为11输出则将相应的引脚配置成推挽输出,3<<28可以看出1111 1111 1111 1111 1111 1111 1111 0011 左移28位后变成了0011 1111 1111 1111 1111 1111 1111 1111,正好是将GPIO_Pin_7设置成了推挽输出模式 p) ?( U, }" }/ M1 F ————————————————8 z/ d% I7 @' o& ] ~( m. I4 x 版权声明:@slow-walker- J1 j9 e$ x( ^6 v, M3 L& L- a" v' S |
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
Keil下的STM32N6之RAM运行工程配置说明
实战经验 | Keil工程使用NEAI库的异常问题
【STM32MP257-DK】01开发板开箱、ST MPU 生态资源使用、环境搭建以及镜像更新
兔哥的初代M33【002】-H503Nucleo 内部flash操作
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
兔哥的杂谈【002】——如何性价比更高地去编译STM32