STM32CubeMX实现串口中断通信
2021/11/4 23:09:38
本文主要是介绍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.c
里 **main函数外部 **添加以下代码
#define LENGTH 4 //接受缓冲区大小 uint8_t RxBuffer[LENGTH]; //接受缓冲区 uint8_t RxFlag = 0; //接收完成标志;0表示接受未完成,1表示接收完成
图中 #define LENGTH 4 这个没有显示出来,但是必须要添加
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Je0DjDdZ-1636037672760)(C:/Users/LHW/AppData/Roaming/Typora/typora-user-images/image-20211104224056450.png)]
在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); //延时1s if(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库中的串口发送接收函数以及中断函数,然后调用即可。
参考链接:
【STM32】HAL库 STM32CubeMX教程四—UART串口通信详解_Z小旋-CSDN博客_hal_uart_transmit
【STM32】HAL库 STM32CubeMX教程四—UART串口通信详解_Z小旋-CSDN博客_hal_uart_transmit
这篇关于STM32CubeMX实现串口中断通信的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享