Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
stm32寄存器操作gpio_stm32单片机软件,希望能够帮助你!!!。
任何一个单片机,最简单的外设莫过于 IO 口的高低电平控制了。所以今天为大家讲解通过寄存器操作控制高低电平,对寄存器操作有一个简单认识。
STM32 的 IO 口可以由软件配置成如下 8 种模式:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏复用功能
每个 IO 口可以自由编程,但 IO 口寄存器必须要按 32 位字被访问。每个 IO 端口都有 7 个寄存器来控制。他们分别是:配置模式的 2 个 32 位的端口配置寄存器 CRL 和 CRH;2 个 32位的数据寄存器 IDR 和 ODR;1 个 32 位的置位/复位寄存器BSRR;一个 16 位的复位寄存器BRR;1 个 32 位的锁存寄存器 LCKR;这里我们仅介绍常用 的几个寄存器,我们常用的 IO端口寄存器只有 4 个:CRL、CRH、IDR、ODR。CRL 和 CRH 控制着每个 IO 口的模式及输出速率。
接下来我们看看端口低配置寄存器 CRL 的描述。
CRH 的作用和 CRL 完全一样,只是 CRL 控制的是低 8 位输出口,而 CRH 控制的是高 8位输出口。
IDR 是一个端口输入数据寄存器,只用了低 16 位。该寄存器为只读寄存器,并且只能以16 位的形式读出。要想知道某个 IO 口的状态,你只要读这个寄存器,再看某个位的状态就可以了。
ODR 是一个端口输出数据寄存器,也只用了低 16 位。该寄存器为可读写,从该寄存器读来的数据可以用于判断当前 IO 口的输出状态。而向该寄存器写数据,则可以控制某个 IO 口的输出电平。
比如我们要设置 PORTB 的PB.5为推挽输出的LED初始化配置。
void LED_Init(void)
{
RCC->APB2ENR|=1<<3; //首先使能 PORTB 时钟
GPIOB->CRL&=0XFF0FFFFF;//清掉PB.5原来的设置,同时也不影响其他位的设置
GPIOB->CRL|=0X00;//PB.5 推挽输出
GPIOB->ODR|=1<<5; //PB.5 输出高
}
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章