STM32F1的IO口简介
- 2021-6-7
- 嵌入式
基本介绍
STM32的引脚可设置为可设置为:普通IO功能、复用功能、重映射功能。不过普通IO功能、复用功能用得比较多。
- 普通 IO 功能一般需要使能
GPIOA
、GPIOB
和GPIOC
时钟 - 需要使用复用功能,如
STM32F103RCT6
的串口1功能,需要使用PA9
和PA10
两个引脚,此时需要使用串口1时钟USART1
- 需要用到外设的重映射功能时需要使能
AFIO
的时钟。
关于重映射功能举例如下:
1 | 重映射USART2 |
库函数的调用步骤如下:
使能被重新映射到的I/O端口时钟
1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
使能被重新映射的外设时钟
1
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
使能AFIO功能的时钟(勿忘!)
1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
进行重映射
1
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
初始化步骤
- 使用
RCC_APB2PeriphClockCmd
函数使能相关APB2
外设时钟 - 通过
GPIO_Init
函数初始化并配置各IO口 - 使用
GPIO_ReadInputDataBit
读取IO口电平状态,使用GPIO_SetBits
和GPIO_ResetBits
来设置各IO口的值 (实际我们使用PAout(0)=1, PBout(2)=0;
这种写法去设置 IO 口的电平状态)
相关函数定义和说明如下:
1. GPIO_Init 初始化函数: 配置IO口的模式和速度
1 | void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); |
示例:
1 | GPIO_InitTypeDef GPIO_InitStructure; |
2. GIPO_ReadInputDataBit: 读取IO口的电平状态
1 | uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, unit16_t GPIO_Pin); |
示例:
1 | // 返回值是 1(Bit_SET) 或者 0(Bit_RESET) |
3. GPIO_Write: 一次性设置GPIO的多个端口值(通过ODR寄存器实现)
1 | void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); |
4. 通过 GPIO_SetBits 和 GPIO_ResetBits 来操作各IO口的值
1 | void GPIO_SetBits(GPIO_TypeDef* GPIOx, unit16_t GPIO_Pin); |
示例:
1 | GPIO_SetBits(GPIOC, GPIO_Pin_3); // 设置IO口 PC3 输出 1 |
5. 通过 RCC_APB2PeriphClockCmd 使能IO时钟
1 | /** |