stm32学习
十一.中断
4.使用中断

EXTI的配置步骤:
- 使能GPIO时钟
- 设置GPIO输入模式
- 使能AFIO/SYSCFG时钟
- 设置EXTI和IO对应关系
- 设置EXTI屏蔽,上/下沿
- 设置NVIC
- 设计中断服务函数
HAL库的使用:
- 使能GPIO时钟:__HAL_RCC_GPIOx_CLK_ENABLE
- GPIO/AFIO(SYSCFG)/EXTI:HAL_GPIO_Init()
- 设置中断分组:HAL_NVIC_SetPriorityGrouping,此函数仅需设置一次
- 设置中断优先级:HAL_NVIC_SetPriority
- 使能中断:HAL_NVIC_EnableIRQ
- 设计中断服务函数:EXTIx_IRQHandler,中断服务函数,清中断标志
STM32仅有:EXTI0~4、EXTI9_5、EXTI15_10,7个外部中断服务函数
十二.串口
1.通信基础
单工/半双工/全双工通信:

波特率:
- 比特率:每秒传送的比特数,单位bit/s
- 波特率:每秒传送的码元数,单位Baud
- 比特率 = 波特率 * log2M,M表示每个码元承载的信息量
- 二进制系统中,波特率数值上等于比特率
常见的串行通信串口

2.串口
串行通信接口:指按位发送和接收的接口。如:RS-232、422、485
RS-232现在逐渐被USB、无线网所取代
RS-232电平不能与COMS/TTL电平直接交换信息
现代设备常通过 USB转RS-232芯片实现兼容

3.UART/USART
一个是通用异步收发器,一个是通用同步异步收发器
常用的也是异步通信
如何区分UART/USART和其它通信:TX和RX交叉相连
USART的框图简化版:

设置UART/USART波特率:
①F1: b a u d = f c k 16 ∗ U S A R T D I V baud = \frac{f_{ck}}{16*USARTDIV} baud=16∗USARTDIVfck
f c k f_{ck} fck是串口的时钟, U S A R T D I V = D I V _ M a n t i s s a + ( D I V _ F r a c t i o n / 16 ) USARTDIV = DIV\_Mantissa + (DIV\_Fraction / 16) USARTDIV=DIV_Mantissa+(DIV_Fraction/16)
②F4: b a u d = f c k 8 ∗ ( 2 − O V E R 8 ) ∗ U S A R T D I V baud = \frac{f_{ck}}{8 * (2 - OVER8) * USARTDIV} baud=8∗(2−OVER8)∗USARTDIVfck
③F7:16倍过采样波特率计算公式: b a u d = f c k U S A R T D I V baud = \frac{f_{ck}}{USARTDIV} baud=USARTDIVfck
8倍过采样波特率计算公式: b a u d = 2 ∗ f c k U S A R T D I V baud = \frac{2 * f_{ck}}{USARTDIV} baud=USARTDIV2∗fck
④H7:16倍过采样波特率计算公式: b a u d = u s a r t k e r c k p r e s U S A R T D I V baud = \frac{usart_ker_ckpres}{USARTDIV} baud=USARTDIVusartkerckpres
8倍过采样波特率计算公式: b a u d = 2 ∗ u s a r t k e r c k p r e s U S A R T D I V baud = \frac{2 * usart_ker_ckpres}{USARTDIV} baud=USARTDIV2∗usartkerckpres
usart_ker_ckpres是供串口使用的时钟
在Cube生成的代码中,我们实现业务逻辑的代码是写在回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {// 1. 判断是否为USART1触发的回调(支持多UART实例)if (huart->Instance == USART1) {// 2. 接收完成后,设置标志位(轻量级操作,避免中断内耗时)rx_complete_flag = 1;// 3. 重新启动UART接收(否则只能接收一次数据)HAL_UART_Receive_IT(&huart1, rx_buffer, RX_BUFFER_SIZE);}
}
4.寄存器介绍
控制寄存器1(CR1):

控制寄存器2(CR2):

控制寄存器3(CR3):

数据寄存器(DR):

状态寄存器(SR):
