第一阶段总结笔记,主要对GPIO,串口,时钟,中断,定时器进行总结,方便后续写程序快速查阅,寄存器用来了解库函数具体怎么配置的
一.GPIO
芯片手册
寄存器
寄存器知识快速复习
1.控制GPIO的有7个寄存器
- 端口配置寄存器:GPIOx_CRL,GPIOx_CRH
- 端口输入数据寄存器:GPIOx_IDR
- 端口输出数据寄存器:GPIOx_ODR
- 端口位设置/清除寄存器:GPIOx_BSRR
- 端口位清除寄存器:GPIOx_BRR
- 端口配置锁定寄存器:GPIOx_LCKR
配置寄存器主要是配置端口的工作模式和速度,4个位控制一个IO口,用两个32位寄存器控制一组IO口(16个)
输入数据寄存器主要是存放16个IO口输入的数据,低16位有效
输出数据寄存器主要是存放16个IO口输出的数据,低16位有效
位设置/清除寄存器主要是设置每一IO位的输出,如果寄存器值赋为1,高16位是清除为0,低16位设置为1,对应的如果寄存器为0,则对该位无影响。(可以用&和|理解)
位清除寄存器主要是将BSRR的高16位放到低16位,功能不变
配置锁定寄存器:不常用,暂不了解
(具体可查询《STM32中文参考手册》8.2-P113)
2.AFIO复用寄存器
- 事件控制寄存器:AFIO_EVCR
- 复用重映射和调试I/O寄存器:AFIO_MAPR
- 外部中断配置寄存器:AFIO_EXTICRx (x=1,2,3,4)
库函数操作
1.当使用GPIO之前,必须先打开IO时钟(APB2Clock)(IO挂载在APB2底下)
2.如果使用复用功能,必须打开相应的复用外设的时钟
操作函数:
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
(必记)3.GPIO的八个工作模式:
输入:输入浮空,输入上拉,输入下拉,模拟输入
输出:开漏输出,推挽输出,推挽复用,开漏复用
对应的库函数定义
GPIO_Mode_IN_FLOATING(输入浮空),GPIO_Mode_IPU(输入上拉)
GPIO_Mode_IPD(输入下拉),GPIO_Mode_AIN(模拟输入)
GPIO_Mode_Out_OD(开漏输出),GPIO_Mode_Out_PP(推挽输出)
GPIO_Mode_AF_PP(推挽复用),GPIO_Mode_AF_OD(开漏复用)
操作函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
4.外设工作模式配置
对于STM32的芯片来说典型的三条AHB\APB1\APB2 时钟线,它们每个总线下都挂载了许多外设,这些外设都需要配置时钟,相应的GPIO的外设还需要进行GPIO的Mode配置:不同外设需求的GPIO类型Mode是不一样的,在使用外设之前一定要查询手册中外设的GPIO配置
(《STM32中文参考手册》8.1.11P110):
这里贴出来几个常用的
5.重映射功能,一般来说,引脚的第一功能都是GPIO,但有些引脚的第一功能并不是GPIO,如下图
(表格含义见上)
此时我们就要用到重映射功能,有时重映射不只一个功能,就涉及到了部分重映射&完全重映射
重映射配置步骤
- 使能GPIO时钟(重映射过后的IO)
- 使能功能外设的时钟(例如串口1)
- 使能AFIO时钟,重映射必须使能AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
部分重映射和完全重映射设置
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
靠第一个参数决定
6.需要开启AFIO时钟的几个情况
在对AFIO三个寄存器进行操作时,需要打开AFIO时钟,
分别是
- 配置复用重映射
- 配置外部中断线映射
- 配置EVENTOUT事件输出
GPIO常用操作库函数
二.中断
外部中断
stm32共有20条外部中断线,其与IO口对应关系为
寄存器
1.外部中断相关寄存器
- 中断屏蔽寄存器:EXTI_IMR
- 事件屏蔽寄存器:EXTI_EMR
- 上升沿触发选择寄存器:EXTI_RTSR
- 下降沿触发选择寄存器:EXTI_FTSR
- 软件中断事件寄存器:EXTI_SWIER
- 挂起寄存器:EXTI_PR
中断屏蔽寄存器主要是屏蔽20条线中某条线上的中断请求,低20位控制。
事件屏蔽寄存器主要是屏蔽20条线中某条线上的事件请求,低20位控制
上升沿触发选择寄存器主要是禁止或允许20条线中的上升沿触发(中断和事件),低20位控制。
下降沿触发选择寄存器主要是禁止或允许20条线中的下降沿触发(中断和事件),低20位控制。
软件中断事件寄存器主要是设置软件中断寄存器的请求位
挂起寄存器主要是标志某条线发生触发请求