篮球组运动组任务总结(12.19-12.26)
理论学习
1、stm32时钟结构,此部分内容的学习参考博文
2、单片机中的中断分为外部中断和内部中断,外部中断是单片机实时处理外部事件的一种内部机制,而内部中断是一个算法指令,是由软中断指令启动的中断。当外部事件发生时,会触发外部中断,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去处理中断事件;当中断处理完后,再继续执行被中断的程序(此部分内容的学习参考B站视频)
3、定时器就是一个计时的工具,可以实现加法计时和减法计时,当计时完成时,就相当于发生了一次内部事件,会触发内部中断,从而实现相应的功能(此部分内容的学习参考B站视频)
实践项目
- 通过按键控制LED灯的亮灭,并利用定时器中断,对按键进行消抖
1、在设置芯片的界面,将按键所对应的引脚的功能设置为EXTI
2、设置中断触发条件
将中断设置为下降沿触发
3、使能相关的NVIC通道
4、编写中断服务函数
在stm32f1xx_hal_gpio.c中找到回调函数
然后在main.c文件中重写callback函数(HAL_Delay用系统滴答定时器消抖)
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_4)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)==0)
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
}
}
*此处遇到和中断优先级相关的问题:由于之前的设置是systick的优先级和EXTI的优先级都为最高0,所以导致程序卡死;之后调低了EXIT的优先级为1就解决了问题
5、成果展示
VID_20201223_004551
- 利用定时器,实现呼吸灯的效果
想要用一个led实现呼吸灯的效果,这个led所对应的引脚必须有定时的功能(如下图TIM3_CH2)
设置定时器
代码编写:
启动pwm
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2)
呼吸灯代码
while(pwm_value < 1000)
{
pwm_value++;
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,pwm_value);
HAL_Delay(1);
}
while(pwm_value)
{
pwm_value--;
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,pwm_value);
HAL_Delay(1);
}
成果展示
VID_20201223_004552
思考题
1、HAL库中的GPIOB指的就是PB引脚,如(GPIOB,GPIO_PIN_1)指的就是PB1引脚
2、.h文件是.c文件的头文件,在.c文件中用#include<xxx.h>
进行预处理
3、我还不清楚HAL_Delay
这种去抖方法是延时去抖还是定时器去抖,因为这个函数用的好像就是systick定时器进行计时然后延时一定的时间进行消抖的