Stm32按键中断使LED灯闪烁

发布者:脑力舞者最新更新时间:2018-06-18 来源: eefocus关键字:Stm32  按键中断  LED灯闪烁 手机看文章 扫描二维码
随时随地手机看文章

/* 

*说明: 

*PA0:KEY1;PA1:KEY2; 

*PA2:LED1;PA3:LED2; 

*PA9:USART1_TX;PA10:USART1_RX 

*/  

#include "stm32f10x.h"    

#include "stm32f10x_rcc.h"    

#include "stm32f10x_gpio.h"    

#include "stm32f10x_crc.h"  

#include "stm32f10x_exti.h"  

#include "system_stm32f10x.h"   

#include "misc.h"  

  

void RCC_Configuration(void);    

void GPIO_Configuration(void);   

void EXTI_Configuration(void);   

void NVIC_Configuration(void);  

  

int main()  

{    

    RCC_Configuration();    

    GPIO_Configuration();  

    EXTI_Configuration();     

    NVIC_Configuration();  

      

    while(1);  

}  

void RCC_Configuration(void)      

{       

  SystemInit();  

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);       

}     

    

void GPIO_Configuration(void)      

{      

  GPIO_InitTypeDef GPIO_InitStructure;   

  //LED  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;   

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  

  GPIO_Init(GPIOA, &GPIO_InitStructure);    

    

  //KEY  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;   

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  

  GPIO_Init(GPIOA, &GPIO_InitStructure);   

}  

void EXTI_Configuration(void)//外部中断初始化配置  

{  

    EXTI_InitTypeDef EXTI_InitStructure;  

      

    EXTI_ClearITPendingBit(EXTI_Line0);  

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);   

      

    EXTI_InitStructure.EXTI_Line = EXTI_Line0;  

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;  

    EXTI_Init(&EXTI_InitStructure);  

}  

void NVIC_Configuration(void)//配置中断优先级  

{  

  NVIC_InitTypeDef NVIC_InitStructure;  

    

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  

    

  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;  

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  NVIC_Init(&NVIC_InitStructure);  

}  

stm32f10x_it.c源代码(因为用的是外部中断线0中断EXTI0_IRQn,所以直接修改stm32f10x_it.c里面的EXTI0_IRQHandler函数):



/*引入头文件*/  

#include "..\include\stm32f10x.h"   

#include "..\include\stm32f10x_it.h"  

#include "..\include\stm32f10x_exti.h"  

#include "..\include\stm32f10x_rcc.h"  

#include "..\include\stm32f10x_gpio.h"   

#include "..\include\misc.h"  

......  

void delay_ms(u16 time)         

{        

  u16 i=0;        

  while(time--)         

  {        

    i=12000;        

    while(i--);        

  }        

}  

void EXTI0_IRQHandler(void)  

{      

  

  if(EXTI_GetITStatus(EXTI_Line0)==SET)  

  {     

     GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)(Bit_SET-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)));  

     GPIO_WriteBit(GPIOA,GPIO_Pin_3,(BitAction)(Bit_SET-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_3)));            

  }   

  delay_ms(100);//下降沿销抖  

    

  while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)!=Bit_SET);  

    

  delay_ms(100);//上升沿销抖  

    

  while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)!=Bit_SET);  

    

  EXTI_ClearITPendingBit(EXTI_Line0);  

}  

不要忘记了stm32f10x_it.c里面所有方法的声明头文件stm32f10x_it.h:



#ifndef __STM32F10x_IT_H  

#define __STM32F10x_IT_H  

  

/* Includes ------------------------------------------------------------------*/  

/* Exported types ------------------------------------------------------------*/  

/* Exported constants --------------------------------------------------------*/  

/* Exported macro ------------------------------------------------------------*/  

/* Exported functions ------------------------------------------------------- */    

void NMIException(void);  

void HardFaultException(void);  

void MemManageException(void);  

void BusFaultException(void);  

void UsageFaultException(void);  

void DebugMonitor(void);  

void SVCHandler(void);  

void PendSVC(void);  

void SysTickHandler(void);  

void WWDG_IRQHandler(void);  

void PVD_IRQHandler(void);  

void TAMPER_IRQHandler(void);  

void RTC_IRQHandler(void);  

void FLASH_IRQHandler(void);  

void RCC_IRQHandler(void);  

void EXTI0_IRQHandler(void);  

void EXTI1_IRQHandler(void);  

void EXTI2_IRQHandler(void);  

void EXTI3_IRQHandler(void);  

void EXTI4_IRQHandler(void);  

void DMA1_Channel1_IRQHandler(void);  

void DMA1_Channel2_IRQHandler(void);  

void DMA1_Channel3_IRQHandler(void);  

void DMA1_Channel4_IRQHandler(void);  

void DMA1_Channel5_IRQHandler(void);  

void DMA1_Channel6_IRQHandler(void);  

void DMA1_Channel7_IRQHandler(void);  

void ADC1_2_IRQHandler(void);  

void USB_HP_CAN_TX_IRQHandler(void);  

void USB_LP_CAN_RX0_IRQHandler(void);  

void CAN_RX1_IRQHandler(void);  

void CAN_SCE_IRQHandler(void);  

void EXTI9_5_IRQHandler(void);  

void TIM1_BRK_IRQHandler(void);  

void TIM1_UP_IRQHandler(void);  

void TIM1_TRG_COM_IRQHandler(void);  

void TIM1_CC_IRQHandler(void);  

void TIM2_IRQHandler(void);  

void TIM3_IRQHandler(void);  

void TIM4_IRQHandler(void);  

void I2C1_EV_IRQHandler(void);  

void I2C1_ER_IRQHandler(void);  

void I2C2_EV_IRQHandler(void);  

void I2C2_ER_IRQHandler(void);  

void SPI1_IRQHandler(void);  

void SPI2_IRQHandler(void);  

void USART1_IRQHandler(void);  

void USART2_IRQHandler(void);  

void USART3_IRQHandler(void);  

void EXTI15_10_IRQHandler(void);  

void RTCAlarm_IRQHandler(void);  

void USBWakeUp_IRQHandler(void);  

void TIM8_BRK_IRQHandler(void);  

void TIM8_UP_IRQHandler(void);  

void TIM8_TRG_COM_IRQHandler(void);  

void TIM8_CC_IRQHandler(void);  

void ADC3_IRQHandler(void);  

void FSMC_IRQHandler(void);  

void SDIO_IRQHandler(void);  

void TIM5_IRQHandler(void);  

void SPI3_IRQHandler(void);  

void UART4_IRQHandler(void);  

void UART5_IRQHandler(void);  

void TIM6_IRQHandler(void);  

void TIM7_IRQHandler(void);  

void DMA2_Channel1_IRQHandler(void);  

void DMA2_Channel2_IRQHandler(void);  

void DMA2_Channel3_IRQHandler(void);  

void DMA2_Channel4_5_IRQHandler(void);  

                       

#endif /* __STM32F10x_IT_H */  

  

/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/  


关键字:Stm32  按键中断  LED灯闪烁 引用地址:Stm32按键中断使LED灯闪烁

上一篇:STM32的LED闪烁实验
下一篇:STM32实例之LED灯闪烁控制以及相关注意事项

推荐阅读最新更新时间:2024-03-16 16:05

如何优雅地解决STM32的Flash写保护的问题
本文介绍了如何解决 STM32 芯片 Flash 写保护导致无法下载程序,无法在线调试的问题;如果您遇到相同的问题,希望本文可以带来一些帮助; 1 FLASH 的写保护 如果对 Flash 设置了写保护,那就无法对 Flash 进行编程和擦除。 在开发 STM32 的时候,如果出现这种情况,通常仿真器都支持对 Flash 进行解锁,像 jlink,stlink 等仿真器都支持这个功能。 2 错误提示 在使用 MDK 进行调试的时候,出现报错 ==Flash Timeout.Reset Target and try it again==,具体如下图所示; 折腾了一番之后,并没有解决问题,因为使用的仿真器是 stlink,因此
[单片机]
STM32 USART串口初始化
1、初始化串口时钟以及串口IO端口时钟: 使用RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); 备注:为什么要使能IO口时钟? 参照用户手册 P165-P166 使用串口这个外设的时候需要将串口的IO属性配置为图示; 使用串口是否需要打开复用时钟,请见http://blog.csdn.net/u012411027/article/details/44217313,看到这位的解释才恍然大悟的。 2、串口参数设置(波特率、数据长度、停止位、校验位、发送接收模式、硬件控制流) 具体初始化及初始化方式如图:
[单片机]
移植STM32固件库到IAR
作为嵌入式软件工程师应该有良好的习惯,建project应该层次清晰。 1. 建立一个文件夹用于存放工程,命名为GPIO 2. 打开GPIO文件夹,创建一个子文件夹project(用于存放与工程相关的文件),再创建一个readme.txt(用于对工程的说明,比如说硬件环境和功能) 3. 将ST公司提供的固件库:FWLb中library拷贝到GPIO目录中 4. 打开project,再创建一个文件夹EWARM(存放和开发环境密切相关的内容) 5. 打开STM32固件库:STM32F10xFWLib\FWLib\examples\GPIO\Example1(自己到ST官网上下载) 6. 复制
[单片机]
移植<font color='red'>STM32</font>固件库到IAR
stm32阶段总结录
一、C语言之预处理 预处理有三种:宏定义、条件编译、文件包含。 1.1、宏定义 #define EXT extern // 用EXT代替extern关键字 1.2、文件包含 #include “stm32f10x.h” 1.3、条件编译 防止同一个头文件被不同的文件多次包含,编译时所有文件编译成一个可执行文件有大量命名冲突。 #ifndef 标识符 //if not defined #define 标识符 代码段落 #endif #ifndef _public_h #define _public_h #include public.h #endif #空指令,无任何效果 #include包含一个源代码文
[单片机]
<font color='red'>stm32</font>阶段总结录
STM32中 一些类型的别名
typedef signed char int8_t; typedef signed short int int16_t; typedef signed int int32_t; typedef signed __INT64 int64_t; /* exact-width unsigned integer types */ typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef int uint32_t; typedef unsigned __INT64 uint64_t;
[单片机]
STM32_DAC输出电压
今天讲解“STM32F103 DAC输出电压”功能。 今天提供并讲解的软件工程,基于软件工程“A0.0.0(STM32F10x_TIM延时)”修改而来。若不知道如何而来,请关注微信公众号“EmbeddDeveloper”获取更多信息。 本着免费分享的原则,将讲解的工程源代码分享给大家,还望看到的朋友关注和推广一下微信公众号,增加一下人气。 每天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘。 今天的软件工程下载地址(360云盘): https://yunpan.cn/cPU3YIHzcu6Eu 访问密码 11f0 STM32F10x的资料可以在我360云盘下载: https:/
[单片机]
STM32_DAC输出电压
单片机入门学习八 STM32单片机学习五 时钟系统
单片机学习除了了解该篇 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础 中的基础外,我们还需要有时钟的概念,本篇将记录 stm32的时钟系统。 1、STM32时钟介绍 下面这幅图时stm32的时钟系统框图 1)蓝底框表示 时钟源,即: ①HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③LSI是低速内部时钟,RC振荡器,频率为40kHz。(WDG看门狗 使用该时钟源) ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。(RTC实时时钟 使用该时钟源) ⑤PLL为锁相环
[单片机]
单片机入门学习八 <font color='red'>STM32</font>单片机学习五 时钟系统
STM32 ADC 模数转换的简单实现
ADC 通常要与DMA一起使用 这里只是简单的用库配置ADC 不断扫描来实现ADC的应用。 首先配置GPIO与ADC的时钟: ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructu
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved