STM32学习笔记——使用SysTick定时器做延时
例:
选择1/8的AHB时钟作为SysTick时钟源
[cpp]view plaincopy
- SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
3.例程
3.1程序代码
本例程代码在点亮LED灯例程代码上做修改,使用SysTick定时延时,除延时外其他代码不变,与SysTick相关语句给予注释。
[cpp]view plaincopy
- #include"stm32f10x.h"
- voidDelay(u32nTime);//声明延迟函数
- voidGPIO_Configuration(void);
- intmain(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
- GPIO_Configuration();
- while(SysTick_Config(SystemCoreClock/1000)!=0);//配置SysTick,装入初始值,装载值根据时钟源频率而定,72MHz时钟源则产生1ms中断需要装载值为(72000000/1000)
- while(1)
- {
- GPIO_ResetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_9);
- GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_8);
- Delay(1000);
- GPIO_ResetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_8);
- GPIO_SetBits(GPIOC,GPIO_Pin_7|GPIO_Pin_9);
- Delay(1000);
- GPIO_Write(GPIOC,0x0140);
- Delay(1000);
- GPIO_Write(GPIOC,0x0280);
- Delay(1000);
- }
- }
- voidGPIO_Configuration(void)
- {
- GPIO_InitTypeDefGPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
- GPIO_Init(GPIOC,&GPIO_InitStructure);
- }
- volatileu32TimingDelay;//定义全局变量,其声明在stm32f10x_it.c中
- voidDelay(u32nTime)//定义延迟函数
- {
- TimingDelay=nTime;//将延迟数赋予全局变量
- while(TimingDelay!=0);
- }
其中,在stm32f10x_it.c中:
[cpp]view plaincopy
- externvolatileu32TimingDelay;//声明全局变量
- voidSysTick_Handler(void)
- {
- TimingDelay--;
- }
3.2结果
编译烧入开发板后,LED等以1s的时间精确交替闪烁。
参考文献:
[1]JosephYiu,宋岩译.《Cortex-M3权威指南》[EB/OL].http://ishare.iask.sina.com.cn/f/11378333.html?retcode=0,2010-11-05/2012-09-09.
[2]ST.《STM32固件库2.0.3与3.0版本的比较中文版》[EB/OL].http://ishare.iask.sina.com.cn/f/18297257.html?from=like,2011-08-22/2012-09-09.
[3]Xxbing8.STM32_SysTick[EB/OL].http://hi.baidu.com/xxbing8/item/c99ea4f53f996ad042c36ab8
评论