失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > STM32 HAL库开发学习笔记: USART1串口通讯(中断方式) IDE-STM32CubeIDE

STM32 HAL库开发学习笔记: USART1串口通讯(中断方式) IDE-STM32CubeIDE

时间:2021-03-18 06:47:26

相关推荐

STM32 HAL库开发学习笔记: USART1串口通讯(中断方式) IDE-STM32CubeIDE

STM32串口通讯有三种方式,分别为阻塞(轮询)、中断、DMA。这里将用中断的方式开发。

笔者也是刚入门STM32 HAL库开发,该笔记致希望于能帮到初学者,文中配置步骤、代码、实验现象均是笔者实践可行后所得,绝对真实有效。同时也希望大神前辈指出文中不足或者告之更好的开发方式,让初学者少走弯路!

目录

一、串口模式和配置

1、配置USART1为异步中断工作模式

2、串口参数设置并生成配置代码

二、代码编写

1、在main.c中定义缓存数组;

2、在main函数中打开接收中断;

3、在main.c中定义接收完成的回调函数;

4、在中断文件stm32f1xx_it.c中引用main.c中的接收缓冲数组(extern)和重新使能USART1接收中断。

三、实验现象

四、过程填坑

一、串口模式和配置

1、配置USART1为异步中断工作模式

2、串口参数设置并生成配置代码

二、代码编写

1、在main.c中定义缓存数组;

/* USER CODE BEGIN PV */uint8_t OT_RxBuffer[20];/* USER CODE END PV */

2、在main函数中打开接收中断;

/* USER CODE BEGIN 2 */HAL_UART_Receive_IT(&huart1,OT_RxBuffer,10);/* USER CODE END 2 */

3、在main.c中定义接收完成的回调函数;

/* USER CODE BEGIN 4 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//定义 USART1 接收完成回调函数功能{/* Prevent unused argument(s) compilation warning */// UNUSED(huart);/* NOTE: This function should not be modified, when the callback is needed,the HAL_UART_RxCpltCallback could be implemented in the user file*/HAL_UART_Transmit(&huart1, OT_UartBuffer, 10, 1000);//将usart1接收到的数据通过usart1发�?�出�?//HAL_UART_Transmit_IT(&huart1, OT_UartBuffer, 10);//用此种发送方式在回调函数中,当发送的数据没有10位时,会让返回的数据不正常}/* USER CODE END 4 */

4、在中断文件stm32f1xx_it.c中引用main.c中的接收缓冲数组(extern)和重新使能USART1接收中断。

/* USER CODE BEGIN PV */extern uint8_t OT_RxBuffer[20];/* USER CODE END PV */

void USART1_IRQHandler(void){/* USER CODE BEGIN USART1_IRQn 0 *//* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 */HAL_UART_Receive_IT(&huart1,OT_RxBuffer,10);/* USER CODE END USART1_IRQn 1 */}

三、实验现象

将程序保存、编译后下载到STM32中,在调试助手中输入1234567890点击发送,单片机接收到数据后会把接收的数据通过串口1发送出来(蓝色是发送,绿色是接收)。

如果发送数据一次不足10个,不会触发接收中断,将会把后面接收到的数据补足10个后触发接收中断,再将这10个数据(多余的舍弃)发送回来。现象如下图所示。

四、过程填坑

学习的过程中,开始将使能接收中断的代码写在main.c中的循环体内,也可以实现上诉场景,但是当串口调试助手在快速发送数据的时候,单片机就会死机,程序跑飞。

所以建议在USART1全局中断处理函数中使能串口接收中断。

如果觉得《STM32 HAL库开发学习笔记: USART1串口通讯(中断方式) IDE-STM32CubeIDE》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。