OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5580|回复: 9

FreeRTOS + HAL库 串口能发不能收

[复制链接]

1

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-9-28
在线时间
4 小时
发表于 2019-9-28 17:10:50 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 jinggege0224 于 2019-9-28 18:01 编辑

1.FreeRTOS +HAL库 STM32F103C8T6
2.功能:收LORO数据,通过CAN发送出去;接收CAN 数据,通过LORO发送出去;
3.错误描述:LORO可以发送,不可以接受(LORO通过串口收发UART3),有时可以接收一段时间的数据,随后又不能接收;获取状态HAL_OK,且获取错误没有错误(均调用函数)
4.串口接收的组优先级为3;系统默认5
请各位高手赐教

最佳答案

查看完整内容[请看2#楼]

不要在void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 中调用 HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer3, 1);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-9-28
在线时间
4 小时
 楼主| 发表于 2019-9-28 17:10:51 | 显示全部楼层
不要在void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  中调用 HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer3, 1);  
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165225
金钱
165225
注册时间
2010-12-1
在线时间
2107 小时
发表于 2019-9-29 02:27:01 | 显示全部楼层
帮顶
回复

使用道具 举报

70

主题

6684

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12613
金钱
12613
注册时间
2012-11-26
在线时间
3701 小时
发表于 2019-9-29 08:18:43 | 显示全部楼层
是不是用hal的回调函数了,最好不要用hal的回调,自己写中断
回复

使用道具 举报

7

主题

105

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1026
金钱
1026
注册时间
2016-1-28
在线时间
134 小时
发表于 2019-9-29 21:40:10 | 显示全部楼层
用的HAL版本是多少?用最新的看看呢。我之前用过旧版HAL库,串口也只发不收
。后来用新的好了。
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-9-28
在线时间
4 小时
 楼主| 发表于 2019-9-30 10:14:14 | 显示全部楼层
qjp1988113 发表于 2019-9-29 21:40
用的HAL版本是多少?用最新的看看呢。我之前用过旧版HAL库,串口也只发不收
。后来用新的好了。

1.6.1,我用最新的板本的CAN有问题,所以采用旧的版本
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-9-28
在线时间
4 小时
 楼主| 发表于 2019-9-30 10:17:28 | 显示全部楼层

1.上述单片机是不是资源不够,毕竟不太信任STCube使用的HAL库,还有就是内嵌的FreeRTOS;
2.一般又收又发,双工时接收出错,我把发送的代码注释掉,就不会出错
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-9-28
在线时间
4 小时
 楼主| 发表于 2019-9-30 11:16:18 | 显示全部楼层
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) 返回值为HAL_ERROR
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-9-28
在线时间
4 小时
 楼主| 发表于 2019-9-30 13:23:54 | 显示全部楼层

HAL_UART_Receive_IT(&huart3, (uint8_t *)Rx_buf_uart3, 9)返回值为2
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-9-28
在线时间
4 小时
 楼主| 发表于 2019-9-30 14:56:47 | 显示全部楼层
系统创建3个线程,大大增高了HAL_UART_Receive_IT出错的概率,所以造成有时候中断不响应,HAL_UART_Receive_IT放到HAL_UART_RxCpltCallback外,一次读取一个包的数据,依然无极于事;尝试轮询,也会有数据丢失;尝试添加信号,收到一个数据,发出一个信号,一个进程等待信号,随后开启中断,直至收到一个包的数据,但是系统处理速度冥想减慢。最终抛弃系统,将HAL_UART_Receive_IT放到HAL_UART_RxCpltCallback外,一次读取一个包的数据,数据可接收成功,但是依然会有短时间停滞,(发送端1S发送一个数据包),平均1S种接收1个数据包,HAL_UART_Receive_IT失败两次,用DO...while表面上解决了问题
但是本质生问题依然存在,而且几率很高
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-1 11:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表