zoukankan      html  css  js  c++  java
  • STM32——外部中断

    0.STM32F103上测试


    1.

      GPIO_Config()对引脚设置

      EXTI_Config()外部中断设置

      NVIC_Config()中断优先级设置


    2.代码

    #include <stm32f10x.h>
    
    void GPIO_Config(void);
    void EXTI_Config(void);
    void NVIC_Config(void);int main(void) { GPIO_Config(); NVIC_Config(); EXTI_Config(); while(1); } void GPIO_Config(void) { /*定义一个GPIO_InitTypeDef类型的结构体,本类型在stm32f10x_gpio.h中定义*/ GPIO_InitTypeDef GPIO_InitStructure; /*使能GPIOC和GPIOD时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG|RCC_APB2Periph_GPIOD, ENABLE); /*配置PC9管教作为推挽输出*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOG, &GPIO_InitStructure); /*配置PD3作为浮空输入,为外部中断做准备*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); } void EXTI_Config(void) { /*定义一个EXTI_InitTypeDef类型的结构体,该类型在stm32f10x_exti.h中定义*/ EXTI_InitTypeDef EXTI_InitStructure; /*使能AFIO时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); /*配置PD3管教作为EXTI线3*/ GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource3); /*在EXTI中配置EXTI线3为中断模式,下降沿有效,并使能该配置*/ EXTI_InitStructure.EXTI_Line = EXTI_Line3; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); } void NVIC_Config(void) { /*定义一个NVIC_InitTypeDef类型的结构体,该类型在misc.h中定义*/ NVIC_InitTypeDef NVIC_InitStructure; /*在NVIC中配置中断通道为EXTI3,抢占优先级为7,从优先级为7,并使能该中断*/ NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x07; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x07; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /*声明变量LED*/ uint8_t led = 1; /*EXTI3中断服务函数*/ void EXTI3_IRQHandler(void) { /*检测EXTI3是否有效*/ if(EXTI_GetITStatus(EXTI_Line3) == SET) { /*状态翻转*/ led = ~led; /*如果等于1则PC9置位,否则清零*/ if(led == 1) { GPIO_SetBits(GPIOG, GPIO_Pin_14); } else { GPIO_ResetBits(GPIOG, GPIO_Pin_14); } /*清除EXTI3的悬起标志位*/ EXTI_ClearITPendingBit(EXTI_Line3); } }
  • 相关阅读:
    如何减少网页首屏加载压力和时间
    如何解决网站因图片过大加载慢的问题?
    研究首屏时间?你先要知道这几点细节
    Nginx配置location总结及rewrite规则写法
    Nginx配置文件(nginx.conf)配置详解(2)
    Nginx配置文件nginx.conf中文详解
    Linux 命令 创建文件
    【TensorFlow-windows】(五) CNN(卷积神经网络)对cifar10的识别
    【TensorFlow-windows】(四) CNN(卷积神经网络)进行手写数字识别(mnist)
    【TensorFlow-windows】(三) 多层感知器进行手写数字识别(mnist)
  • 原文地址:https://www.cnblogs.com/maplesnow/p/5380618.html
Copyright © 2011-2022 走看看