本工程板级支持包文件适用于野火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. 系统定时器
推荐阅读
史海拾趣
随着技术的不断进步,Altonics公司始终保持着对创新的热情。公司加大研发投入,引进高端技术人才,不断推出具有创新性和竞争力的新产品。其中,公司自主研发的一款智能传感器,凭借其高精度、高稳定性的特点,迅速占领市场份额,成为工业自动化领域的明星产品。
为了进一步扩大市场份额,API Delevan公司积极寻求与国内外合作伙伴的合作,共同开拓市场。通过参加国际电子展会、举办技术研讨会等方式,公司不断提升品牌知名度和影响力。同时,API Delevan还注重客户关系管理,为客户提供优质的产品和服务,赢得了客户的信任和忠诚。
DLG Hanbit公司成立于20世纪90年代初,当时正值电子行业的快速发展时期。公司创始人李先生是一位资深的电子工程师,他看到了半导体行业的巨大潜力,并决定成立一家专注于半导体设计和制造的公司。初创时期,公司面临着资金紧张、技术落后等重重困难,但李先生和团队坚持不懈,通过引进先进技术、加大研发投入,成功开发出了一款具有竞争力的半导体产品,为公司的发展奠定了基础。
在安谱隆的发展历程中,资本市场对其一直保持着高度的关注。然而,其“安家”之路却并不平坦。2017年,奥瑞德曾有意收购安谱隆,但由于资金问题,这桩收购最终未能成行。2018年,旋极信息也计划收购安谱隆,但同样未能成功。这些波折反映了资本市场对安谱隆价值的认可,但也暴露出安谱隆在寻找合适买家方面所面临的挑战。
在全球环保意识日益增强的今天,DBM REFLEX积极响应可持续发展的号召。公司不仅在生产过程中注重环保和节能,还积极推广绿色产品和技术。同时,DBM REFLEX还积极参与社会公益事业,通过捐款捐物等方式回馈社会。这种对环保和社会责任的关注,使DBM REFLEX在电子行业树立了良好的企业形象。
作为一家有社会责任感的企业,上海超致始终关注环境保护和可持续发展。公司积极推广绿色生产技术和资源循环利用方案,减少生产过程中的能源消耗和废弃物排放。同时,上海超致还积极参与社会公益活动,为社区和环境贡献自己的力量。这种对社会责任的关注和担当使得上海超致在电子行业中树立了良好的形象。
早期的EDA企业有1000多家,后来发展到10家左右,其中Cadence,Mentor,Zuken主要是高端产品,他们的软件要求在工作站上运行,操作系统都是unix,而且价格昂贵。而protel,powerPCB他们主要面向低端用户,对计算机的配置要求不高,一般在windows下运行。 ...… 查看全部问答∨ |
|
按下16个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,第二个显示4... 我写了第3行的检测,就是说:按键按下的话 ,会显示:16 25 36 49: 但是我在实验板上运行的时候,高位的数字只会闪一下 ...… 查看全部问答∨ |
|
Hp2490如何打开无线网卡,连接指定SSID,最好用C#完成,谢谢 Hp2490如何打开无线网卡,连接指定SSID,最好用C#完成,例如,我们办公室有N个无线网络,我想通过程序控制连接其中指定一个网络。… 查看全部问答∨ |
|
今天看了下点阵的教程,自己跑去搞了下 ,结果弄是弄出来,可就是每次图像移动前都会红一团 这是电路图还有代码,大大帮忙看看#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbi ...… 查看全部问答∨ |