理論學習
1、了解STM32時鐘結構:詳解STM32時鐘體系結構分析
2、了解單片機中的事件和中斷是什么,弄清它們之間的區別STM32的中斷和事件的區別
3、理解中斷優先級:中斷優先級
4、了解STM32的定時器,并學習定時器的基本結構和功能:STM32定時器原理與使用
實踐專案
(1)通過按鍵控制LED燈的亮滅,并利用定時器中斷,對按鍵進行消抖
(2)利用定時器,實作呼吸燈的效果
中斷初始化配置
在芯片界面將引腳設定為EXTI

設定中斷觸發條件

使能相關的NVIC通道

撰寫中斷服務函式
在stm32f4xx_hal_gpio.c中找到回呼函式,并在main.c檔案里重新撰寫callback函式
設定優先級
想要用一個led實作呼吸燈的效果,這個led所對應的引腳必須有定時的功能(如下圖TIM14_CH1)

設定定時器

成果
中斷
void HAL_GPIO_EXTI_uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_3)
{ HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)==0)
HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_10);
if(GPIO_Pin == GPIO_PIN_4)
{ HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)==0)
{if(flag == 0)
flag = 1;
else if(flag == 1)
flag = 0;}
}
}
啟動pwm
HAL_TIM_PWM_Start(&htim14,TIM_CHANNEL_1);
呼吸燈代碼
while(1){
while(pwm_value < 900&&flag == 1)
{
pwm_value+=5;
__HAL_TIM_SET_COMPARE(&htim14,TIM_CHANNEL_1,pwm_value);
HAL_Delay(1);
}
while(pwm_value&&flag == 1)
{
pwm_value-=5;
__HAL_TIM_SET_COMPARE(&htim14,TIM_CHANNEL_1,pwm_value);
HAL_Delay(1);
}
if(!flag)
__HAL_TIM_SET_COMPARE(&htim14,TIM_CHANNEL_1,1000);
成果展示
呼吸燈
遇到的問題
1、我不太明白為什么不用static而直接int定義的話,呼吸燈不能正常運行,就下面這個
static int pwm_value;
2、systick的優先級和EXTI的優先級的未設定導致程式不能正常運行,設定之后就可以了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240119.html
標籤:其他
