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

串口发送一次后就不再发送数据

[复制链接]
D-BOY 提问时间:2018-5-7 11:47 /
本帖最后由 Inc_brza 于 2018-5-10 12:00 编辑

        HAL_UART_Transmit_DMA发送一次数据后,huart->gState始终等于HAL_UART_STATE_BUSY_TX,经调试发现串口数据发送完毕后并没有进入UART_EndTransmit_IT函数将huart->gState重置为HAL_UART_STATE_READY,请教下这个问题怎么解决?
收藏 评论12 发布时间:2018-5-7 11:47

举报

12个回答
wolfgang 回答时间:2018-5-7 14:28:28
在DMA传输的回调函数中,增加UART_EndTransmit_IT 操作。
选择DMA进行原子操作,要完整性封装。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

电子发烧友_3012981 回答时间:2018-5-7 15:01:48
重新开启中断

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

butterflyspring 回答时间:2018-5-7 15:26:25
你在error那一段放个断点,看看?就算没有callback,都会复位的.还是其他  改了这个标识位?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

springvirus 回答时间:2018-5-7 15:30:15
一看就是80后,宇宙骑士的粉?
Cortexxx 回答时间:2018-5-7 18:33:59
应该是设置了DMA的TC(传输完成)中断,然后没有清除中断标志或者 Flag。所以当第一次发送完毕之后,标志位没有清零导致不能开始第二次传输。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

feixiang20 回答时间:2018-5-7 21:41:23
你设置个中断,看看导致第2次传递的错误是不是标志不对

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

mmuuss586 回答时间:2018-5-7 21:45:02
看下串口,DMA相关的寄存器,是没清掉还是干嘛了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

jinglixixi 回答时间:2018-5-8 08:49:26
多数是因为标志位没有清零导致不能开始第二次传输。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

D-BOY 回答时间:2018-5-9 11:41:53
解决了
DMA使能放在任务启动之后了,放前面就好了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结帖奖励

查看全部评分

D-BOY 回答时间:2018-5-9 11:42:40
springvirus 发表于 2018-5-7 15:30
一看就是80后,宇宙骑士的粉?

宇宙骑士还是挺好看的
springvirus 回答时间:2018-5-9 13:19:14
D-BOY 发表于 2018-5-9 11:42
宇宙骑士还是挺好看的

哈哈,是啊,不错的动画
D-BOY 回答时间:2018-5-9 15:28:02
springvirus 发表于 2018-5-9 13:19
哈哈,是啊,不错的动画

80后?

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版