直接上串口中断的代码,之前是无论怎么配置dma最多只传输一次,后找到原因是因为在串口中断中需要先关闭DMA然后填充计数器,再打开。我之前以为设置单词模式后dma传输完成就自动关闭了,然后就没有先关闭再填充计数器,而是直接填充计数器了。另外又发现好像开启外设中断之后必须要配置一下NVIC控制器,不然无法进入中断函数。这又引起一个疑惑,就是不明白RT-Thread的NVIC组倒是应该设置为组几,在代码中未看到设置NVIC组。
void USART3_IRQHandler()
{
uint8_t i;
rt_kprintf("USART3_IRQHandler! \n");
if(USART_GetFlagStatus(USART3,USART_FLAG_RXNE)!=RESET)
{
USART_ClearFlag(USART3,USART_FLAG_RXNE);
rt_kprintf("USART_FLAG_RXNE! \n");
}
if(USART_GetFlagStatus(USART3,USART_FLAG_IDLE)!=RESET)
{
DMA_Cmd(DMA1_Channel3, DISABLE);
DMA_SetCurrDataCounter(DMA1_Channel3,9);
DMA_Cmd(DMA1_Channel3, ENABLE);
rt_kprintf("USART_FLAG_IDLE \n");
i=USART3->DR;
i=USART3->SR;
}
}