引言
STM32的I/O口由软件配置,有八种模式:输入悬浮、输入上拉、输入下拉、模拟输入、开漏输出、推挽输出、推挽式复用功能及开漏复用功能。
每个I/O口由7个寄存器控制,分别是:
模式配置的端口寄存器 32位 CRL、CRH
数据寄存器 32位 IDR、ODR
置位/复位寄存器 32位 BSRR
复位寄存器 16位 BRR
锁存寄存器 32位 LCKR
主要介绍一下CRL、CRH、IDR、ODR
一 CRL、CRH
CRL控制低8位I/O口,CRH控制高8位I/O口,下图是《STM32参考手册》和《原子教你玩STM32》中关于CRL的介绍。CRL共32位,每四位控制一个I/O口,所以控制8个I/O口。CRH与CRL类似,就不做介绍了。
GPIOx->CRL&=0xfffffff0;//x:A~E;用哪一位I/O口先置零
GPIOx->CRL|=0x00000003;//设置I/O口的功能
二 IDR、ODR
IDR为端口输入寄存器,只用了低16位,且为只读寄存器。ODR为端口输出寄存器,也只用了低16位,可读可写,该寄存器读出的数据可以判断I/O口的输出状态,向该寄存器写数据可以控制I/O口的输出电平。下图为《STM32参考手册》中关于IDR和ODR的介绍。
GPIOx->ORD|=1<<5;//第五位输出高电平
更多精彩内容,欢迎关注【跟单片机谈恋爱】