你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32cubemx 串口如何中断接收发来的不定长数据

[复制链接]
张亚飞 提问时间:2017-6-1 16:39 /
阅读主题, 点击返回1楼
收藏 评论47 发布时间:2017-6-1 16:39
47个回答
张亚飞 回答时间:2017-6-2 10:55:06
zhao.zhao 发表于 2017-6-2 10:10
试过的,数据接收帧长度不同,但是每个数据帧间隔的时间较长,所以这个方法是可行的。
如果发送超过一个字 ...

一语惊醒我了,我按照教程在发送函数后边判断if(HAL_UART_Transmit_IT(&huart2,(uint8_t*) Uart2Data,1) !=halok) 执行了Error_Handler() 函数,并且出现的这个警告没有处理。导致出现上边的问题。感谢提醒!
张亚飞 回答时间:2017-6-2 11:16:58
zhao.zhao 发表于 2017-6-2 10:10
试过的,数据接收帧长度不同,但是每个数据帧间隔的时间较长,所以这个方法是可行的。
如果发送超过一个字 ...

现在问题是HAL_UART_Receive_IT(&huart1,&Rx2Buffer,1); 这个函数当我发送三个字节的时候,这个函数只接受第一个字节,后两个字节丢了。
张亚飞 回答时间:2017-6-2 11:18:15
安 发表于 2017-6-2 10:22
程序应该是没有死掉,估计是溢出导致。楼主是否按照楼上所述加如了回调函数。 ...

回调函数肯定加了。问题是定长接收一个字节, 我发送三个字节,那后两个字节就丢了。
zhao.zhao 回答时间:2017-6-2 11:21:25
你进串口中断后,马上要把 Rx2Buffer 这个数据保存在数组中的,数组最好开大一些,要不数据放不下。
张亚飞 回答时间:2017-6-2 14:08:42
zhao.zhao 发表于 2017-6-2 11:21
你进串口中断后,马上要把 Rx2Buffer 这个数据保存在数组中的,数组最好开大一些,要不数据放不下。 ...

理解不了你的做法。进串口中断后把Rx2Buffer这个数据保存到数组没有问题。 问题是我发送了三个字节,接收函数只接受一个字节。我把这一个字节保存到数组中了,丢了另外两个。 没有意义啊。
回答时间:2017-6-2 15:04:18
楼主看一下,接收完成后是否就关闭了中断。
张亚飞 回答时间:2017-6-2 16:31:04
安 发表于 2017-6-2 15:04
楼主看一下,接收完成后是否就关闭了中断。

肯定是关了中断的,不然也不会每次在回调函数里边/HAL_UART_Receive_IT(&huart2,Uart2Data,1); 开启下一次中断。    不知道您说这个是什么意思。  因为只接受了一个字节的数据就关闭中断了,所以后边的数据就进不来了?
回答时间:2017-6-2 16:46:17
用HAL比较少,我还是用的标准库,我也没有合适的解决方法。修改办法两种,一种该驱动,接收完成也不关闭中断,一种是通过Rx2Buffer定义一个大空间,实时去处理Rx2Buffer中的数据,满足条件以后重新进行接收处理。
HAL_UART_Receive_IT(&huart1,&Rx2Buffer,sizeof(Rx2Buffer))
张亚飞 回答时间:2017-6-2 16:56:58
安 发表于 2017-6-2 16:46
用HAL比较少,我还是用的标准库,我也没有合适的解决方法。修改办法两种,一种该驱动,接收完成也不关闭中 ...

改驱动的方式试过了吗?  我刚才试了下接收完成不关闭中断,好像也没什么区别,不知道哪里的问题。 第二种定义一个大的缓冲区,如果不够接受函数的字节数的话得一直在那等着吧。
回答时间:2017-6-3 09:51:33
我改过是可以的。可以通过判断接收剩余字数,这样来确定当前已经接收到多少。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版