STM8_TIM4 溢出中斷
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 實驗平臺: ST 官方三合一套件
+ 硬件 : STM8S105S6T6C
+ 開發(fā)平臺: IAR For STM8 1.10
+ 仿真器 : ST-Link
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include "stm8s.h"
unsignedintCOUNTER;
/*******************************************************************************
* ==時鐘初始化函數(shù)==
* CLK_DeInit(); --> 復位時鐘寄存器
* CLK_HSICmd(ENABLE); --> 使能內(nèi)部高速時鐘
* CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2); --> 配置內(nèi)部高速時鐘(時鐘分頻器:2分頻)
* CLK_ClockSecuritySystemEnable(); --> 開啟時鐘安全系統(tǒng)
*******************************************************************************/
voidCLK_INIT(void)
{
CLK_DeInit();
CLK_HSICmd(ENABLE);
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);
CLK_ClockSecuritySystemEnable();
}
/*******************************************************************************
* ==I/O口初始化函數(shù)==
* GPIO_DeInit(); --> 復位I/O端口 D
* GPIO_Init(GPIOD , GPIO_PIN_0 , GPIO_MODE_OUT_PP_LOW_SLOW);
--> 使能PORTD_0 設置為 輸出,推挽式 ,低電平 ,低速率
*******************************************************************************/
voidGPIO_INIT(void)
{
GPIO_DeInit(GPIOD);
GPIO_Init(GPIOD,GPIO_PIN_0,GPIO_MODE_OUT_PP_LOW_SLOW);
}
/*******************************************************************************
* ==定時器4初始化函數(shù)==
* TIM4_DeInit(); --> 復位定時器4寄存器
* TIM4_TimeBaseInit(TIM4_PRESCALER_64,0x02 ); --> 128分頻 , 賦計數(shù)器初值
* TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); --> 中斷配置 ,更新中斷使能 即溢出中斷
* TIM4_Cmd(ENABLE); --> 定時器4使能
*******************************************************************************/
voidTIMER4_INIT(void)
{
TIM4_DeInit();
TIM4_TimeBaseInit(TIM4_PRESCALER_128,0x02);
TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE);
TIM4_Cmd(ENABLE);
}
/*******************************************************************************
* ==MAIN 函數(shù)==
* 初始化 時鐘
* 初始化 端口
* 初始化 定時器4
* 使能全局中斷
*******************************************************************************/
voidmain(void)
{
CLK_INIT();
GPIO_INIT();
TIMER4_INIT();
COUNTER=0;
enableInterrupts();
while(1);
}
/*******************************************************************************
* ==中斷服務函數(shù)==
* 翻轉(zhuǎn)LED電平
* 清除定時器更新標志位
*******************************************************************************/
#pragma vector=0x19
__interruptvoidTIM4_UPD_OVF_IRQHandler(void)
{
if(COUNTER<10000)
{
++COUNTER;
}
else
{
GPIO_WriteReverse(GPIOD,GPIO_PIN_0);
COUNTER=0;
}
TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}
+ 實驗平臺: ST 官方三合一套件
+ 硬件 : STM8S105S6T6C
+ 開發(fā)平臺: IAR For STM8 1.10
+ 仿真器 : ST-Link
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include "stm8s.h"
unsignedintCOUNTER;
/*******************************************************************************
* ==時鐘初始化函數(shù)==
* CLK_DeInit(); --> 復位時鐘寄存器
* CLK_HSICmd(ENABLE); --> 使能內(nèi)部高速時鐘
* CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2); --> 配置內(nèi)部高速時鐘(時鐘分頻器:2分頻)
* CLK_ClockSecuritySystemEnable(); --> 開啟時鐘安全系統(tǒng)
*******************************************************************************/
voidCLK_INIT(void)
{
CLK_DeInit();
CLK_HSICmd(ENABLE);
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);
CLK_ClockSecuritySystemEnable();
}
/*******************************************************************************
* ==I/O口初始化函數(shù)==
* GPIO_DeInit(); --> 復位I/O端口 D
* GPIO_Init(GPIOD , GPIO_PIN_0 , GPIO_MODE_OUT_PP_LOW_SLOW);
--> 使能PORTD_0 設置為 輸出,推挽式 ,低電平 ,低速率
*******************************************************************************/
voidGPIO_INIT(void)
{
GPIO_DeInit(GPIOD);
GPIO_Init(GPIOD,GPIO_PIN_0,GPIO_MODE_OUT_PP_LOW_SLOW);
}
/*******************************************************************************
* ==定時器4初始化函數(shù)==
* TIM4_DeInit(); --> 復位定時器4寄存器
* TIM4_TimeBaseInit(TIM4_PRESCALER_64,0x02 ); --> 128分頻 , 賦計數(shù)器初值
* TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); --> 中斷配置 ,更新中斷使能 即溢出中斷
* TIM4_Cmd(ENABLE); --> 定時器4使能
*******************************************************************************/
voidTIMER4_INIT(void)
{
TIM4_DeInit();
TIM4_TimeBaseInit(TIM4_PRESCALER_128,0x02);
TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE);
TIM4_Cmd(ENABLE);
}
/*******************************************************************************
* ==MAIN 函數(shù)==
* 初始化 時鐘
* 初始化 端口
* 初始化 定時器4
* 使能全局中斷
*******************************************************************************/
voidmain(void)
{
CLK_INIT();
GPIO_INIT();
TIMER4_INIT();
COUNTER=0;
enableInterrupts();
while(1);
}
/*******************************************************************************
* ==中斷服務函數(shù)==
* 翻轉(zhuǎn)LED電平
* 清除定時器更新標志位
*******************************************************************************/
#pragma vector=0x19
__interruptvoidTIM4_UPD_OVF_IRQHandler(void)
{
if(COUNTER<10000)
{
++COUNTER;
}
else
{
GPIO_WriteReverse(GPIOD,GPIO_PIN_0);
COUNTER=0;
}
TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}
評論