a)意图:运用体系时钟来进行两项试验——周期履行代码与准确守时推迟。
b)初始化函数界说:
void SysTick_Configuration(void);
c)初始化函数调用:
SysTick_Configuration();
d)初始化函数:
void SysTick_Configuration(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//时钟除8
SysTick_SetReload(250000);//计数周期长度
SysTick_CounterCmd(SysTick_Counter_Enable);//发动计时器
SysTick_ITConfig(ENABLE);//翻开中止
}
e)在NVIC的初始化函数里边增加以下代码翻开相关中止:
NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 1, 0);//中止等级设置,一般设置的高一些会少受其他影响
f)在stm32f10x_it.c文件中找到void SysTickHandler函数
void SysTickHandler(void)
{
履行代码
}
g)简略运用:准确推迟函数,由于systic中止往往被用来履行周期循环代码,所以一些例程中运用其中止的发动和制止来编写的准确延时函数实际上不实用,我自己编写了准确计时函数反而代码更精简,思路更简略。思路是调用后,变量清零,然后运用时钟来的曾变量,不断比较变量与推迟的数值,持平则退出函数。代码和过程如下:
i.界说通用变量:u16 Tic_Val=0; //变量用于准确计时
ii.在stm32f10x_it.c文件中相应界说:
extern u16 Tic_Val;//在本文件引证MAIN.c界说的准确计时变量
iii.界说函数称号:void Tic_Delay(u16 Tic_Count);//准确推迟函数
iv.准确延时函数:
void Tic_Delay(u16 Tic_Count)//准确延时函数
{Tic_Val=0;//变量清零
while(Tic_Val != Tic_Count){printf(“”);}//计时
}
v.在stm32f10x_it.c文件中void SysTickHandler函数里边增加
Tic_Val++;//变量递加
vi.调用代码:Tic_Delay(10);//准确延时
vii.疑问:假如去掉计时行那个没用的printf(“”);函数将停止工作,这个现象很古怪
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/258771.html