宏开启GPIO口时钟
时间: 2023-08-14 10:16:00 浏览: 49
在单片机开发中,有时需要使用GPIO口来控制外设或者与外部设备进行通信。为了让GPIO口正常工作,需要先打开相应的GPIO时钟。在一些开发环境中,可以使用宏来简化这个过程,比如:
```
__HAL_RCC_GPIOA_CLK_ENABLE(); // 开启GPIOA时钟
```
这个宏的作用就是打开GPIOA的时钟,让其能够正常工作。其中,__HAL_RCC_GPIOA_CLK_ENABLE()是一个函数,它会将GPIOA对应的时钟使能位设置为1,从而开启GPIOA的时钟。在使用GPIOA口时,需要先调用这个宏来开启时钟,才能正常读写GPIO寄存器。
相关问题
GPIO_InitTypeDef GPIO_InitStruct = {0};
这段代码是什么意思?
这段代码是使用STM32的HAL库来初始化GPIO口的典型代码。GPIO_InitTypeDef是一个结构体类型,用于配置GPIO口的各种参数,例如口线编号、工作模式、上下拉电阻等。在这个代码中,GPIO_InitStruct被初始化为0,相当于把结构体中的所有成员都清零。这是一个很好的习惯,可以避免使用未初始化的变量带来的问题。
接下来,代码通过函数HAL_GPIO_WritePin()和HAL_GPIO_Init()来配置GPIO口的输出电平和工作模式,具体步骤如下:
1. 使用__HAL_RCC_GPIOx_CLK_ENABLE()宏开启GPIO口时钟
```c
__HAL_RCC_GPIOx_CLK_ENABLE();
```
其中,x代表具体的GPIO口编号,例如PA、PB等。
2. 配置GPIO口的输出电平
```c
HAL_GPIO_WritePin(GPIOx, GPIO_PIN_x, GPIO_PIN_RESET);
```
其中,GPIOx是GPIO口的名称,GPIO_PIN_x是具体的口线编号,GPIO_PIN_RESET表示输出低电平。
3. 配置GPIO口的工作模式
```c
GPIO_InitStruct.Pin = GPIO_PIN_x;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
```
其中,GPIO_InitStruct.Pin是口线编号,GPIO_InitStruct.Mode是工作模式,GPIO_InitStruct.Pull是上下拉电阻模式,GPIO_InitStruct.Speed是IO口速度。在这个代码中,GPIO_MODE_OUTPUT_PP表示输出推挽模式,GPIO_NOPULL表示无上下拉电阻,GPIO_SPEED_FREQ_LOW表示IO口低速。最后,使用HAL_GPIO_Init()函数把GPIO口的配置应用到硬件上。
void PS2_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); /*开启GPIOAB的外设时钟*/ GPIO_InitStructure.GPIO_Pin = PS2_MISO_PIN | PS2_SCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*设置引脚模式为通用推挽输出*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(PS2_SCK_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = PS2_CS_PIN ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*设置引脚模式为通用推挽输出*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(PS2_CS_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = PS2_MOSI_PIN; //DI GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(PS2_MOSI_PORT, &GPIO_InitStructure); DO_H; CLC_H; CS_H; }
这段代码是用来初始化PS2控制器的GPIO引脚。代码中首先开启了GPIOA和GPIOB的外设时钟。然后定义了一个GPIO_InitTypeDef类型的结构体GPIO_InitStructure。
接下来,设置PS2的MISO引脚和SCK引脚为通用推挽输出模式,设置引脚速率为50MHz,最后调用库函数GPIO_Init来初始化这两个引脚。
然后,设置PS2的CS引脚为通用推挽输出模式,设置引脚速率为50MHz,最后调用库函数GPIO_Init来初始化CS引脚。
接着,设置PS2的MOSI引脚为上拉输入模式,设置引脚速率为50MHz,最后调用库函数GPIO_Init来初始化MOSI引脚。
最后,将DO_H、CLC_H、CS_H引脚置高。
需要注意的是,代码中有一些宏定义,如PS2_MISO_PIN、PS2_SCK_PIN、PS2_CS_PIN等,这些宏定义可能是根据具体的硬件连接进行定义的。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)