打印
[N32L4xx]

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

[复制链接]
342|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- ...

可以了,非常感谢

使用特权

评论回复
5
cr315| | 2024-2-1 16:52 | 只看该作者
检查TXNUM的值是否在允许的范围内

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝