首页 > 其他分享 >STM32中断

STM32中断

时间:2022-12-21 21:31:08浏览次数:67  
标签:NVIC Pin 中断 STM32 InitStruct GPIO EXTI

void EXTI_INIT(void)

{

GPIO_InitTypeDef GPIO_InitStruct;  //GPIO结构体名称

EXTI_InitTypeDef EXTI_InitStruct; //EXTID中断结构体名称

NVIC_InitTypeDef NVIC_InitStruct; //NVIC结构体名称

//GPIO时钟开启

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

 //AFIO时钟开启

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

//GPIO初始化

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4;

GPIO_Init(GPIOA, &GPIO_InitStruct);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_Pin_4);//GPIO中断源选择

//nvic组选择 组包含抢站优先级 子优先级的配置

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//NVIC配置

NVIC_InitStruct.NVIC_IRQChannel= EXTI4_IRQn;  //中断选择  5-9和10-15共用函数和此参数 若需要判断5-9和10-15那个产生了中断,可根据检测中断的LINE进行判断

NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;

NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;

NVIC_Init(&NVIC_InitStruct);

//中断配置

 EXTI_InitStruct.EXTI_Line=EXTI_Line4;   //和PA4=EXTI_Line4想应

EXTI_InitStruct.EXTI_LineCmd=ENABLE;

EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;//中断OR事件

EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;//沿检测,上,下,上/下

EXTI_Init(&EXTI_InitStruct);

}

中断服务函数在启动文件中

void EXTI4_IRQHandler(void)

{

 if(EXTI_GetITStatus(EXTI_Line4)==1)//检测是否产生中断

 {

 

  GPIO_ResetBits(GPIOB,GPIO_Pin_0);

  systick_s(1);

  GPIO_SetBits(GPIOB,GPIO_Pin_0);

  systick_s(1);

 }

EXTI_ClearITPendingBit(EXTI_Line4);//清除中断标志位

}


备注;5-9和10-15共用函数和此参数 若需要判断5-9和10-15那个产生了中断,可根据检测中断的LINE进行判断

如PA0,PB0.PC0,PD0共用LINE,则需要使用GPIO的READINPUTBIT(按钮输入函数)来检测是那个产生的中断。

标签:NVIC,Pin,中断,STM32,InitStruct,GPIO,EXTI
From: https://blog.51cto.com/u_15919473/5960159

相关文章

  • 关于STM32CAN通信中过滤器两种模式的配置
    一、关于问题的阐述:最近在完善vesc的CAN通信相关代码,在配置过滤器时碰到了问题。1.1 对过滤器的两种模式理解不全面1.1.1关于过滤器的掩码模式。当时由于......
  • STM32 SYSTICK定时
    SYSTICK定时寄存器CTRL  第16位  countflag    计时完成标志位,1为计时完成,第2位  CLKSOURCE  时钟选择第1位  TICKINT    SYSTICK定时器中断使......
  • 正点原子STM32-串口协议学习笔记
    bit15bit14bit13~0接收完成标志接收到0x0d接收到的有效字节数过程:接收abcd然后/n最后立结束标志位为1对数组USART2_RX_BUF[]处理时,发现数组不......
  • STM32F103使用FSMC对接正点原子3.5寸TFTLCD屏幕
    fsmc的使用算是32里面有点绕的一个知识点,但是想明白了其实也没啥了。  首先我先放32个0在这儿:0000  0000  0000  0000  0000  0000  0000  0000  ......
  • STM32MP157开发板调试笔记
    作者:树哥邮箱:[email protected]一、前言​最近在ODYSSEY-STM32MP157C板子上移植arm-trusted-firmware、u-boot以及linux(其实这个开发板官方是有提供完整的......
  • 深入理解【缺页中断】及FIFO、LRU、OPT这三种置换算法
    缺页中断(英语:Pagefault,又名硬错误、硬中断、分页错误、寻页缺失、缺页中断、页故障等)指的是当软件试图访问已映射在​​虚拟​​​​地址空间​​​中,但是目前并未被加载在......
  • linux设备树实现多个中断父(interrupt-parent)节点
    方法一: interrupts-extended: 指定中断和父中断的另一种形式,允许多个父中断。这优先于'interrupts'和'interrupt-parent'。#interrupt-cells=<2>;interrupts-ext......
  • (转载)Linux C 中断言assert()使用简介
    assert()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE(0),程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句,它的作......
  • STM32时钟配置笔记
    时钟配置获取当前时钟源及总线频率RCC_ClocksTypeDefRCC_CLK;//写在main()的最前面,定义要在赋值前面RCC_GetClocksFreq(&RCC_CLK);//Getchipfrequenciesprintf("Sys......
  • 从0到1学习FreeRTOS:FreeRTOS 内核应用开发:(一)移植FreeRTOS到STM32第一部分
    一、 STM32的裸机工程模板:相信学FreeRTOS的同学一定学过stm32,所以可以用自己的工程作为模板即可。或者去火哥论坛下一份模板程序。二、下载FreeRTOSV9.0.0源码:获取 Fr......