HAL库学习——串口中断

一、介绍

         串口的传输方式包括:轮询、中断DMA,在此要介绍的是关于HAL库底层串口接收中断流程的讲解,包括串口错误的处理,中断回调函数以及错误中断回调函数的执行。

 

二、配置流程

         首先使用STM32CubeMX配置串口参数和工作方式。如下图:

       配置好基础参数波特率和数据长度,校验位,停止位后, 选择NVIC Settings点击Enabled使能全局中断。

       这样整个串口配置就完成了。

 

三、开启接收中断

       在代码初始化调用HAL_UART_Receive_IT(&huart2, &gUart2.Temp, RECLEN)函数即可开启接收中断,这边gUart2结构体是自己定义用来存放串口接收的内容,RECLEN则指一次性接收几个字节后触发中断回调函数。这边先介绍一下串口底层数据的存放。串口收到一个字节数据时最先存放到移位寄存器内,然后移到RDR寄存器中。当RDR寄存器有值时则RXNE标志置1(指示接收非空),这时将RXNEIE标志置1则会触发中断。执行HAL_UART_Receive_IT函数的作用就是指定接收数据长度,存放的地址以及开启接收非空中断,还有接收函数的映射

 

四、中断流程

       当接收到一个字节的数据时进入了中断处理函数,由于这边使用的是USART2,所以进入的是USART2_IRQHandler:

void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */

  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */

  /* USER CODE END USART2_IRQn 1 */
}

       紧接着进入HAL_UART_IRQHandler里面执行,点进去可以发现里面在做的是一些状态位读取以及判断,还有中断回调函数接收函数的入口。如下读取ISR状态寄存器以及CR1控制寄存器还有CR3控制寄存器的内容分别存放到isrflags、cr1its、cr3its。然后让状态寄存器去与上以下四种错误PE奇偶校验错误、FE帧错误、ORE溢出错误、NE噪声错误。查看状态位是否有以下四种错误。

  uint32_t isrflags   = READ_REG(huart->Instance->ISR);
  uint32_t cr1its     = READ_REG(huart->Instance->CR1);
  uint32_t cr3its     = READ_REG(huart->Instance->CR3);

  uint32_t errorflags;
  uint32_t errorco
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值