stm32定时器参考资料.doc
文本预览下载声明
一、?本课内容概述
这一课的主要内容是STM32systick的配置以及如何产生精确延时。?
?
通常实现Delay(N)
for(i?=?0;?i?=?x;?i?++);?
?x??---??对应于?对应于N?毫秒的循环值
对于STM32ns,进行for循环时,要实现N毫秒的x值非常大,而且由于系统频率的宽广,很难计算出延时N毫?秒的精确值。针对STM32微处理器,需要重新设计一个新的方法去实现该功能,以实现在程序中使用Delay(N)。?
注:?全局变量TimingDelay????必须定义为volatile
?
二、?SysTick的配置使用方法
外部晶振为8MHz9倍频,系统时钟为72MHz,SysTick的最高频率为9MHz(最大为HCLK/8),在这个条件下,把SysTick?效验值设置成9,将SysTick?时钟设置为9MHz,?就能够产生1us的时间基值,即SysTick产生1us的中断。
使用STsystick的方法
1、调用SysTick_CounterCmd()?失能SysTick计数器
2、调用SysTick_ITConfig?()?失能SysTick中断?
3、调用SysTick_CLKSourceConfig()?设置SysTick时钟源。
4、调用SysTick_SetReload()?设置SysTick重装载值。
5、调用SysTick_ITConfig?()?????使能SysTick中断
6、调用SysTick_CounterCmd()?开启SysTick计数器
7、去掉stem32f10x_conf.c文件里面关于SysTick的注释,包含编译相关文件
8、在FWLIB里面加入stm32f10x_systick.c
9FLASH空间:project-option-C/C++?Complier-Processor-Defined?symbols改为VECT_TAB_FLASH
相关程序
(1)建立systick.c文件??
新建systick.c文件,作为systick相关函数的子函数,子函数里面应包括:SysTick_Init,SysTickDelayUs,?TimingDelayMs_Decrement三个函数,由于程序用到一个存放中断计数值的全局变量,而我们将次变量与main.c文件中定义,因此还要在这个文件中做外部引用定义:extern?vu32?TimingDelay;,再把系统初始化头文件包括,就完成了此文件的建立:#include?systemInit.h。??
(2)修改systemInit.h文件??
由于在其他C文件中要用到systick.c定义的一些函数,因此我们在systemInit.h中进行外部函数声明:??
extern?void?SysTick_Init(void);??
extern?void?SysTickDelayUs(u32);??
extern?void?TimingDelay_Decrement(void);??
(3)修改中断文件stm32f10x_it.c??
由于我们用到了systick系统时钟计数器中断计数的方法来产生延时,因此,我们必须在此文件中修改相应的中断函数,打开stm32f10x_it.c找到相应的函数,加入中断计数函数。??
??
void?SysTickHandler(void)??
{??
??TimingDelay_Decrement();?//中断计数函数??
}??
由于在此文件中调用了TimingDelay_Decrement()函数,因此必须将对此函数进行了外部声明的头文件systemIni.h包括进来:??
??
#include?stm32f10x_it.h??
#include?systemInit.h??
(3)修改main.c文件??
由于使用了全局变量TimingDelay,因此要进行定义:vu32?TimingDelay;,而要完成sistick的初始化,我们要在系统初始化总程序System_Init()里引用SysTick_Init();函数。??
根据需要编写我们的应用主程序,给出一个实现流水灯的例程:??
??
int?main(void)??
{??
??System_Init();??
??while?(1)??
??{??
????LED1_H;??
????SysTickDelayUs(500000);??
????LED1_L;??
????SysTickDelayUs(500000);??
????LED2_H;??
????SysTickDelayUs(500000);??
????LED2_L;??
????Sys
显示全部