《嵌入式系统设计(基于STM32F429)》
第7章课后题参考答案
1.外部中断的中断请求信号可以是控制器外部产生由GPIO引脚引入的,也可以是由控制器内部一些片上外设产生的。这一说法是否正确?___正确_____。
2.每个GPIO引脚都可以作为外部中断信号输入引脚,GPIO引脚编号相同的映射到同一个EXTI线,那么GPIOA的0号引脚映射到EXTI学做美甲线___0_____,GPIOD的0号引脚映射到cutsceneEXTI线_____0___,GPIOC的5我的音乐英文怎么写号引脚映射到EXTI线_____5___,GPIOG的10号引脚映射到EXTI线____10____。
3.外部中断信号输入的触发信号形式可以是__上升沿触发_、_下降沿触发_、_边沿触发_、。
4.每个外部中断在中断向量表中,是否都独立占用一个位置?__不是__
5.外部中断___5~9_____共用一个中断向量和外部中断__10~15__共用一个中断向量。
6.外部中断的中断0在库函数启动文件中定义的默认中断函数名是__EXTI0_IRQHandlerdrumkit__。
7.函数SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0)有什么功能?
答:
连接GPIOA的0号引脚 到 EXTI0
8.函数void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)有什么功能?
答:
初始化外部中断功能。
9.应用外部中断,需要先使能GPIO端口的时钟和___ SYSCFG___时钟。
10.试述初始化外部中断的步骤。
答:
(1)使能用到GPIO时钟和SYSCFG时钟sigma aldrich。
(2)初始化相应GPIO的引脚为输入。
(3)设置GPIO引脚与EXTI线的映射关系。
(4)初始化工作类型、设置触发条件、使能等等。
(5)配置中断分组(NVIC),并初始化相应中断通道的优先级及使能/禁止。
(6)编写中断服务函数。
(7)编写中断服务程序处理内容。
11.初始化外部中断1:将GPIOA的1号引脚作为输入引脚,中断模式,上升沿触发,中断优先级组为3组,抢占优先级为3,响应优先级为1,并使能中断。
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA ,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource1);
EXTI_InitStructure.EXTI_Line = EXTI_Line1;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
12.外部中断被挂起后,不能硬件清除,需要在相应的中断服务程序中将挂起标志清除,使用的函数是__void EXTI_ClearITPendingBit(uint32_t EXTI_Line)______。
13.请说明中断服务程序的响应过程及中断服务程序的函数名怎么更改。
答:
(1)处理器在当前堆栈上把程序状态寄存器、程序计数寄存器、链接寄存器、R12、R3~R0八个寄存器自动依次入栈。
(2)读取向量表(如果是复位中断,则更新堆栈指针的值)。
(3)根据向量表更新程序计数寄存器的值。
线上授课平台(4)加载新程序计数寄存器处的指令(步骤(2)~步骤(4)与步骤(1)同时进行)。
(5)更新链接寄存器为EXC_RETURN(EXC_RETURN表示退出异常后返回的模式及使用的堆栈)。
中断服务程序的函数名更改:
(1)直接在启动文件中修改 中断服务程序的函数
(2)在C文件中使用宏定义方法实现
例如:
#define KEY_IRQHandler EXTI0_IRQHandler
14.根据图7-4,编写程序以完成外部中断初始化,中断输入引脚为PE5,上升沿检测方式。
图7-4 题14电路图
答:
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
/
/-------------------第1步--------------------
/*开启按键GPIO口的时钟*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIO ,ENABLE);
/* 使能 SYSCFG 时钟 ,使用GPIO外部中断时必须使能SYSCFG时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
//-------------------第2步--------------------
/* 选择按键的引脚 */ powers
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
/* 设置引脚为输入模式 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
/* 设置引脚不上拉也不下拉 */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
/* 使用上面的结构体初始化按键 */
GPIO_Init(GPIOE, &GPIO_InitStructure);
//-------------------第3步--------------------
/* 连接 EXTI 中断源 到GPIOE 5引脚 */
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource5);
//-------------------第4步--------------------
/* 选择 EXTI 中断源 */
EXTI_InitStructure.EXTI_Line = EXTI_Line5;
/* 中断模式 */
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
/* 上降沿触发 */
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
/* 使能中断/事件线 */
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
all round//-------------------第5步--------------------
/* 配置 NVIC */
/* 配置NVIC为优先级组1,整个程序处于同一组 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* 配置中断源:按键1 */
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
/* 配置抢占优先级:1 */
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 配置子优先级:1 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/* 使能中断通道 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
15.编写14题的外部中断的服务程序,完成LED灯(PB2)的开关控制。
答:
合格证英文
约数是什么void EXTI9_5_IRQHandler (void)
{
//确保是否产生了EXTI Line中断
if(EXTI_GetITStatus(EXTI_Line5) != RESET)
{
//清除中断标志位
EXTI_ClearITPendingBit(EXTI_Line5);
// LED 状态转换
GPIO_ToggleBits(GPIOB, GPIO_Pin_2);
}
}