STM32外部中断
GPIO_Pin_9, 5, GPIO_Pin_10, 6, GPIO_Pin_11, 6, GPIO_Pin_12, 6, GPIO_Pin_13, 6, GPIO_Pin_14, 6, GPIO_Pin_15, 6, };
GPIO_PinSource9, GPIO_PinSource10, GPIO_PinSource11, GPIO_PinSource12, GPIO_PinSource13, GPIO_PinSource14, GPIO_PinSource15,
RCC_APB2PeriphClockCmd(c_s_EXTI_PORT[EXTI_PORTx].Periph, ENABLE);
GPIO_InitStructure.GPIO_Pin = c_s_EXTI_PIN[EXTI_Pin_x].Pin; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(c_s_EXTI_PORT[EXTI_PORTx].Port, &GPIO_InitStructure);
EXTI_PIN_ENUM EXTI_Pin_x,
EXTITrigger_TypeDef Trigger,
void(*pBackCallFun)(void)
Output
: None
Return Value : void
History
:
1.Date
: 2015/4/21
Author
: Hui.Liu
Modification : Created function
LED_Init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); sys_extiInit(EXTI_PORTB, EXTI_PIN_9, EXTI_Trigger_Rising, LED1);//设定外部中断引脚为 GPIOB_9,上升沿触发,进入中断后调用函数 void LED1(void); sys_extiInit(EXTI_PORTA, EXTI_PIN_1, EXTI_Trigger_Falling, LED2); while(1) { } return 0; }
void (*ExtiBackCallFun[NUM_OF_EXTI_PIN])(void) = {
(void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0, (void *)0,
/******************************************************************************
Copyright (C), 2001-2011, DCN Co., Ltd.
******************************************************************************
EXTI_InitStructure.EXTI_Trigger
=
//@设置触发类型
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
void EXTI_Handler(EXTI_PIN_ENUM index) {
Author
: Hui.Liu
Modification: Created file
******************************************************************************/ #include "stm32f10x.h" #include "sys_exti.h"
};
/*****************************************************************************
Prototype : sys_extiInit
Description :
Input
: EXTI_PORT_ENUM EXTI_PORTx,
EXTI0_SubPriority, EXTI1_SubPriority, EXTI2_SubPriority, EXTI3_SubPriority, EXTI4_SubPriority, EXTI9_5_SubPriority, EXTI15_10_SubPriority,
typedef struct
STM32 外部中断驱动,方便使用 使用方法:先创建回调函数,然后调用 sys_extiInit 函数初始化外部中断即可。 示例: #include "stm32f10x.h"
void LED1(void) {
LED_1 = !LED1; } void LED2(void) {
LED_2 = !LED2; } int main(void) {
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
ExtiBackCallFun[EXTI_Pin_x] = pBackCallFun;
=
c_s_EXTI_PRIO[c_s_EXTI_PIN[EXTI_Pin_x].Index].SubPriority;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
GPIO_EXTILineConfig(c_s_EXTI_PORT[EXTI_PORTx].PortSource, c_s_EXTI_PIN[EXTI_Pin_x].Source); //@绑定外部中断端口
{
uint16_t Pin;
uint8_t Index;
uint8_t Source;
uint32_t Line;
} EXTI_PIN_STRUCT;
const EXTI_PIN_STRUCT c_s_EXTI_PIN[NUM_OF_EXTI_PIN] =
{
GPIO_Pin_0, 0,
GPIO_PinSource0, EXTI_Line0,
const EXTI_PRIO_STRUCT c_s_EXTI_PRIO[7] = {
EXTI0_IRQn, EXTI0_PreemptionPriority, EXTI1_IRQn, EXTI1_PreemptionPriority, EXTI2_IRQn, EXTI2_PreemptionPriority, EXTI3_IRQn, EXTI3_PreemptionPriority, EXTI4_IRQn, EXTI4_PreemptionPriority, EXTI9_5_IRQn, EXTI9_5_PreemptionPriority, EXTI15_10_IRQn, EXTI15_10_PreemptionPriority, };
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority
=
c_s_EXTI_PRIO[c_s_EXTI_PIN[EXTI_Pin_x].Index].PreemptionPriority;
NVIC_InitStructure.NVIC_IRQChannelSubPriority
GPIO_Pin_5, 5,
GPIO_PinSource5, EXTI_Line5,
GPIO_Pin_6, 5,
GPIO_PinSource6, EXTI_Line6,
GPIO_Pin_7, 5,
GPIO_PinSource7, EXTI_Line7,
GPIO_Pin_8, 5,
GPIO_PinSource8, EXTI_Line8,
EXTI_Line9, EXTI_Line10, EXTI_Line11, EXTI_Line12, EXTI_Line13, EXTI_Line14, EXTI_Line15,
typedef struct {
GPIO_TypeDef *Port; uint32_t Periph; uint8_t PortSource; } EXTI_PORT_STRUCT; const EXTI_PORT_STRUCT c_s_EXTI_PORT[NUM_OF_EXTI_PORT] = { GPIOA, RCC_APB2Periph_GPIOA, GPIO_PortSourceGPIOA, GPIOB, RCC_APB2Periph_GPIOB, GPIO_PortSourceGPIOB, GPIOC, RCC_APB2Periph_GPIOC, GPIO_PortSourceGPIOC, GPIOD, RCC_APB2Periph_GPIOD, GPIO_PortSourceGPIOD, GPIOE, RCC_APB2Periph_GPIOE, GPIO_PortSourceGPIOE, GPIOF, RCC_APB2Periph_GPIOF, GPIO_PortSourceGPIOF, GPIOG, RCC_APB2Periph_GPIOG, GPIO_PortSourceGPIOG, };
GPIO_Pin_1, 1,