你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F405,DMA受到串口或者TIM中断而延迟2-6us。,有遇到的吗?

[复制链接]
aceking1123 提问时间:2019-3-27 17:34 /
本帖最后由 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误差是没问题的

222.png

DMA使能程序:
333.png

初始化程序:
DMA优先级已经设置为高
111.png

中断优先级最高:

444.png


SPI初始化程序:
5555.png


收藏 评论5 发布时间:2019-3-27 17:34

举报

5个回答
xmshao 回答时间:2019-4-23 10:55:35
hi,
你将UART和TIM的中断使能指令 放在 DMAENABLE()  之后 测试下结果看看。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

edmundlee 回答时间:2019-4-23 14:37:47
这明显是因为, 串口和TIM的中断引起的, 要证明这一点很容易,加上红色这两句, 如果不再受影响就证明这猜测是正确的。

__set_PRIMASK(1);
DMAENABLE()
__set_PRIMASK(0);

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

aceking1123 回答时间:2019-4-29 10:27:25
edmundlee 发表于 2019-4-23 14:37
这明显是因为, 串口和TIM的中断引起的, 要证明这一点很容易,加上红色这两句, 如果不再受影响就证明这猜 ...

不行的,为了不让中断影响,下面语句都试了一圈了,中断的时候还是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() ; //打开总中断
废鱼 回答时间:2019-4-29 11:06:22
把tim和串口的组优先级调低一级试试。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

xmshao 回答时间:2019-4-29 15:18:01
请问你的UART中断和TIMER中断的服务程序里主要做些操作?有访问哪些外设或存储块?

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版