糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > STM32CubeMX实现串口中断通信

STM32CubeMX实现串口中断通信

时间:2021-09-30 02:21:08

相关推荐

STM32CubeMX实现串口中断通信

文章目录

一. 环境二. 使用STM32CubeMX三. USART中断通信1. UART函数库介绍2. 编写代码3. 最终效果四. 软件调试五. 总结

一. 环境

硬件:stm32f103c8t6 核心板软件:STM32CubeMX 6.3.0软件:keil5 mdk

二. 使用STM32CubeMX

这里与前一篇文章只在于多了个开启串口中断使能。STM32CubeMX实现串口通信_diyu-CSDN博客

三. USART中断通信

1. UART函数库介绍

结构体以及函数定义均在头文件:stm32f1xx_hal_uart.h

UART结构体定义

UART_HandleTypeDef huart1;

串口发送/接收函数

HAL_UART_Transmit():串口发送数据,使用超时管理机制

HAL_UART_Receive():串口接收数据,使用超时管理机制

HAL_UART_Transmit_IT():串口中断模式发送

HAL_UART_Receive_IT():串口中断模式接收

HAL_UART_Transmit_DMA():串口DMA模式发送

HAL_UART_Transmit_DMA():串口DMA模式接收

串口中断函数

HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数

HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //串口发送中断回调函数

HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); //串口发送一半中断回调函数(用的较少)

HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //串口接收中断回调函数

HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);//串口接收一半回调函数(用的较少)

HAL_UART_ErrorCallback();串口接收错误函数

2. 编写代码

在文件main.cmain函数外部添加以下代码

#define LENGTH 4//接受缓冲区大小uint8_tRxBuffer[LENGTH]; //接受缓冲区 uint8_t RxFlag = 0; //接收完成标志;0表示接受未完成,1表示接收完成

图中 #define LENGTH 4 这个没有显示出来,但是必须要添加

main函数内部,while循环外部添加以下代码

//发送提示信息HAL_UART_Transmit(&huart1,(uint8_t *)"****UART commucition using IT****\n",34,HAL_MAX_DELAY); HAL_UART_Transmit(&huart1,(uint8_t *)"Please enter 4 characters: \n",30,HAL_MAX_DELAY);//使能接收中断HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuffer,LENGTH);

while循环内部添加一下代码

while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///添加下面代码HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16 , HAL_MAX_DELAY);HAL_Delay(1000); //延时1sif(RxFlag == 1) //如果接受完成,不在发送数据{HAL_UART_Transmit(&huart1,(uint8_t *)"Recevie Success!\n",17,HAL_MAX_DELAY); //提示接受成功break; //退出循环,不在发送数据}}

main函数后面,添加中断回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) //串口接收中断回调函数{if(huart->Instance == USART1) //判断发生接收中断的串口{RxFlag=1; //置为接收完成标志}}

3. 最终效果

编译,将程序烧录或下载进核心板,打开串口助手查看接收到的数据。

波特率、停止位、数据位、校验位要与配置的一致

当串口没有接受4个字节内容时,每隔一秒串口发送 “hello windows”

当发送4个字节内容时,比如发送“stop”,串口接受完毕后,发送“Recevie Success!”表示接收成功后,不再发送数据

四. 软件调试

如果要进行软件调试,与前一篇文章相同。STM32CubeMX实现串口通信_diyu-CSDN博客

五. 总结

总体而言还是很简单的,只要了解HAL库中的串口发送接收函数以及中断函数,然后调用即可。

这种方式只能固定长度收发,想实现任意长数据收发,可以采用IDLE中断以及DMA接收。

如果觉得《STM32CubeMX实现串口中断通信》对你有帮助,请点赞、收藏,并留下你的观点哦!

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