做学历提升的能在哪个网站上宣传上海html5网站制作公司
2026/1/10 5:36:02 网站建设 项目流程
做学历提升的能在哪个网站上宣传,上海html5网站制作公司,专门做二手房车的网站,wordpress如何使用一个的模板stm32基础学习——外部中断的使用 一、前言二、准备工作三、编写代码3.1用查询方式实现LED开关3.2用中断方式实现LED开关 四、结束语 所有可用资源可在我的gitee仓库查找#xff0c;点击即可前往。 一、前言 本篇文章继续介绍stm32的一些基本使用#xff0c;文章主要是介绍外…stm32基础学习——外部中断的使用一、前言二、准备工作三、编写代码3.1用查询方式实现LED开关3.2用中断方式实现LED开关四、结束语所有可用资源可在我的gitee仓库查找点击即可前往。一、前言本篇文章继续介绍stm32的一些基本使用文章主要是介绍外部中断的使用同样以按键控制LED灯为例之前我用查询方式来实现的这篇文章尝试用中断的方式实现废话不多说咱们开始。二、准备工作硬件stm32F103C8T6开发板ST-LINK V2下载器一个3~5V的LED灯发光二极管一个四引脚按键一个杜邦线若干面包板软件Keil 5没安装可以点击进入我的另一篇博客有详细下载及配置教程其他需要自行下载点击前往下载template文件即可stm32工程模板由于新建模板比较麻烦初学还是找个工程模板吧方便点电路图三、编写代码为了方便对比我这里先给出用查询方式实现LED灯开关的代码对比可以发现在查询方式中Turn_LED函数是写在while循环里面的而在中断方式里是写在中断函数里面的。3.1用查询方式实现LED开关#includestm32f10x.h#includedelay.huint8_tflag10;//表示是否按下的标志位uint8_tis_led_turn0;//LED灯状态标志位默认为关voidTrun_LED(void);//开灯关灯voidTrun_LED(void){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)0){flag11;//表示按下Delay(50);if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)1flag11){// 取反状态如按下前为关则置为开反之亦然is_led_turn!is_led_turn;GPIO_WriteBit(GPIOB,GPIO_Pin_10,is_led_turn1?Bit_SET:Bit_RESET);flag10;// 重置}}}intmain(void){//按键引脚初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_PinGPIO_Pin_14;GPIO_InitStruct.GPIO_ModeGPIO_Mode_IPU;//设置为输入上拉模式GPIO_InitStruct.GPIO_SpeedGPIO_Speed_2MHz;GPIO_Init(GPIOB,GPIO_InitStruct);//初始化连接LED的引脚GPIO_InitStruct.GPIO_PinGPIO_Pin_10;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_PP;//设置为输出推挽模式GPIO_ResetBits(GPIOB,GPIO_Pin_10);GPIO_Init(GPIOB,GPIO_InitStruct);while(1){Trun_LED();}}上面就是用查询方式实现的当个按键开关控制LED也挺丝滑的哈。3.2用中断方式实现LED开关在stm32中使用中断我感觉还是有点麻烦大概就以下的步骤开启时钟 - 配置GPIO和AFIO - 配置EXTI - 配置NVIC - 配置中断函数大概就这些了。#includestm32f10x.h#includedelay.huint8_tis_led_turn0;//LED灯状态标志位默认为关voidTurn_LED(void);//开灯关灯voidKey_Init(void);//初始化中断voidEXTI0_IRQHandler(void);//中断函数voidKey_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//配置AFIOGPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);//配置EXTIEXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_LineEXTI_Line14;EXTI_InitStructure.EXTI_LineCmdENABLE;EXTI_InitStructure.EXTI_ModeEXTI_Mode_Interrupt;//中断模式EXTI_InitStructure.EXTI_TriggerEXTI_Trigger_Falling;//下降沿出发EXTI_Init(EXTI_InitStructure);//配置NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannelEXTI15_10_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmdENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority1;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority1;//响应优先级NVIC_Init(NVIC_InitStructure);}// 这里注意// GPIO引脚0~4使用的是独立中断线Line0~4Line5-9是同一中断线Line10-15同一中断线// 如果使用的是同一中断线下面的函数名相应的改动如EXTI0_IRQHandler()voidEXTI15_10_IRQHandler(void){//配置中断函数函数if(EXTI_GetITStatus(EXTI_Line14)SET){//中断标志判断Delay(10);Turn_LED();}EXTI_ClearITPendingBit(EXTI_Line14);// 清除标志位}voidTurn_LED(void){//按键按下if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)0){// 取反状态如按下前为关则置为开反之亦然is_led_turn!is_led_turn;GPIO_WriteBit(GPIOB,GPIO_Pin_10,is_led_turn1?Bit_SET:Bit_RESET);//等待松开防止重复进入中断(学习使用工作中应避免这种用法)while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)0);Delay(10);}}intmain(void){//按键引脚初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_PinGPIO_Pin_14;GPIO_InitStruct.GPIO_ModeGPIO_Mode_IPU;//设置为输入上拉模式GPIO_InitStruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_InitStruct);//初始化连接LED的引脚GPIO_InitStruct.GPIO_PinGPIO_Pin_10;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_PP;//设置为输出推挽模式GPIO_ResetBits(GPIOB,GPIO_Pin_10);GPIO_Init(GPIOB,GPIO_InitStruct);Key_Init();//初始化中断while(1){//Turn_LED();}}四、结束语好了stm32的基本使用——外部中断的使用先介绍到这后续有时间我继续更新这方面的文章敬请期待我是“风行男孩”咱有缘再见码字不易转载请标明出处若是文章有帮助点个赞留个痕迹即可。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询