stm32L4 寄存器控制gpio
时间: 2023-09-20 20:07:26 浏览: 49
在STM32L4系列中,每个GPIO都有一个控制寄存器(GPIOx_CR),用于配置GPIO的工作模式、输出类型、输出速度、上拉/下拉等。以下是一些常用的GPIO控制寄存器的设置方法:
1. 配置GPIO为输入模式:
```c
GPIOx->MODER &= ~(GPIO_MODER_MODEy_Msk); //清除对应pin位的MODE[1:0]位
GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDy_Msk); //清除对应pin位的PUPD[1:0]位
```
2. 配置GPIO为输出模式:
```c
GPIOx->MODER &= ~(GPIO_MODER_MODEy_Msk); //清除对应pin位的MODE[1:0]位
GPIOx->MODER |= (GPIO_MODER_MODEy_0); //设置对应pin位的MODE[1:0]位为01(output mode)
GPIOx->OTYPER &= ~(GPIO_OTYPER_OTy_Msk); //清除对应pin位的OT位
GPIOx->OSPEEDR &= ~(GPIO_OSPEEDR_OSPEEDRy_Msk); //清除对应pin位的OSPEEDR[1:0]位
GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDy_Msk); //清除对应pin位的PUPD[1:0]位
```
3. 配置GPIO的输出类型:
```c
GPIOx->OTYPER &= ~(GPIO_OTYPER_OTy_Msk); //清除对应pin位的OT位
GPIOx->OTYPER |= (GPIO_OTYPER_OTy); //设置对应pin位的OT位为1(推挽输出)
```
4. 配置GPIO的输出速度:
```c
GPIOx->OSPEEDR &= ~(GPIO_OSPEEDR_OSPEEDRy_Msk); //清除对应pin位的OSPEEDR[1:0]位
GPIOx->OSPEEDR |= (GPIO_OSPEEDR_OSPEEDRy_1); //设置对应pin位的OSPEEDR[1:0]位为10(高速模式)
```
5. 配置GPIO的上拉/下拉:
```c
GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDy_Msk); //清除对应pin位的PUPD[1:0]位
GPIOx->PUPDR |= (GPIO_PUPDR_PUPDy_0); //设置对应pin位的PUPD[1:0]位为01(上拉)
GPIOx->PUPDR |= (GPIO_PUPDR_PUPDy_1); //设置对应pin位的PUPD[1:0]位为10(下拉)
```