文档详情

stm32定时器参考资料.doc

发布:2017-05-30约8.39万字共78页下载文档
文本预览下载声明
一、?本课内容概述 这一课的主要内容是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
显示全部
相似文档