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結果
編譯燒入開發(fā)板后,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
評論