stm32學(xué)習(xí)之四
系統(tǒng)的滴答定時器可以測試的例子是,將開發(fā)板上的LED等輪流點亮即可(我選擇的是1s輪流點亮三個LED等)。
首先,系統(tǒng)滴答定時器的特點是,設(shè)置開啟定時器的話,會自動計數(shù),這個時候,計數(shù)到0的時候,會觸發(fā)中斷。
可以設(shè)置一個靜態(tài)的變量,全局進行計數(shù),從而延時。
步驟:
1、建立一個SysTick.h文件,代碼如下:
#ifndef _SYSTICK_H
#define _SYSTICK_H
#include "stm32f10x.h"
void SysTick_Init(void);
//void timeDecrement(void);
void delay(__IO uint32_t count);
#endif
2、建立一個SysTick.c文件,代碼如下:
#include "SysTick.h"
static __IO uint32_t timeCount;
void SysTick_Init(void)
{
if(SysTick_Config(SystemCoreClock/1000))//配置1ms的中斷
{
while(1);
}
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
void delay(__IO uint32_t count)
{
timeCount = count;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
while(timeCount!=0);
}
void timeDecrement(void)
{
if(timeCount!=0x00)
{
timeCount--;
}
}
3、中斷產(chǎn)生后,會執(zhí)行stm32f10x_it.c文件:
會自動執(zhí)行這個函數(shù):
SysTick_Handler()
那么在函數(shù)內(nèi)部進行處理函數(shù):
void SysTick_Handler(void)
{
timeDecrement();
}
4、LED的操作不變:
led.c文件:
#include "led.h"
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
}
led.h文件:
#ifndef _LED_H
#define _LED_H
#include "stm32f10x.h"
#define ON 1
#define OFF 0
#define LED1(a) if (a)
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
else
GPIO_SetBits(GPIOC,GPIO_Pin_3)
#define LED2(a) if (a)
GPIO_ResetBits(GPIOC,GPIO_Pin_4);
else
GPIO_SetBits(GPIOC,GPIO_Pin_4)
#define LED3(a) if (a)
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
else
GPIO_SetBits(GPIOC,GPIO_Pin_5)
void LED_GPIO_Config(void);
#endif
主函數(shù)如下:
/******************** (C) COPYRIGHT 2013**************************
* 文件名 :main.c
* 描述 :用3.5.0版本建的工程模板。
* 實驗平臺:野火STM32開發(fā)板
* 庫版本 :ST3.5.0
*
* 作者 :wit_yuan
* 版本 : v1.0
* 時間 : 2013年4月27日
**********************************************************************************/
#include "stm32f10x.h"
#include "led.h"
#include "SysTick.h"
/*
* 函數(shù)名:main
* 描述 : 主函數(shù)
* 輸入 :無
* 輸出 : 無
*/
int main(void)
{
LED_GPIO_Config();
SysTick_Init();
while(1)
{
LED1(ON);
delay(1000);
LED1(OFF);
delay(1000);
LED2(ON);
delay(1000);
LED2(OFF);
delay(1000);
LED3(ON);
delay(1000);
LED3(OFF);
delay(1000);
}
}
整個實驗過程完畢。
評論