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

stm32定时器不按照时序执行

[复制链接]
allemdddd 提问时间:2020-6-28 22:20 /
我在stm32f103的芯片上控制io口的输出。
因为输出io口比较多(大概20多个),所以就写了一个控制逻辑函数,传入不同的io口结构体地址,就控制不同的io口,
然后把这个函数放在一个20ms的定时器里循环执行,等待传入执行的参数。
现在的问题是发现这个中断定时器有时候不按照代码的逻辑顺序执行了

这个逻辑控制函数必须严格按照时序来执行,可以同时控制多个io口按照不同的时间,不同的顺序执行。。。。
现在问题来了。。。。
    这个函数开始执行一切正常。。。。可是跑着跑着就乱套了。。。。控制的是这个io口,结果执行其他的io口,逻辑全乱套了。。。有些io口不停的乱执行。。。
                //10ms 运行一次
                if (HAL_TIM_Base_GetState(&htim4) == HAL_TIM_STATE_READY)
                {
                        HAL_NVIC_ClearPendingIRQ(TIM4_IRQn);
                        _io_interrupt_function_all_output();
                }


内部已经加了软件锁,及硬件同步锁,还在多处调用了HAL_NVIC_ClearPendingIRQ(TIM4_IRQn); 可是问题依旧。。。。。。

求救。。。。。。。
收藏 评论4 发布时间:2020-6-28 22:20

举报

4个回答
DavidTan 回答时间:2020-6-29 09:11:31
我觉得应该是你自己的控制IO函数出了问题,如果你怀疑定时器中断函数有问题,可以在中断处理里面加一个单独的IO翻转来查看

评分

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

查看全部评分

废鱼 回答时间:2020-6-29 09:48:31
同意楼上,楼主应该是IO控制程序的问题较多。建议看一下判断时间时用的变量,建议用32位定义时间。
mylovemcu 回答时间:2020-6-29 14:08:19
哈  好好梳理一下程序逻辑  单片机还真不会不按照代码逻辑跑  问题可能是你代码有问题  没有必要加太多东西  

评分

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

查看全部评分

Glenxu 回答时间:2020-6-30 09:50:47
我认为你的执行逻辑可能中间有延时或整体有超过10mm的情况所以导致中断和逻辑有交叉情况,不能完整执行,甚至紊乱!

评分

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

查看全部评分

所属标签

相似问题

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