chenkun1234 发表于 2024-8-19 16:16

kf32a156MQV串口DMA接收,获取DMA通道的当前剩余数据量问题

串口DMA接收时,uint16_t DMA_Get_Transfer_Number_Remain (DMA_SFRmap* DMAx, uint32_t Channel)获取DMA通道的当前剩余数据量,这个剩余量无法复位,我看例程里面也没用这个是不是不能用???比如我设置100个字节的串口DMA接收容量,我第一次接收到40个字节以后产生串口空闲中断 可以通过100-DMA_Get_Transfer_Number_Remain 来获取第一帧数据的个数,然后将其复位,但是获取DMA通道的当前剩余数据量还是之前的个数没有复位,下一帧数据接收时用100 - DMA_Get_Transfer_Number_Remain 就不是正确的数据个数,,是不能用uint16_t DMA_Get_Transfer_Number_Remain (DMA_SFRmap* DMAx, uint32_t Channel)这个函数吗????

钟爱柳州 发表于 2024-8-20 10:47

DMA_Get_Transfer_Number_Remain函数可以用,不过DMAx_NCTy DMAx 通道 y 当前剩余数据寄存器是只读的,不能直接给寄存器赋值复位,可以使用DMA_Channel_Enable函数,先关闭使能再打开使能的方式复位NCT,如下:
DMA_Channel_Enable(DMAx, channal, DISABLE);
DMA_Channel_Enable(DMAx, channal, ENABLE);

chenkun1234 发表于 2024-8-20 11:12

钟爱柳州 发表于 2024-8-20 10:47
DMA_Get_Transfer_Number_Remain函数可以用,不过DMAx_NCTy DMAx 通道 y 当前剩余数据寄存器是只读的,不能 ...

DMA_Channel_Enable(DMAx, channal, DISABLE);
DMA_Channel_Enable(DMAx, channal, ENABLE);
在空闲中断里面加了上面这两句   还是没有复位DMAx->NCT的值   还是只有第一帧时个数正确还是没有复位

钟爱柳州 发表于 2024-8-20 13:47

chenkun1234 发表于 2024-8-20 11:12
DMA_Channel_Enable(DMAx, channal, DISABLE);
DMA_Channel_Enable(DMAx, channal, ENABLE);
在空闲中断 ...

论坛上交流太慢,看一下私信联系我

chenkun1234 发表于 2024-8-20 18:10

A04版本才行

cooldog123pp 发表于 2024-8-21 11:43

kf32a156MQV应该会是芯旺微的芯片吧,可以直接找他们FAE应该能更快解决问题。

chenkun1234 发表于 2024-8-21 14:48

cooldog123pp 发表于 2024-8-21 11:43
kf32a156MQV应该会是芯旺微的芯片吧,可以直接找他们FAE应该能更快解决问题。 ...

用的就芯片   要用最新出的
页: [1]
查看完整版本: kf32a156MQV串口DMA接收,获取DMA通道的当前剩余数据量问题