zoukankan      html  css  js  c++  java
  • 嵌入式系统外部中断实验(按下按键,LED灯依次熄灭)

    #include "stm32f10x.h"
    #include <stdio.h>
    #include <String.h>

    void RCC_cfg(void);
    void GPIO_cfg(void);
    void Delay(uint32_t nCount);
    void NVIC_cfg(void);
    void EXTIX_Init(void);

    u8 cnt;

    int main(void)
    {
     cnt=0;
     RCC_cfg();
     GPIO_cfg();
     NVIC_cfg();
     EXTIX_Init();
     while(1){
      GPIO_SetBits(GPIOF,GPIO_Pin_6);
      GPIO_SetBits(GPIOF,GPIO_Pin_7);
      GPIO_SetBits(GPIOF,GPIO_Pin_8);
      GPIO_SetBits(GPIOF,GPIO_Pin_9);
      Delay(0x2fffff);
     }
    }

    void RCC_cfg(void)
    {
     RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);
    }

    void GPIO_cfg(void)
    {
     GPIO_InitTypeDef GPIO_InitStructure;
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
     GPIO_Init(GPIOF,&GPIO_InitStructure);
     
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
     GPIO_Init(GPIOG,&GPIO_InitStructure);
    }

    void Delay ( uint32_t nCount)
    {
     for(;nCount !=0;nCount--);
    }

    void NVIC_cfg(void)
    {
     NVIC_InitTypeDef NVIC_InitStructure;
     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
     
     NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
     NVIC_Init(&NVIC_InitStructure);
    }
    void EXTIX_Init(void)
    {
     
     EXTI_InitTypeDef EXTI_InitStructure;
     EXTI_ClearITPendingBit(EXTI_Line6);
     GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,GPIO_PinSource6);
     
     EXTI_InitStructure.EXTI_Line=EXTI_Line6;
     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
     EXTI_Init(&EXTI_InitStructure);
    }

    void EXTI9_5_IRQHandler(void)
    {
     Delay(1000);
     if(!(GPIOG->IDR & 0x0040))
     {
      switch(cnt)
       {case 0:
        GPIO_ResetBits(GPIOF,GPIO_Pin_6);
         Delay(0x2fffff);
         break;
        case 1:
          GPIO_ResetBits(GPIOF,GPIO_Pin_7);
         Delay(0x2fffff);
         break;
       case 2:
        GPIO_ResetBits(GPIOF,GPIO_Pin_8);
         Delay(0x2fffff);
         break;
       case 3:
        GPIO_ResetBits(GPIOF,GPIO_Pin_9);
         Delay(0x2fffff);
         break;
      }
     }
     cnt++;
     if(cnt==4)
      cnt=0;
     EXTI_ClearITPendingBit(EXTI_Line6);
    }

  • 相关阅读:
    杂记:Linux下gcc升级
    杂记:OSX下编译安装最新版RedisDesktopMmanager
    查漏补缺:Vector中去重
    Mac下使用VScode进行C/C++开发
    添砖加瓦:几种常见的数据摘要算法(MD5、CRC32、SHA1和SHA256)
    添砖加瓦:snappy无损压缩算法
    杂记:OSX 安装openssl
    码海拾遗:内存四区
    Luogu 4284 [SHOI2014]概率充电器
    Luogu 4473 [国家集训队]飞飞侠
  • 原文地址:https://www.cnblogs.com/lls1350767625/p/8024956.html
Copyright © 2011-2022 走看看