【小白篇】如何实现定时器的“死等”延时
定时器是我们日常应用中必不可少的一部分,定时器的功能也多种多样,小到定时计数,大到捕获比较。今天来说说最基本的定时方法,常见的有两种,“死等”和“时间片”。今天讲的是“死等”延时,也就是说在延时的这段时间里,我什么都不干,就在那里计数,这种方法比较多的应用于一些日常调试和测试中。下面以APM32F103XB为例,分十步对该过程进行分析。//1.开启时钟RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR2); //2.定义结构体名称TMR_BaseConfig_T TMR_BaseConfigDiedelay; //3.配置结构体变量TMR_BaseConfigDiedelay.clockDivision = TMR_CLOCK_DIV_1;TMR_BaseConfigDiedelay.countMode = TMR_COUNTER_MODE_UP;TMR_BaseConfigDiedelay.division = 7200 - 1;TMR_BaseConfigDiedelay.period = 10 * nms;TMR_ConfigTimeBase(TMR2, &TMR_BaseConfigDiedelay); //4.使能自动装载与预装载寄存器的允许位TMR_EnableAutoReload(TMR2); //5.设置更新请求源只在计数器上溢或下溢时产生中断TMR_ConfigUpdateRequest(TMR2,TMR_UPDATE_SOURCE_GLOBAL); //6.先清除一次标志位TMR_ClearStatusFlag(TMR2,TMR_FLAG_UPDATE); //7.使能计数器TMR_Enable(TMR2); //8.等待标志位置起while(TMR_ReadStatusFlag(TMR2,TMR_FLAG_UPDATE)!= 1); //9.将计数器关闭TMR_Disable(TMR2); //10.清除标志位,清除计数TMR_ClearStatusFlag(TMR2,TMR_FLAG_UPDATE);TMR2->CNT = 0; 注:在使用这种方法时,要考虑好输入的值是否会超出重装载值的量程,可以根据自己的需求对预分频值和重装载值进行修改,否则,超出量程的话可能会导致计数不准(曾经在这里卡过很久)。每次使用时只要直接调用函数,并传入自己想要计数的时间即可实现。很有意思,有时候就是死等,有些程序是不死等。如果能做个框架一边是必须执行的,一边是可以死等的就完美了。 对这方面的知识不甚了解,围观一下先。
页:
[1]