stm32串口DMA一直配置错误。

本文详细讲述了如何修复USART3中断时DMA传输问题,涉及到DMA的正确操作顺序和外设中断NVIC的配置。作者揭示了之前误解和解决问题的关键步骤,包括在中断中关闭与重新启用DMA以及设置NVIC控制器以确保中断响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接上串口中断的代码,之前是无论怎么配置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;
	}

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值