STM32 uCOS_II 实践 之 外部中断事件 及 系统运行过程
大概可以分作4个步骤:1-配置相应管脚为浮空输入;2-配置相应管脚为外部中断口并设定其中断属性及参数;3-配置NVIC相关寄存器,设定中断优先级;4-编写中断服务函数。废话不说直接上代码:
第一步:配置相应管脚为浮空输入,来自文件Key.c
voidKey_Port_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure_EXTI_KEY_PORTE;
GPIO_InitStructure_EXTI_KEY_PORTE.GPIO_Pin=GPIO_Pin_4;// 端口4
GPIO_InitStructure_EXTI_KEY_PORTE.GPIO_Mode=GPIO_Mode_IN_FLOATING;// 浮空输入
GPIO_InitStructure_EXTI_KEY_PORTE.GPIO_Speed=GPIO_Speed_50MHz;// 口线翻转速度为50MHz
GPIO_Init(GPIOE,&GPIO_InitStructure_EXTI_KEY_PORTE);// 端口初始化
GPIO_InitStructure_EXTI_KEY_PORTE.GPIO_Pin=GPIO_Pin_3;// 端口3
GPIO_InitStructure_EXTI_KEY_PORTE.GPIO_Mode=GPIO_Mode_IN_FLOATING;// 浮空输入
GPIO_InitStructure_EXTI_KEY_PORTE.GPIO_Speed=GPIO_Speed_50MHz;// 口线翻转速度为50MHz
GPIO_Init(GPIOE,&GPIO_InitStructure_EXTI_KEY_PORTE);// 端口初始化
}
第二步:配置相应管脚为外部中断口并且设定其中断属性及参数,来自文件EXTIG.c
voidEXTI_PORTE_Configuration(void)
{
EXTI_InitTypeDefEXTI_InitStructure_EXTI_LINE4;
EXTI_InitTypeDefEXTI_InitStructure_EXTI_LINE3;
/* Connect EXTI Line4,3 to PE4,PE3 */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);// 配置 管脚PE4用作外部中断线路
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);// 配置 管脚PE3用作外部中断线路
/* Configure EXTI Line4 to generate an interrupt on falling edge */
EXTI_InitStructure_EXTI_LINE4.EXTI_Line=EXTI_Line4;//配置 使能或失能的外部线路
EXTI_InitStructure_EXTI_LINE4.EXTI_Mode=EXTI_Mode_Interrupt;//配置 EXTI线路为中断请求 (或者是事件请求)
EXTI_InitStructure_EXTI_LINE4.EXTI_Trigger=EXTI_Trigger_Falling;//配置 使能线路的触发边沿 -- 下降沿触发中断
EXTI_InitStructure_EXTI_LINE4.EXTI_LineCmd=ENABLE;//配置 状态为使能
EXTI_Init(&EXTI_InitStructure_EXTI_LINE4);// 初始化外部中断线路4
/* Configure EXTI Line3 to generate an interrupt on falling edge */
EXTI_InitStructure_EXTI_LINE3.EXTI_Line=EXTI_Line3;//配置 使能或失能的外部线路
EXTI_InitStructure_EXTI_LINE3.EXTI_Mode=EXTI_Mode_Interrupt;//配置 EXTI线路为中断请求 (或者是事件请求)
EXTI_InitStructure_EXTI_LINE3.EXTI_Trigger=EXTI_Trigger_Falling;//配置 使能线路的触发边沿 -- 下降沿触发中断
EXTI_InitStructure_EXTI_LINE3.EXTI_LineCmd=ENABLE;//配置 状态为使能
EXTI_Init(&EXTI_InitStructure_EXTI_LINE3);// 初始化外部中断线路3
/* Generate software interrupt: simulate a falling edge applied on EXTI line 13 */
EXTI_GenerateSWInterrupt(EXTI_Line4);//线路4产生一个软件中断
EXTI_GenerateSWInterrupt(EXTI_Line3);//线路3产生一个软件中断
}
第三步:配置NVIC相关寄存器,设定中断优先级,来自文件SysInit.c
voidNVIC_Configuration(void)
{
NVIC_InitTypeDefNVIC_InitStructure_EXTI_LINE;
/* ================ NVIC-EXTI-PORTE ================= */
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 配置优先级分组长度
/* Enable the EXTI15_10 Interrupt */
NVIC_InitStructure_EXTI_LINE.NVIC_IRQChannel=EXTI4_IRQn;// 配置使能指定的IRQ(Interrupt ReQuest中断请求)通道
NVIC_InitStructure_EXTI_LINE.NVIC_IRQChannelPreemptionPriority=0;// 配置IRQ的 组 优先级
NVIC_InitStructure_EXTI_LINE.NVIC_IRQChannelSubPriority=0;// 配置IRQ的 从 优先级
NVIC_InitStructure_EXTI_LINE.NVIC_IRQChannelCmd=ENABLE;// 配置IRQ 使能
NVIC_Init(&NVIC_InitStructure_EXTI_LINE);// 初始化 IRQ
NVIC_InitStructure_EXTI_LINE.NVIC_IRQChannel=EXTI3_IRQn;// 配置使能指定的IRQ(Interrupt ReQuest中断请求)通道
NVIC_InitStructure_EXTI_LINE.NVIC_IRQChannelPreemptionPriority=0;// 配置IRQ的 组 优先级
NVIC_InitStructure_EXTI_LINE.NVIC_IRQChannelSubPriority=0;// 配置IRQ的 从 优先级
NVIC_InitStructure_EXTI_LINE.NVIC_IRQChannelCmd=ENABLE;// 配置IRQ 使能
NVIC_Init(&NVIC_InitStructure_EXTI_LINE);// 初始化 IRQ
}
STM32uCOSII外部中断事件系统运行过 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)