本帖最后由 aceking1123 于 2019-3-27 17:43 编辑 周期触发DMA,传数组到SPI,在F103上一直正常,移植到F405上出问题, 具体表现在,不打开串口和TIM中断,DMA可以准时发送数据 一旦打开串口或者TIM中断,DMA使能函数被调用后,总是慢个2-6us,SPI才发送数据。。 最先以为是串口或者TIM中断影响了DMA使能函数的调用,做了个计数器监测程序,发现并没有,DMAENABLE()被调用的时刻正常(误差0.3us以内),那么问题就在于DMAENABLE()后延迟执行了。。 SPI和DMA,中断优先级都已经设置成最高了。。仍然会受到串口TIM外设影响。。 第一次遇到外设干扰DMA,岂止蛋痛简直是蛋碎了。。难道是F405内核的问题吗? 程序: 这是调用DMA程序,rectim5是测试用,通过读TIM5计数器,检查被执行时间点对不对,只有+-0.3us误差是没问题的 DMA使能程序: 初始化程序: DMA优先级已经设置为高 中断优先级最高: SPI初始化程序: |
你将UART和TIM的中断使能指令 放在 DMAENABLE() 之后 测试下结果看看。
评分
查看全部评分
__set_PRIMASK(1);
DMAENABLE()
__set_PRIMASK(0);
评分
查看全部评分
不行的,为了不让中断影响,下面语句都试了一圈了,中断的时候还是SPI延迟,
我觉得可能是圧栈时间过长的原因,还在找问题,找到了来更新帖子
__set_PRIMASK(1); //__disable_irq() ; //关闭
//USART_ITConfig(USART1, USART_IT_TC, DISABLE); //发送完成中断
//USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); //接收中?
//__ASM("CPSID I"); //关闭
//__ASM("CPSIE I");
//__disable_irq() ; //关闭总中断
//__enable_irq() ; //打开总中断
评分
查看全部评分