硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2860|回复: 5
收起左侧

[技术讨论] HAL库串口通信程序设计

[复制链接]

2

主题

6

回帖

12

积分

新手上路

积分
12
发表于 2019-5-6 15:31:10 | 显示全部楼层 |阅读模式
最近玩F103板子的串口通信,参照网上基于cubeMX的串口设计。
   发现这样的串口程序只能一个字节,一个字节的接收。如果同时发送了多个字节就乱码了。
  难道实际应用就自己规定字节发送了吗,不会出现不定字节情况吗。

本人小白一枚 ,想请教一下这个是什么问题呢,还有怎么调试解决这种错误呢。
   麻烦各路大神了!!

捕获.PNG
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107023
QQ
发表于 2019-5-6 17:47:10 | 显示全部楼层
程序设计不合理,你接收完成回调还在中断里面,不要在中断里面直接再调用其API。
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2019-5-7 14:28:48 | 显示全部楼层
你可以使用串口空闲中断接收一帧数据   不只是接收一个字节  但是如果要是有断帧的需要重新组合
回复

使用道具 举报

2

主题

6

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2019-5-10 14:01:13 | 显示全部楼层
hanzixiangel 发表于 2019-5-7 14:28
你可以使用串口空闲中断接收一帧数据   不只是接收一个字节  但是如果要是有断帧的需要重新组合

我看了下安富莱的源程序没有用空闲中断的,但是网上好多DMa+空闲中断的方式接收不定长数据。
想请问下:空闲中断是接收完一帧数据产生中断吗?为什么安富莱的源码直接就可以实现,这种思路难道有问题,还是我接收的时候处理事情太多?
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2019-5-11 11:01:11 | 显示全部楼层
wx_XJmZt11J 发表于 2019-5-10 14:01
我看了下安富莱的源程序没有用空闲中断的,但是网上好多DMa+空闲中断的方式接收不定长数据。
想请问下: ...

空闲中断就是接收一帧数据完成当总线空闲的时候产生的中断   一帧数据的长度不定  小于等于你设置的接收缓存长度    网上有很多这样的例程  DMA+空闲中断   可以大大减轻cpu负担   不用一个字节一个字节的接收   但是接收的数据如果存在断帧就需要组合起来  我现在用的都是这种方式  没啥问题   移植性特别好   只需要在回调中处理即可  我一般实在回调接收完成之后用队列发给任务处理   不影响下次数据的接收  测试每次接收个1-2K数据完全没有问题
回复

使用道具 举报

2

主题

6

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2019-5-13 16:31:27 | 显示全部楼层
hanzixiangel 发表于 2019-5-11 11:01
空闲中断就是接收一帧数据完成当总线空闲的时候产生的中断   一帧数据的长度不定  小于等于你设置的接收 ...

感谢大神了(ps:手动点赞)
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 10:49 , Processed in 0.268757 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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