缘由
由于我在使用STM32的时候总会遇到需要单片机等待的地方,如ESP8266的发送、MQ-7一氧化碳传感器、HC-SR501人体红外模块等等。像ESP8266它需要接收端回发已接收的信号而在发射端发送信息到接收到发送完成的过程中,我一般使用的都是延迟来完成的,当模块使用的越来越多后延迟往往就会让我的程序变得一卡一卡的,对于信号的响应也越来越慢,而这个时候就该使用定时器了
目的
上文中我的32因为传感器使用的越来越多(很多模块当时第一次写就用了延迟来进行等待)导致单片机的运行效率低下。已知32大多数是单核处理器,本身并不支持多线程并发任务,那我是不是可以通过一些手段来实现跟多线程一样的效果,这时候我就想到定时器
定时器
定时器就是计数器,定时器一般有8个,从TIM1到TIM8。当定时器达到设定计数数量时,作为一个中断事件中断主程序的执行,先执行中断程序再执行中断前主程序,这样就模拟出了多线程的并发特性。
基本定时器
TIM6\TIM7,功能最弱,只具备基本的定时功能,总线为APB1
通用定时器
TIM2\TIM3\TIM4\TIM5,总线为APB1
高级定时器
TIM1\TIM8,总线为APB2
目前定时器已经分类了,那就可以对其进行初始化了,我选用的是TIM2\TIM3两个,TIM2是作为ESP8266的专属定时器,计数时间为1秒,TIM2作为按键的定时器,时间长度为20毫秒。当模块需要一直等待的时候,因为定时器的缘故导致主程序进入其他模块中执行其他操作,当定时器再次触发中断时,我才去检测数据是否发送成功,这样既不会让程序变得卡卡的,也完成了模块的基本功能。
换句话说就是将需要等待的模块都放入定时器中使用,通过定时器的计数功能来代替延迟函数,既不会影响多模块的正常使用,也不会让单片机的运行速度下降
5511

被折叠的 条评论
为什么被折叠?



