f4 外部中断的例子同f1略有不同
2016-08-18 10:42
399 查看
1.使能SYSSCFG和对应GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);
2.配置对应GPIO为输入模式
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_x;
GPIO_Init(GPIOx,&GPIO_InitStructure);
3.配置对应GPIO为EXIT线
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOx,EXTI_PinSourcex);
4.配置EXIT的工作参数
EXTI_InitStructure.EXTI_Line =EXTI_Linex;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;//中断,EXTI_Mode_Event为事件
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;//下降沿,EXTI_Trigger_Rising为上升沿,EXTI_Trigger_Rising_Falling双跳边沿
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
5.配置NVIC中的EXTI中断线
NVIC_InitStructure.NVIC_IRQChannel =EXTIx_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = xx;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = xx;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
程序举例:
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 |GPIO_Pin_8 ; //led
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
GPIO_Init(GPIOF,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0 | GPIO_Pin_5;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_11;
GPIO_Init(GPIOF,&GPIO_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
EXTI_InitStructure.EXTI_Line =EXTI_Line0;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel =EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//优先级最低
NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource5);
EXTI_InitStructure.EXTI_Line =EXTI_Line5;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//优先级最低
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF,EXTI_PinSource11);
EXTI_InitStructure.EXTI_Line =EXTI_Line11;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//优先级最低
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13);
EXTI_InitStructure.EXTI_Line =EXTI_Line13;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0x0F;//优先级最低
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
GPIO_SetBits(GPIOF, GPIO_Pin_7 |GPIO_Pin_9);
GPIO_SetBits(GPIOF, GPIO_Pin_8 |GPIO_Pin_10);
while (1)
{
}
}
voidEXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) !=RESET)
{
/* Toggle LED1 */
GPIO_ResetBits(GPIOF, GPIO_Pin_8);
/* Clear the EXTI line 0 pending bit*/
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line5) !=RESET)
{
/* Toggle LED1 */
GPIO_SetBits(GPIOF, GPIO_Pin_8);
/* Clear the EXTI line 0 pending bit*/
EXTI_ClearITPendingBit(EXTI_Line5);
}
}
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line11) !=RESET)
{
/* Toggle LED2 */
GPIO_ResetBits(GPIOF, GPIO_Pin_7);
/* Clear the EXTI line 0 pending bit*/
EXTI_ClearITPendingBit(EXTI_Line11);
}
if(EXTI_GetITStatus(EXTI_Line13) !=RESET)
{
/* Toggle LED2 */
GPIO_SetBits(GPIOF, GPIO_Pin_7);
/* Clear the EXTI line 0 pending bit*/
EXTI_ClearITPendingBit(EXTI_Line13);
}
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);
2.配置对应GPIO为输入模式
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_x;
GPIO_Init(GPIOx,&GPIO_InitStructure);
3.配置对应GPIO为EXIT线
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOx,EXTI_PinSourcex);
4.配置EXIT的工作参数
EXTI_InitStructure.EXTI_Line =EXTI_Linex;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;//中断,EXTI_Mode_Event为事件
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;//下降沿,EXTI_Trigger_Rising为上升沿,EXTI_Trigger_Rising_Falling双跳边沿
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
5.配置NVIC中的EXTI中断线
NVIC_InitStructure.NVIC_IRQChannel =EXTIx_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = xx;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = xx;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
程序举例:
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 |GPIO_Pin_8 ; //led
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
GPIO_Init(GPIOF,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0 | GPIO_Pin_5;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_11;
GPIO_Init(GPIOF,&GPIO_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
EXTI_InitStructure.EXTI_Line =EXTI_Line0;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel =EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//优先级最低
NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource5);
EXTI_InitStructure.EXTI_Line =EXTI_Line5;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//优先级最低
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF,EXTI_PinSource11);
EXTI_InitStructure.EXTI_Line =EXTI_Line11;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;//优先级最低
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13);
EXTI_InitStructure.EXTI_Line =EXTI_Line13;
EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd =ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0x0F;//优先级最低
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&NVIC_InitStructure);
GPIO_SetBits(GPIOF, GPIO_Pin_7 |GPIO_Pin_9);
GPIO_SetBits(GPIOF, GPIO_Pin_8 |GPIO_Pin_10);
while (1)
{
}
}
voidEXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) !=RESET)
{
/* Toggle LED1 */
GPIO_ResetBits(GPIOF, GPIO_Pin_8);
/* Clear the EXTI line 0 pending bit*/
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line5) !=RESET)
{
/* Toggle LED1 */
GPIO_SetBits(GPIOF, GPIO_Pin_8);
/* Clear the EXTI line 0 pending bit*/
EXTI_ClearITPendingBit(EXTI_Line5);
}
}
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line11) !=RESET)
{
/* Toggle LED2 */
GPIO_ResetBits(GPIOF, GPIO_Pin_7);
/* Clear the EXTI line 0 pending bit*/
EXTI_ClearITPendingBit(EXTI_Line11);
}
if(EXTI_GetITStatus(EXTI_Line13) !=RESET)
{
/* Toggle LED2 */
GPIO_SetBits(GPIOF, GPIO_Pin_7);
/* Clear the EXTI line 0 pending bit*/
EXTI_ClearITPendingBit(EXTI_Line13);
}
}
相关文章推荐
- STM32F103 GPIO的外部中断的使用例子。
- stm32学习笔记 F1系列外部中断EXTI
- STM32Cube_FW_F1_V1.0.0固件库学习(四)外部中断 下
- LPC1788外部中断的例子,基于Keil MDK
- 32学习之中断 外部中断 按键控制流水灯不同速度
- linux 外部中断例子
- 外部中断
- STM32W108无线射频模块外部中断接口应用实例
- zigbee学习笔记3----cc2530 外部中断实验
- 基于UC/COSII系统的STM32F103系列单片机外部中断按键的一种使用方法
- 51中的 外部中断
- 利用外部中断实现8路智力抢答器
- [Spark][Hive]外部文件导入到Hive的例子
- STM8S PD7 TLI外部高级中断
- 用定时器0控制切换流水灯顺序,用外部中断控制两种数码管显示方式
- 网上找到一个用不同颜色显示表格奇偶行的例子
- 外部中断的资料
- STM32学习笔记(2):外部中断的使用
- 一个简单的线程中断的例子
- Arduino的详细介绍(基于Mega2560)(分文)——外部中断attachInterrupt()