STM32按键控制LED灯,利用定时器中断

一:理论学习

1.了解STM32时钟结构(已掌握)
在 STM32 中,有五个时钟源,为 HSI、HSE、LSI、LSE、PLL。从时钟频率来分可以分为 高速时钟源和低速时钟源,在这 5 个中 HIS,HSE 以及 PLL 是高速时钟,LSI 和 LSE 是低速时 钟。从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时 钟源,其中 HSE 和 LSE 是外部时钟源,其他的是内部时钟源。
①、HSI 是高速内部时钟,RC 振荡器,频率为 8MHz。 ②、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~16MHz。 我们的开发板接的是 8M 的晶振。 ③、LSI 是低速内部时钟,RC 振荡器,频率为 40kHz。独立看门狗的时钟源只能是 LSI,同 时 LSI 还可以作为 RTC 的时钟源。 ④、LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源。 ⑤、PLL 为锁相环倍频输出,其时钟输入源可选择为 HSI/2、HSE 或者 HSE/2。倍频可选择为
2~16 倍,但是其输出频率最大不得超过 72MHz。
配置时钟参数可以通过软件STM32CubeMX直接配置,也可以在MDK5里面通过调用时钟设置函数进行配置。
2.了解单片机中的事件和中断是什么,弄清它们之间的区别(基本掌握)
单片机中断是指CPU在正常执行程序的过程中,由于计算机内部或外部发生了另一事件(如定时时间到,超压报警等),请求CPU迅速去处理,CPU暂时停止当前程序的运行,而转去处理所发生的事件。中断属于正常现象。
事件是可以被控件识别的操作,如按下确定按钮,选择某个单选按钮或者复选框。每一种控件有自己可以识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事件,等等。当MCU系统外设满足了一定的条件,改变了相应的状态标志位,这时候就认为发生了某个事件。
事件与中断事件是包含关系,即事件可分为中断事件或非中断事件。中断事件是一种可以导致中断发生的事件。中断则是因为中断事件的发生而导致的后续行为过程,因此中断一定有一个对应的事件,但一个事件不一定对应一个中断。从外部激励信号来看,中断和事件的产生源都可以是一样的。之所以分成2个部分,由于中断是需要CPU参与的,需要软件的中断服务函数才能完成中断后产生的结果;但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果。
事件和中断

3.理解中断优先级(基本理解)
STM32 将中断分为 5 个组,组 0-4。该分组的设置是由SCB->AIRCR寄存器的bit10-8来定义的。具体的分配关系如下:AIRCR中断分组设置表

4.了解STM32的定时器,并学习定时器的基本结构和功能 (不是很懂定时器的使用)
STM32F1系列的定时器可以分为3类:
1)高级定时器(TIM1,TIM8):16 位向上、向下、向上/向下自动装载计数器,可以产生DMA请求,有4组捕获/比较通道输出互补PWM信号;
2)通用定时器(TIM2~TIM5):16 位向上、向下、向上/向下自动装载计数器,可以产生DMA请求,有4组捕获/比较通道输出PWM信号但不能输出互补PWM信号;
3)基本定时器(TIM6,TIM7):16 位向上、向下、向上/向下自动装载计数器;
定时器的计数频率公式:
TIMx_CLK = CK_INT / (TIM_Prescaler + 1)
其中:TIMx_CLK ——定时器的计数频率
CK_INT——内部时钟源频率(APB1的倍频器送出时钟)
TIM_Prescaler——用户设定的预分频系数,取值范围0~65535

二:实践项目
1.通过按键控制LED灯的亮灭,并利用定时器中断,对按键进行消抖

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_5)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5)==0)
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);
}
}

2.利用定时器,实现呼吸灯的效果(选做)
定时器使用内部时钟

使能定时器
在这里插入图片描述
重写定时器中断回调函数
在这里插入图片描述
启动定时器
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45847100/article/details/111617258