STM8_GPIO 外部中斷輸入
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 實(shí)驗(yàn)平臺(tái): ST 官方三合一套件
+ 硬件 : STM8S105S6T6C
+ 開發(fā)平臺(tái): IAR For STM8 1.10
+ 仿真器 : ST-Link
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include "stm8s.h"
/*******************************************************************************
* ==時(shí)鐘初始化函數(shù)==
* CLK_DeInit(); --> 復(fù)位時(shí)鐘寄存器
* CLK_HSICmd(ENABLE); --> 使能內(nèi)部高速時(shí)鐘
* CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2); --> 配置內(nèi)部高速時(shí)鐘(時(shí)鐘分頻器:2分頻)
* CLK_ClockSecuritySystemEnable(); --> 開啟時(shí)鐘安全系統(tǒng)
*******************************************************************************/
voidCLK_INIT(void)
{
CLK_DeInit();
CLK_HSICmd(ENABLE);
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);
CLK_ClockSecuritySystemEnable();
}
/*******************************************************************************
* ==I/O口初始化函數(shù)==
* GPIO_DeInit(); --> 復(fù)位I/O端口 D
* GPIO_Init(GPIOD , GPIO_PIN_7 , GPIO_MODE_IN_PU_IT);
--> 使能PORTD_7, 設(shè)置為 輸入 ,上拉 ,帶中斷
* GPIO_Init(GPIOD , GPIO_PIN_0 , GPIO_MODE_OUT_PP_LOW_SLOW);
--> 使能PORTD_0, 設(shè)置為 輸出,推挽式 ,低電平 ,低速率
*******************************************************************************/
voidGPIO_INIT(void)
{
GPIO_DeInit(GPIOD);
GPIO_Init(GPIOD,GPIO_PIN_7,GPIO_MODE_IN_FL_IT);
GPIO_Init(GPIOD,GPIO_PIN_0,GPIO_MODE_OUT_PP_LOW_SLOW);// LED
}
/*******************************************************************************
* ==外部中斷初始化函數(shù)==
* EXTI_DeInit(); --> 初始化寄存器
* EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD , EXTI_SENSITIVITY_FALL_ONLY); --> 設(shè)定下降沿觸發(fā)外部中斷
*******************************************************************************/
voidEXTI_INIT(void)
{
EXTI_DeInit();
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD,EXTI_SENSITIVITY_FALL_ONLY);
}
/*******************************************************************************
* ==MAIN 函數(shù)==
* 初始化 時(shí)鐘
* 初始化 端口
* 初始化 外部中斷觸發(fā)方式
* 使能全局中斷
*******************************************************************************/
voidmain(void)
{
CLK_INIT();
GPIO_INIT();
EXTI_INIT();
enableInterrupts();
while(1);
}
/*******************************************************************************
* ==中斷服務(wù)函數(shù) 函數(shù)==
* PORTD_7是外部最高優(yōu)先級的中斷源(TLI)
* 按下按鍵LED亮,松開按鍵則LED滅
*******************************************************************************/
#pragma vector=2
__interruptvoidTLI_IRQHandler(void)
{
GPIO_WriteReverse(GPIOD,GPIO_PIN_0);//翻轉(zhuǎn) 管腳電平
}
+ 實(shí)驗(yàn)平臺(tái): ST 官方三合一套件
+ 硬件 : STM8S105S6T6C
+ 開發(fā)平臺(tái): IAR For STM8 1.10
+ 仿真器 : ST-Link
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include "stm8s.h"
/*******************************************************************************
* ==時(shí)鐘初始化函數(shù)==
* CLK_DeInit(); --> 復(fù)位時(shí)鐘寄存器
* CLK_HSICmd(ENABLE); --> 使能內(nèi)部高速時(shí)鐘
* CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2); --> 配置內(nèi)部高速時(shí)鐘(時(shí)鐘分頻器:2分頻)
* CLK_ClockSecuritySystemEnable(); --> 開啟時(shí)鐘安全系統(tǒng)
*******************************************************************************/
voidCLK_INIT(void)
{
CLK_DeInit();
CLK_HSICmd(ENABLE);
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);
CLK_ClockSecuritySystemEnable();
}
/*******************************************************************************
* ==I/O口初始化函數(shù)==
* GPIO_DeInit(); --> 復(fù)位I/O端口 D
* GPIO_Init(GPIOD , GPIO_PIN_7 , GPIO_MODE_IN_PU_IT);
--> 使能PORTD_7, 設(shè)置為 輸入 ,上拉 ,帶中斷
* GPIO_Init(GPIOD , GPIO_PIN_0 , GPIO_MODE_OUT_PP_LOW_SLOW);
--> 使能PORTD_0, 設(shè)置為 輸出,推挽式 ,低電平 ,低速率
*******************************************************************************/
voidGPIO_INIT(void)
{
GPIO_DeInit(GPIOD);
GPIO_Init(GPIOD,GPIO_PIN_7,GPIO_MODE_IN_FL_IT);
GPIO_Init(GPIOD,GPIO_PIN_0,GPIO_MODE_OUT_PP_LOW_SLOW);// LED
}
/*******************************************************************************
* ==外部中斷初始化函數(shù)==
* EXTI_DeInit(); --> 初始化寄存器
* EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD , EXTI_SENSITIVITY_FALL_ONLY); --> 設(shè)定下降沿觸發(fā)外部中斷
*******************************************************************************/
voidEXTI_INIT(void)
{
EXTI_DeInit();
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD,EXTI_SENSITIVITY_FALL_ONLY);
}
/*******************************************************************************
* ==MAIN 函數(shù)==
* 初始化 時(shí)鐘
* 初始化 端口
* 初始化 外部中斷觸發(fā)方式
* 使能全局中斷
*******************************************************************************/
voidmain(void)
{
CLK_INIT();
GPIO_INIT();
EXTI_INIT();
enableInterrupts();
while(1);
}
/*******************************************************************************
* ==中斷服務(wù)函數(shù) 函數(shù)==
* PORTD_7是外部最高優(yōu)先級的中斷源(TLI)
* 按下按鍵LED亮,松開按鍵則LED滅
*******************************************************************************/
#pragma vector=2
__interruptvoidTLI_IRQHandler(void)
{
GPIO_WriteReverse(GPIOD,GPIO_PIN_0);//翻轉(zhuǎn) 管腳電平
}
評論