[N32L4xx]

DMA串口发送问题,重新设置TXNUM失败

[复制链接]
294|4
手机看帖
扫描二维码
随时随地手机跟帖
hongyaolee|  楼主 | 2024-1-29 20:11 | 显示全部楼层 |阅读模式
我采用的是不循环的模式,在发送完成中断里面关DMA,然后在需要发送数据时根据需要发送的长度重新设置TXNUM,然后打开DMA,但好像没起作用
代码如下:
发送完成中断:
void DMA_Channel5_IRQHandler(void)
{
        if (DMA_GetIntStatus(DMA_INT_TXC5, DMA) != RESET)
        {
                DMA_EnableChannel(UART4_Tx_DMA_Channel, DISABLE);
                DMA_ClrIntPendingBit(DMA_INT_TXC5, DMA);
        }
}
发送数据:
void moy_uart_set_dma_buf(const uint8_t *data, uint32_t length)
{
        memcpy(tx_buff, data, length);
        DMA_SetCurrDataCounter(UART4_Tx_DMA_Channel, length);
        DMA_EnableChannel(UART4_Tx_DMA_Channel, ENABLE);
}

使用特权

评论回复
hongyaolee|  楼主 | 2024-1-29 21:23 | 显示全部楼层
在发送数据函数使能DMA那里打断点,TX出来的数据就都是对的,没有一个字节多或者少,不打断点让他自己跑,TX的数据就不对了

使用特权

评论回复
一周一天班| | 2024-1-30 09:04 | 显示全部楼层
void moy_uart_set_dma_buf(const uint8_t *data, uint32_t length)
{
       while(UART4_Tx_DMA_Channel->CHCFG & DMA_CHCFG1_CHEN);
        memcpy(tx_buff, data, length);
        DMA_SetCurrDataCounter(UART4_Tx_DMA_Channel, length);
        DMA_EnableChannel(UART4_Tx_DMA_Channel, ENABLE);
}

使用特权

评论回复
hongyaolee|  楼主 | 2024-1-30 10:16 | 显示全部楼层
一周一天班 发表于 2024-1-30 09:04
void moy_uart_set_dma_buf(const uint8_t *data, uint32_t length)
{
       while(UART4_Tx_DMA_Channel- ...

可以了,非常感谢

使用特权

评论回复
cr315| | 2024-2-1 16:52 | 显示全部楼层
检查TXNUM的值是否在允许的范围内

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝