在DMA的USART发送实验中,我想每次发送数据时重新设置源地址和传输数量。我的做法是
1、DMA禁能:
USART_DMACmd(macUSARTx, USART_DMAReq_Tx, DISABLE);
2、新的源地址
macUSART_TX_DMA_CHANNEL->CMAR = (u32)NewBuffAddr;
3、新的传输数量
macUSART_TX_DMA_CHANNEL->CNDTR = NewBuffSize;
多次实验发现,写CMAR寄存器可以改写新的源地址,但是CNDTR无论如何设置不进去,发送数量永远等于第一次配置的数量。
我尝试在初次配置完DMA且未使能以前立即修改CNDTR,接收到的字符数量依然是SENDBUFF_SIZE而不是1:
请问CNDTR是否要在特定条件才能配置成功? |