当前位置:   article > 正文

stm32中断GPIO讲解+代码_stm32 io口中断代码

stm32 io口中断代码
  • GPIO中断

    • 步骤

      • 初始化

        • 开启时钟//GPIO AFIO EXTI(默认打开所以不用管) NVIC(在内核一直打开的)
        • 初始化io
        • AFIO引脚选择//gpio.h文件中
        • EXTI初始化
        • VNVIC初始化

          • 1中断分组
          • VNIC初始化
            • 1

            • STM32的中断优先级值遵循以下规则:
              • 抢占优先级和子优先级的值越小,中断的优先级越高。
              • 抢占优先级相同的条件下,子优先级值越小,中断的优先级越高。
      • 编写中断函数

        • //中断函数名是固定的//可在启动文件中找到//中断类型_IRQHandlerD
          • 位置
        • 格式
        • FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);//检查指定的EXTI线路是否产生了中断或事件
        • void EXTI_ClearFlag(uint32_t EXTI_Line);//清除指定的EXTI线路上的中断或事件标志
        • ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);//检查指定的EXTI线路是否产生了中断
        • void EXTI_ClearITPendingBit(uint32_t EXTI_Line);//清除指定的EXTI线路上的中断挂起位

 中断文件

  1. #include "stm32f10x.h"
  2. void z_init(void){
  3. //时钟使能
  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  5. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  6. //io初始化
  7. GPIO_InitTypeDef iochu;
  8. iochu.GPIO_Mode=GPIO_Mode_IPU;//上拉输入模式
  9. iochu.GPIO_Pin=GPIO_Pin_2;
  10. iochu.GPIO_Speed=GPIO_Speed_50MHz;
  11. GPIO_Init(GPIOA,&iochu);
  12. //AFIO引脚选择//gpio.h
  13. GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource2);
  14. //EXTI初始化
  15. //初始化枚举//exti.h
  16. EXTI_InitTypeDef extichu;
  17. extichu.EXTI_Line=EXTI_Line2;//那一条中断线//第二条线
  18. extichu.EXTI_LineCmd=ENABLE;//启动或禁用//启动
  19. extichu.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式或事件模式//中断模式
  20. extichu.EXTI_Trigger=EXTI_Trigger_Falling;//触发方式//下降沿触发
  21. //初始化函数
  22. EXTI_Init(&extichu);
  23. //NVIC初始化//misc.h
  24. //中断分组//整个工程中只能分组一次即可,不可再次改变分组。
  25. //要确保分组统一
  26. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//分组
  27. //nvic枚举
  28. NVIC_InitTypeDef nvicchu;
  29. nvicchu.NVIC_IRQChannel=EXTI2_IRQn;//中断通道
  30. nvicchu.NVIC_IRQChannelCmd=ENABLE;//使能
  31. nvicchu.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级值
  32. nvicchu.NVIC_IRQChannelSubPriority=1;//响应优先级值
  33. //初始化
  34. NVIC_Init(&nvicchu);
  35. }
  36. void EXTI2_IRQHandler(void){//中断函数不用声明//exti.h下面的函数
  37. if(EXTI_GetITStatus(EXTI_Line2)==SET){//判断中断是否被设置
  38. EXTI_ClearITPendingBit(EXTI_Line2);//清除标志
  39. }
  40. }

 主文件

  1. #include "stm32f10x.h" // Device header
  2. #include "zd.h"
  3. int main(void)
  4. {
  5. z_init();
  6. while (1)
  7. {
  8. }
  9. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/973019
推荐阅读
相关标签
  

闽ICP备14008679号