DMA串口发送问题,重新设置TXNUM失败
我采用的是不循环的模式,在发送完成中断里面关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);
} 在发送数据函数使能DMA那里打断点,TX出来的数据就都是对的,没有一个字节多或者少,不打断点让他自己跑,TX的数据就不对了 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);
} 一周一天班 发表于 2024-1-30 09:04
void moy_uart_set_dma_buf(const uint8_t *data, uint32_t length)
{
while(UART4_Tx_DMA_Channel- ...
可以了,非常感谢{:handshake:} 检查TXNUM的值是否在允许的范围内
页:
[1]