我采用的是不循环的模式,在发送完成中断里面关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);
} |