新闻详情

新闻详情

首页 / 资讯中心 / 详情

STM32F103串口接收数据,多字节触发中断接收数据,DMA空闲中断接受,空闲中断触发中断。

发布时间:2026/9/2 23:30:37来源:尧图网络
STM32F103串口接收数据,多字节触发中断接收数据,DMA空闲中断接受,空闲中断触发中断。
2.知识点2.1多字节中断接收指定字节数据在STM32cubemx中开启串口全局中断。在程序初始化编写接收中断函数。启用接收中断回调函数。并要开启下一次中断接受函数否则将不接收数据。在串口全局中断服务函数调用接收中断函数。HAL_UART_Receive_IT(huart1,g_Comm1RxBuffer,8); void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart-Instance USART1) { //g_Comm1RxBuffe数据缓存区串口接收到8字节触发中断这儿将对接收到的数据进行处理 USART1DataRecv(); } }2.2 DMA加空闲中断回调函数接收不定量数据在STM32cubamx中配置DMA通道。在程序初始化编写使能空闲中断和串口DMA接收中断函数。在串口全局中断服务函数调用自定义中断服务函数。编写中断服务函数和空闲中断服务函数。2.3串口空闲中断接受不定量数据程序初始化编写空闲中断接收函数。调用空闲中断回调函数。__HAL_UART_ENABLE_IT(huart3, UART_IT_IDLE); //使能IDLE中断 //DMA接收函数此句一定要加不加接收不到第一次传进来的实数据是空的且此时接收到的数据长度为缓存器的数据长度 HAL_UART_Receive_DMA(huart3, g_Comm3RxBuffer, BUFFER_SIZE);//重新打开DMA接收不然只能接收一次数据 ​ ​ void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart) { //注意大量数据时temp、g_Comm3RxBuffer_lenth为uint32_t ,不能写uint8_t否则会超过254就出现问题了。 //在数据量明确并且少量的情况下可以用uint8_t。 uint32_t temp0; HAL_UART_DMAStop(huart3); //停止DMA temp __HAL_DMA_GET_COUNTER(hdma_usart3_rx);// 获取DMA中未传输的数据个数 g_Comm3RxBuffer_lenth BUFFER_SIZE - temp; //总计数减去未传输的数据个数得到已经接收的数据个数 //控制逻辑。。。。。。 //HAL_UART_Transmit(huart3, g_Comm3RxBuffer,g_Comm3RxBuffer_lenth,1000); // memset(g_Comm3RxBuffer,0,g_Comm3RxBuffer_lenth); HAL_UART_Receive_DMA(huart3, g_Comm3RxBuffer,BUFFER_SIZE); } void USER_UART_IRQHandler(UART_HandleTypeDef *huart) { //DMA的通道每个芯片会有差异有些串口没有DMA,所以在这儿不写其他的接口需要时添加即可。 if(huart-InstanceUSART3) { // 判断是否是空闲中断 if(RESET ! __HAL_UART_GET_FLAG(huart3, UART_FLAG_IDLE)) { // 清除空闲中断标志否则会一直不断进入中断 __HAL_UART_CLEAR_IDLEFLAG(huart3); // 调用空闲中断处理函数 HAL_UART_IdleCpltCallback(huart); } } }HAL_UARTEx_ReceiveToIdle_IT(huart5,Rxbuffer,1024); ​ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { if(huart-InstanceUART5) { //数据存到了Rxbuffer,长度为函数参数Size。 //HAL_UART_Transmit(huart1,Rxbuffer,Size,100); memset(Rxbuffer,0,sizeof(Rxbuffer)); HAL_UARTEx_ReceiveToIdle_IT(huart5,Rxbuffer,1024); } }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

自动驾驶地面障碍物检测:数据集解析与模型训练实战 2026/9/3 2:01:20

自动驾驶地面障碍物检测:数据集解析与模型训练实战

简介:本资源是面向计算机视觉开发者与AI学习者的地面障碍物检测专用数据集,聚焦自动驾驶、机器人导航及智能安防等场景中的多类别障碍识别问题,支持目标检测、实例分割与关键点检测等任务研究。数据集共626张JPEG实景图像,涵盖栅栏…

阅读更多 →
基于OpenCV与YOLO的台球击球路线规划系统:从视觉感知到几何决策 2026/9/3 2:01:20

基于OpenCV与YOLO的台球击球路线规划系统:从视觉感知到几何决策

简介:本资源是一个面向高校计算机及相关专业(如人工智能、自动化、电子信息等)学生的课程实训项目,聚焦台球击球路线智能规划问题,融合OpenCV图像处理与YOLO目标检测技术,实现从台球桌图像采集、球体识别定…

阅读更多 →
怎么降低AI查重率又不改空论文?降AIGC、AI降重前为何先补证据? 2026/9/3 2:01:20

怎么降低AI查重率又不改空论文?降AIGC、AI降重前为何先补证据?

怎么降低AI查重率又不改空论文?降AIGC、AI降重前为何先补证据? 改稿时只盯着AI率和重复率,删掉了一些过程说明,又让工具把段落压得更短。导师退回后指出论据不清、结论跳跃,你才发现正文还在,论证却被改空…

阅读更多 →
论文引用被AIGC检测判高疑似怎么办?降AI率、AI降重会改坏引文吗? 2026/9/3 2:01:20

论文引用被AIGC检测判高疑似怎么办?降AI率、AI降重会改坏引文吗?

论文引用被AIGC检测判高疑似怎么办?降AI率、AI降重会改坏引文吗? AIGC论文检测报告里,一段明明注明出处的原话也显示高疑似,你开始犹豫:是不是把引文删掉,分数就好看了?先别删。检测标记、引用…

阅读更多 →
Android智慧医疗预约挂号App毕业设计:全栈开发实战指南 2026/9/3 2:01:20

Android智慧医疗预约挂号App毕业设计:全栈开发实战指南

简介:本资源是一套面向计算机专业本科生的毕业设计级智慧医疗应用实战案例,聚焦医院预约挂号核心业务,适用于Android移动开发课程设计、毕设选题与健康医疗类App开发能力提升。项目采用Android Studio原生开发,包含完整客户端与轻…

阅读更多 →
C# WinForms集成YOLOv8实现工业电池缺陷实时检测 2026/9/3 1:58:19

C# WinForms集成YOLOv8实现工业电池缺陷实时检测

简介:本资源是一套面向工业视觉检测初学者与自动化工程师的C# WinForms实战源码,聚焦电池缺陷识别这一典型工业AI应用场景,整合工业相机采集与YOLOv8深度学习推理全流程。资源共144个文件,含15个核心C#源码文件、48个运行依赖DLL、…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞