打印
[STM32]

请教一个单片机串口接收数据的问题

[复制链接]
2698|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pywmiss|  楼主 | 2024-4-4 23:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pywmiss 于 2024-4-4 23:23 编辑

最近用一个产品,控制器和接收端都是同一个单片机(PY32F002A),无外置晶振。单片机控制器上用串口定时100ms发送一串数据9字节,1,使用电脑的串口助手接收,控制器发的数据是正常的。用轮询等待的方式接收的话,也能看到正确的数据
2,在接收端如果使用UART中断接收的方式,第一次数据都能正常接收完整的9个字节,之后就很难接收到完整的数据
这是什么呢???


使用特权

评论回复

相关帖子

沙发
pywmiss|  楼主 | 2024-4-5 09:18 | 只看该作者
本帖最后由 pywmiss 于 2024-4-5 09:29 编辑

这个是用HAL库的程序 HAL_UART_Receive_IT(UartHandle, (uint8_t *)aRxBuffer, 9);
我原来以为只要中断生效,接收到9个字节直接在回调函数处理void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)数据使用就好了
现在的情况是不行,已经改成在中断一个字节一个字节接收然后处理了。但也很奇怪,现在一般第一条指令都能正常接收。后面的就接收不正常了
这里是需要做延时吗??我现在是使用STLINK连接实物板仿真进行确认参数的,在运行后停止来看数据。数据都不对。

使用特权

评论回复
板凳
pywmiss|  楼主 | 2024-4-5 10:30 | 只看该作者
因为使用中断的一直不能正常,所以我改成了下面轮询的方式接收20字节的数据 然后把数据取出来使用
     /*通过POLLING方式接收数据*/
  HAL_UART_Receive(&UartHandle, (uint8_t *)aRxBuffer, 20, 500);
目前接收功能是正常的。。
但是就是不明白为什么中断的方法不行

使用特权

评论回复
地板
pywmiss|  楼主 | 2024-4-5 11:58 | 只看该作者
这个串口问题卡了好几天,哎,,,终于搞定了,看到了一个帖子,只要把标志位清除就可防 了
        __HAL_UART_CLEAR_OREFLAG(&UartHandle);
        __HAL_UART_CLEAR_FLAG(&UartHandle, UART_FLAG_RXNE);       

使用特权

评论回复
5
ayb_ice| | 2024-4-7 08:37 | 只看该作者
中断接收完成后,需要再次调用那个函数

使用特权

评论回复
6
WoodData| | 2024-4-7 15:43 | 只看该作者
中断接收完了,要再次调用这个继续接收 HAL_UART_Receive_IT(UartHandle, (uint8_t *)aRxBuffer, 9);

使用特权

评论回复
7
pywmiss|  楼主 | 2024-4-11 20:29 | 只看该作者
WoodData 发表于 2024-4-7 15:43
中断接收完了,要再次调用这个继续接收 HAL_UART_Receive_IT(UartHandle, (uint8_t *)aRxBuffer, 9); ...

谢谢回复,现在用单字节接收先处理了

使用特权

评论回复
8
pywmiss|  楼主 | 2024-4-11 20:29 | 只看该作者
ayb_ice 发表于 2024-4-7 08:37
中断接收完成后,需要再次调用那个函数

感谢回复
32的单片机用起来很不习惯,之前都是用51的

使用特权

评论回复
9
ayb_ice| | 2024-4-12 09:58 | 只看该作者
pywmiss 发表于 2024-4-11 20:29
感谢回复
32的单片机用起来很不习惯,之前都是用51的

用惯了,还不想回到51了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

793

帖子

6

粉丝