微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32 uCOS_II 实践 之 外部中断事件 及 系统运行过程

STM32 uCOS_II 实践 之 外部中断事件 及 系统运行过程

时间:12-03 来源:互联网 点击:
在进行uCOSII的程序之前先来复习下,裸机平台下stm32的外部中断的操作。

大概可以分作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
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top