D-BOY 发表于 2018-5-7 11:47:28

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

本帖最后由 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,请教下这个问题怎么解决?

wolfgang2015 发表于 2018-5-7 14:28:28

在DMA传输的回调函数中,增加UART_EndTransmit_IT 操作。
选择DMA进行原子操作,要完整性封装。

电子发烧友_3012981 发表于 2018-5-7 15:01:48

重新开启中断

butterflyspring 发表于 2018-5-7 15:26:25

你在error那一段放个断点,看看?就算没有callback,都会复位的.还是其他改了这个标识位?

springvirus 发表于 2018-5-7 15:30:15

一看就是80后,宇宙骑士的粉?

Cortexxx 发表于 2018-5-7 18:33:59

应该是设置了DMA的TC(传输完成)中断,然后没有清除中断标志或者 Flag。所以当第一次发送完毕之后,标志位没有清零导致不能开始第二次传输。

feixiang20 发表于 2018-5-7 21:41:23

你设置个中断,看看导致第2次传递的错误是不是标志不对

mmuuss586 发表于 2018-5-7 21:45:02

看下串口,DMA相关的寄存器,是没清掉还是干嘛了

jinglixixi 发表于 2018-5-8 08:49:26

多数是因为标志位没有清零导致不能开始第二次传输。

D-BOY 发表于 2018-5-9 11:41:53

解决了:L
DMA使能放在任务启动之后了,放前面就好了
页: [1] 2
查看完整版本: 串口发送一次后就不再发送数据