登录注册
论坛
一粒金砂(中级)
61
0
我今天在测试一个程序的时候,利用stm32普通IO口去控制风扇12V供电的开启和关闭,然后利用PWM通过按键去控制风扇的转速。
在测试时,主程序我写了一个代码,12V风扇供电开启30s,再关闭30s,一直循环,中间放置了一个30s的延时函数,按键控制PWM的占空比
测试程序时发现,风扇供电开启和关闭可以实现,但是按键按下去没反应,通过排查,发现按键消抖部分同样调用了延时函数,想着应该是使用的同一延时函数造成的影响,于是屏蔽掉了主函数风扇供电的延时函数,屏蔽后,按键可以正常控制PWM占空比。
于是我便自己写了一个最普通的延时函数,用在了按键消抖部分,但是验证后结果依然是解决不了问题,觉得很奇怪,还请有知道的指导下,不甚感激。
代码如下:
image.png (59.64 KB, 下载次数: 0)
下载附件 保存到相册
2024-12-10 18:13 上传
image.png (78.11 KB, 下载次数: 0)
2024-12-10 18:14 上传
延时程序如下:
image.png (48.41 KB, 下载次数: 0)
2024-12-10 18:15 上传
image.png (15.77 KB, 下载次数: 0)
扫一扫,分享给好友
五彩晶圆(中级)
3272
你程序整体逻辑有问题,你30s延时的时候查询按键是没有办法响应的,
也就是说你的while里面不能有占用时间太长的函数。
中间放置了一个30s的延时函数--------这么长的时间都在延时函数里空跑是不合适的。你应该用个定时器做。比如100ms或1秒一个中断,然后计数。然后在判断。
tagetage 发表于 2024-12-10 19:13 你程序整体逻辑有问题,你30s延时的时候查询按键是没有办法响应的, 也就是说你的while里面不能有占用时 ...
谢谢您的指导,我也怀疑是这个问题,这地方我还是有些疑惑,我30s用的延时也是定时器弄的,是不是我必须要将这个延时修改为定时器中断延时才可以?
Tacking 发表于 2024-12-11 10:15 谢谢您的指导,我也怀疑是这个问题,这地方我还是有些疑惑,我30s用的延时也是定时器弄的,是不是我必须 ...
是的。
发表回复 回帖后跳转到最后一页
EEWorld Datasheet 技术支持
查看 »