allemdddd 发表于 2020-6-28 22:20:48

stm32定时器不按照时序执行

我在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); 可是问题依旧。。。。。。

求救。。。。。。。

tgw860910 发表于 2020-6-29 09:11:31

我觉得应该是你自己的控制IO函数出了问题,如果你怀疑定时器中断函数有问题,可以在中断处理里面加一个单独的IO翻转来查看

发表于 2020-6-29 09:48:31

同意楼上,楼主应该是IO控制程序的问题较多。建议看一下判断时间时用的变量,建议用32位定义时间。

mylovemcu 发表于 2020-6-29 14:08:19

哈好好梳理一下程序逻辑单片机还真不会不按照代码逻辑跑问题可能是你代码有问题没有必要加太多东西

glenxu 发表于 2020-6-30 09:50:47

我认为你的执行逻辑可能中间有延时或整体有超过10mm的情况所以导致中断和逻辑有交叉情况,不能完整执行,甚至紊乱!
页: [1]
查看完整版本: stm32定时器不按照时序执行