当前位置:   article > 正文

【STM32+HAL+Proteus】系列学习教程---串口USART(中断方式)_uart接收中断

uart接收中断

实现目标

1、利用UART实现上位机PC与下位机开发板之间的数据通信

2、学会STM32CubeMX软件关于UART 中断方式的配置

3、具体目标:1、开发板将接收到的上位机数据反发送回上位机串口调试助手。


一、中断方式简介

1、中断方式

          中断就是在寄存器有一个字节数据的时候触发一次中断,而不用一直扫描寄存器状态,节约了系统资源。例如串口接收24字节数据,HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx, 1) 意思就是每来一个字节数据中断一次,中断之后就进入回调函数进行处理,此时Rx是一个uint8_t的字节数据。HAL_UART_Receive(&huart1, (uint8_t *)Rx, 24)意思是没来一个字节数据中断一次,等接收到24个字节数据之后再统一进入回调函数之后进行处理,此时Rx是一个uint8_t的数组字节数据。

        缺点:虽然解决了轮询不断扫描寄存器状态的缺点,但CPU接收数据会触发中断,对于实时要求高的场所,不适用。

二、原理图设计

三、STM32CubeMX 配置

1.USART1  中断方式配置

四、程序设计

1、定义接收数组和一个接收标志位

  1. /* USER CODE BEGIN PV */
  2. uint8_t Rxbuf[2];
  3. uint8_t RxFlag = 0;
  4. /* USER CODE END PV */

2、开启接收中断

  1. /* USER CODE BEGIN 2 */
  2. HAL_UART_Receive_IT(&huart1, (uint8_t *)Rxbuf, 2); // 使能串口接收中断
  3. /* USER CODE END 2 */

3、功能程序设计

  1. while(1)
  2. {
  3. if (RxFlag)
  4. {
  5. RxFlag = 0;
  6. //发送
  7. HAL_UART_Transmit(&huart1,Rxbuf,2,100);
  8. }
  9. }

4、回调函数

  1. /* USER CODE BEGIN 4 */
  2. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  3. {
  4. if (huart->Instance == USART1)
  5. {
  6. RxFlag = 1;
  7. HAL_UART_Receive_IT(&huart1, (uint8_t *)Rxbuf, 2); // 使能串口接收中断
  8. }
  9. }
  10. /* USER CODE END 4 */

五、实验现象

六、仿真实现


总结

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/473728
推荐阅读
相关标签
  

闽ICP备14008679号