STM32脱坑【Day 8】

keil5纯手敲代码,实现按键中断,对中断的理解更近一步,当然离不开New Bing 的帮助。

关于New Bing:之前在使用GPT 3.5和其他大语言模型,相比之下,New Bing的回答速度稍慢些,但是准确率和人性化的程度丝毫不逊色,感觉使用的是GPT-4模型(一些奇葩问题也能作答)。

使用方法:首先注册微软账号,打开EDGE浏览器,然后绕过重定向,进入网址https://bing.com/.之后需要将设置中的国家和地区更改一下。

言归正传,本次实验的文件树就是最基本的STM32工程模板,具体方法有很多经验帖子介绍

用keil5新建STM32工程(超详细的图解操作)_keil5stm32_小治成长记的博客-CSDN博客

keil5新建STM32工程文件--实践篇手把手教学(以STM32F103为例)_stm32keil5新建工程_专揍小Wuwu的博客-CSDN博客

代码部分:

#include "stm32f30x.h"
#include "stm32f30x_exti.h"
#include "stm32f30x_misc.h"

volatile	uint16_t i;
volatile uint8_t stop_breathing=0;//呼吸灯停止标志
void EXTI15_10_IRQHandler(void);
void delay(uint16_t n)
{
	while(n--)
	{
		if(stop_breathing)
			break;
	}
	
}


int main(void)
{
		
    GPIO_InitTypeDef GPIO_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
		RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource13);

    EXTI_InitStructure.EXTI_Line = EXTI_Line13;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn ;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
	
	
    while(1)
		{
			if(!stop_breathing)
				{
					for(i=0;i<2000;i++)
					{
						GPIO_SetBits(GPIOB,GPIO_Pin_13);
						delay(i);
						GPIO_ResetBits(GPIOB,GPIO_Pin_13);
						delay(2000-i);
					}
					for(i=0;i<2000;i++)
					{
						GPIO_ResetBits(GPIOB,GPIO_Pin_13);
						delay(i);
						GPIO_SetBits(GPIOB,GPIO_Pin_13);
						delay(2000-i);
					}
				}
		}
}
void EXTI15_10_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line13) == SET)
    {
			/*if(GPIO_ReadOutputDataBit( GPIOB, GPIO_Pin_13)==RESET)
			GPIO_SetBits(GPIOB, GPIO_Pin_13);
			else
			GPIO_ResetBits(GPIOB, GPIO_Pin_13);	
      //delay(20000);*/
			delay(1000);
			if(GPIO_ReadInputDataBit( GPIOC, GPIO_Pin_13)==RESET)
			stop_breathing=!stop_breathing;
      EXTI_ClearITPendingBit(EXTI_Line13);
    }
}

实验现象,上电后LED实现呼吸灯效果,按键控制呼吸灯开关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值