本工程板级支持包文件适用于野火stm32f429 开发板。
STM32 的中断主要涉及两个部分,NVIC 和EXTI
NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能;外部中断/事件控制器(EXTI)可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。
EXTI 可分为两大功能:产生中断 和 产生事件
当其产生中断时,其中断线路将输入信号输入到NVIC,进一步运行中断服务函数,实现功能(其输出最终被映射到NVIC的相应通道。);而当其产生事件时,则是传输一个脉冲信号给其他外设使用
EXTI 是在APB2 总线上的
EXTI0 至 EXTI15 用于 GPIO,通过编程控制可以实现任意一个 GPIO 作为 EXTI的输
入源。
编程要点
配置NVIC
a. 设置优先级组
b. 配置 NVIC_InitStructure
c. 使能 NVIC
配置EXTI
a. 开启 EXTI 时钟
b. 连接 EXTI 到中断源
c. 配置 EXTI 初始化结构体
d. 使能 EXTI
编写EXTI 中断服务函数
bsp_exti.c
NVIC_Init() 函数在misc.c 中
/**
******************************************************************************
* @file bsp_exti.c
* @author Waao
* @version V1.0.0
* @date 21-Dec-2018
* @brief This file contains some board support package's functions for the configuration of the NVIC.
*
******************************************************************************
* @attention
*
* None
*
******************************************************************************
*/
#include #include #include /** * @brief Configure the NVIC * @param None * @retval None */ static void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; //Configure the NVIC to prioritygroup1 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //Configure the preemption priority to 1 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //Configure the subpriority to 1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //Enable the interrupt channel NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //Configure the interrupt channel NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ; NVIC_Init(&NVIC_InitStructure); } /** * @brief Configure the EXTI * @param None * @retval None */ void EXTI_Key_Config(void) { EXTI_InitTypeDef EXTI_InitStructure; KEY_GPIO_Config(); LED_GPIO_Config(); //Enable the clock of the SYSCFG(must do that when use the GPIO external interrupt) RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); NVIC_Configuration(); //Connect the exti interrupt source to key1 pin SYSCFG_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE); //Choice the exti interrupt source EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE; //Choice the mode EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //Choice the trigger type EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //Enable EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //Connect the exti interrupt source to key1 pin SYSCFG_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE); EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } bsp_exti.h /** ****************************************************************************** * @file bsp_exti.h * @author Waao * @version V1.0.0 * @date 21-Dec-2018 * @brief This file contains some board support package's definition for the exti. * ****************************************************************************** * @attention * * None * ****************************************************************************** */ #ifndef __EXTI_H_ #define __EXTI_H_ #include /*******************************************************/ #define KEY1_INT_GPIO_PORT GPIOA #define KEY1_INT_GPIO_CLK RCC_AHB1Periph_GPIOA #define KEY1_INT_GPIO_PIN GPIO_Pin_0 #define KEY1_INT_EXTI_PORTSOURCE EXTI_PortSourceGPIOA #define KEY1_INT_EXTI_PINSOURCE EXTI_PinSource0 //The EXTI_Line number must be consistent with the GPIO_Pin number #define KEY1_INT_EXTI_LINE EXTI_Line0 #define KEY1_INT_EXTI_IRQ EXTI0_IRQn #define KEY1_IRQHandler EXTI0_IRQHandler #define KEY2_INT_GPIO_PORT GPIOC #define KEY2_INT_GPIO_CLK RCC_AHB1Periph_GPIOC #define KEY2_INT_GPIO_PIN GPIO_Pin_13 #define KEY2_INT_EXTI_PORTSOURCE EXTI_PortSourceGPIOC #define KEY2_INT_EXTI_PINSOURCE EXTI_PinSource13 #define KEY2_INT_EXTI_LINE EXTI_Line13 #define KEY2_INT_EXTI_IRQ EXTI15_10_IRQn #define KEY2_IRQHandler EXTI15_10_IRQHandler /*******************************************************/ static void NVIC_Configuration(void); void EXTI_Key_Config(void); #endif 中断线须与端口号一致 stm32f4xx_it.c 部分代码,其余部分不需修改: /******************************************************************************/ /* STM32F4xx Peripherals Interrupt Handlers */ /* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ /* available peripheral interrupt handler's name please refer to the startup */ /* file (startup_stm32f429_439xx.s). */ /******************************************************************************/ /** * @brief Turn the status of the led2 when we trigger the exti0 * @param None * @retval None */ void KEY1_IRQHandler(void) { LED2_TOGGLE; EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE); } /** * @brief Turn the status of the led3 when we trigger the exti13 * @param None * @retval None */ void KEY2_IRQHandler(void) { LED3_TOGGLE; EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE); } 中断服务函数在stm32f4xx_it.c 中进行构建 中断服务函数的名称必须与启动文件当中给出的一致 中断服务函数中任务执行完必须清除中断标志
上一篇:STM32F429 >> 6. RCC-使用HSE, HSI 配置时钟
下一篇:STM32F429 >> 8. 系统定时器
推荐阅读
史海拾趣
在Elprotronic Inc.公司创立的初期,面临着电子元器件市场竞争激烈、技术更新迅速的挑战。公司创始人凭借对电子元器件市场的深刻理解和敏锐的洞察力,决定专注于提供高质量和可靠的嵌入式MCU闪存编程解决方案。他们深知,在电子行业,产品质量和技术创新是企业生存和发展的关键。因此,Elprotronic Inc.从一开始就注重技术研发和产品质量控制,逐渐在市场上树立了良好的口碑。
随着公司业务的不断发展壮大,Elprotronic Inc.开始实施国际化战略。他们积极开拓海外市场,与全球众多知名电子厂商建立了长期稳定的合作关系。为了更好地服务海外客户,公司还成立了专业的海外销售和技术支持团队,提供及时、高效的服务。通过国际化战略的实施,Elprotronic Inc.不仅拓展了业务范围,也提升了公司的国际竞争力。
Chiplus深知企业管理对于公司发展的重要性。因此,公司建立了一套完善的管理体系,注重人才培养和团队建设。公司定期举办内部培训和技术交流活动,提升员工的专业技能和综合素质。同时,Chiplus还积极引进外部优秀人才,为公司的持续发展注入新的活力。
品质是Comtech AHA Corp的生命线。公司始终坚持严格的品质管理,从原材料采购到生产流程,再到成品检验,每一个环节都严格把关。正是这种对品质的执着追求,使得Comtech AHA Corp的产品在市场上赢得了良好的口碑。许多知名企业纷纷与Comtech AHA Corp建立长期合作关系,进一步推动了公司的发展。
品质是Comtech AHA Corp的生命线。公司始终坚持严格的品质管理,从原材料采购到生产流程,再到成品检验,每一个环节都严格把关。正是这种对品质的执着追求,使得Comtech AHA Corp的产品在市场上赢得了良好的口碑。许多知名企业纷纷与Comtech AHA Corp建立长期合作关系,进一步推动了公司的发展。
大家好,想做一个设备用单片机和多个条码扫描器通讯,但是单片机和条码扫描器只有一个串口(232)不能组成一对多的网络,所以想问一下,能不能用RS232toRS485转换器转换以后将单片机与多条码扫描器组成一个RS485网络. … 查看全部问答∨ |
|
中国嵌入式系统产业联盟(简称:中嵌联盟)是由从事嵌入式系统研发生产、教育培训、咨询服务等相关业务的企事业单位自发成立的非独立法人社团组织。中嵌联盟以推动联盟企业迅速扩大规模,加快产业发展为目标,从而促进我国嵌入式系统 ...… 查看全部问答∨ |
|
看完卲贝贝ucos经典教程后 想实践一下 但是用bc4.5 很不好用 第一没有用过 第二 很不方便 功能少 没什么快捷键 所以想问问各位兄弟 vc6.0或者borland c++ builder 是否一样可以编译连接?? 有什么好开发环境介绍一下??… 查看全部问答∨ |
|
用心讨教问题,看了不要路过呀,进来看看#include <reg52.h>#define uchar unsigned char#define uint unsigned intuchar segment[]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x89,0xc7}; //数码管的段选uchar display_ ...… 查看全部问答∨ |
|
一、 视频编码技术的发展历程 视频编码技术基本是由ISO/IEC制定的MPEG-x和ITU-T制定的H.26x两大系列视频编码国际标准的推出。从H.261视频编码建议,到H.262/3、MPEG-1/2/4等都有一个共同的不断追求的目标,即在尽可能低的码率(或存储容量)下 ...… 查看全部问答∨ |