286|2

194

帖子

0

TA的资源

一粒金砂(高级)

关于串口接收中断函数有一个bug是什么原因导致? [复制链接]

本帖最后由 xbxdbd 于 2024-10-22 17:03 编辑
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	uint8_t ucTemp;

	if(huart ->Instance == USART1)
    {
				ucTemp = aRxBuffer;
				Uart1_RxBuff[Uart1_Rx_Cnt++] = ucTemp;
				if(Uart1_RxBuff[0]!=0xa3  )
				{
					Uart1_Rx_Cnt=0;
        	memset(Uart1_RxBuff, 0, sizeof(Uart1_RxBuff)); // 清空接收缓冲区
					// 如果数据格式错误或数据测试失败,发送“ERROR”
					char error[] = "ERROR1\r\n";
					HAL_UART_Transmit(&huart1, (uint8_t*)error, strlen(error), 1000);
//					globalError =1;
//					HAL_UART_Receive_IT(&huart1, &aRxBuffer, 1);
//            return;
				}
        
				 // 检查是否是脉冲数指令
			 if (Uart1_Rx_Cnt == 4&& Uart1_RxBuff[0] == 0xA3&&Uart1_RxBuff[1] == 0x5a) 
					{
						   
								if (data_test1(Uart1_RxBuff) ) 
							 {
												targetPulses =
																			((int16_t)Uart1_RxBuff[2] << 8)  |
																			 (int16_t)Uart1_RxBuff[3];
										  
								}      
								else
									{
										      
										      targetPulses=0;
													// 如果数据格式错误或数据测试失败,发送“ERROR”
													char error[] = "ERROR4\r\n";
													HAL_UART_Transmit(&huart1, (uint8_t*)error, strlen(error), 1000);
													memset(Uart1_RxBuff, 0, sizeof(Uart1_RxBuff));
													Uart1_Rx_Cnt = 0;
													// 在发送完ERROR后,检查接收缓冲区是否已清空,如果清空则重新启动接收中断
													HAL_UART_Receive_IT(&huart1, &aRxBuffer, 1);//重新接受

													
									}
									
							Uart1_Rx_Cnt = 0;

					}
															
	     HAL_UART_Receive_IT(&huart1,&aRxBuffer,1);	
					
		}
		
}

串口基本上指令都能完成 假如我发送A3 5A 4C 59 C3,不管我在59后面添加多少个字节,都是收到error1的错误指令,电机还能转动;我看Uart1_RxBuff【0】是C3;targetPulses是4c59;所以这种BUG我应该怎么避免,软件上逻辑哪里还需要添加或者修改的呢

最新回复

确定是串口接收中断函数有一个bug么     详情 回复 发表于 2024-10-23 07:27

回复
举报

6507

帖子

0

TA的资源

五彩晶圆(高级)

确定是串口接收中断函数有一个bug么

 

点评

?我的串口中断函数写的有问题?因为我测试基本的这个3个功能都能实现,就是会出现如果末尾添加多个字节,会被执行,并且会收到error1  详情 回复 发表于 2024-10-23 12:51

回复

194

帖子

0

TA的资源

一粒金砂(高级)

Jacktang 发表于 2024-10-23 07:27 确定是串口接收中断函数有一个bug么  

?我的串口中断函数写的有问题?因为我测试基本的这个3个功能都能实现,就是会出现如果末尾添加多个字节,会被执行,并且会收到error1


回复
您需要登录后才可以回帖 登录 | 注册

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
调查一下,大家都用什么编译器?

我用的是ADS1.2 你们呢? 其他编译器有好用的么?

射频识别技术原理分析

射频识别(RFID)技术相对于传统的磁卡及IC卡技术具有非接触、阅读速度快、无磨损等特点,在最近几年里得到快速发展。为加强中国工 ...

电子大赛历届题目方案分析及讲解

本帖最后由 paulhyde 于 2014-9-15 09:20 编辑 电子大赛历届题目方案分析及讲解,分析的很具体!

NXP ARM Cortex M0/M3 IAP应用

最近的项目都差不多要使用IAP功能,在使用中遇到了不少问题。本人也把遇到的问题分别发了不同的帖子: 1.LPC1100处理器通过SD ...

【众筹】大家愿意帮我完成一个430实验板吗?

本帖最后由 calom1992 于 2014-5-13 22:11 编辑 一、自我介绍论坛里的各位前辈、同学,你们好。我是西安理工大学的一名大二学 ...

【NUCLEO-WL55JC2测评5】移植RT-Thread到NUCLEO-WL55JC2

本帖最后由 nich20xx 于 2020-7-9 09:10 编辑 1 前言 RT-Thread是一款功能强大、组件丰富的开源操作系统,结合STM32 ...

无线通信技术NFC是什么,它对我们的生活有什么影响?

近年来,NFC在智能移动设备的应用越来越广,不仅可配备在智能手机、智能手表上,还能放在小小的智能手环中,而我们对它的使用也 ...

一文看懂巴伦(功能原理、性能参数、基本类型)

巴伦(英语为balun)为一种三端口器件,或者说是一种通过将匹配输入转换为差分输出而实现平衡传输线电路与不平衡传输线电路之间 ...

信号、系统和变换 原书第5版

本书清晰而全面地叙述了关于信号、系统和变换的理论与应用,介绍了信号与系统的数学背景,主要包括:傅里叶变换、傅里叶级数、拉 ...

【DigiKey创意大赛】基于STM32H747I-DISCO设计的电阻抗(EIT)成像实验系统

本帖最后由 dql2016 于 2024-1-19 22:04 编辑 一、作品简介(100-200字) 设计名称:基于STM32H747I-DISCO设计的电阻抗(EIT ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表