目錄
一、安裝STM32CubeMX
二、HAL庫點亮LED燈
1.STM32CubeMX創建項目
2.進入Keil編寫代碼
三、采用中斷控制LED燈的亮滅
?1.創建項目
2.Keil中編寫代碼
四、Keil波形分析
總結
一、安裝STM32CubeMX
具體操作可以參考下面鏈接:
搭建STM32開發環境——STM32CubeMX,Keil5_怎么將stm32cubemx和kiel-CSDN博客
二、HAL庫點亮LED燈
1.STM32CubeMX創建項目
?(1)打開STM32CubeMX,在主界面點擊:ACCESS TO MCU SELECTOR:
(2)選擇的單片機型號以及點擊開始工程項目:?
?(3)點擊system core,進入SYS,在debug下選擇serial wire:?
(4)配置時鐘,進入上面的rcc,將hse設為Crystal/Ceramic Resonator:
?
?(5)進入GPIO選擇引腳 并且配置其工作模式:
我這里一共選擇了兩個GPIO:PA0,PA2設置為了GPIO_output
?
(6)進入CLK Configuration (時鐘配置)中,進行時鐘配置:?
(7)進入Project Manager(工程管理),進行工程設置點擊生成工程與代碼:
注意:路徑不能包含中文和空格,不然生成的工程文件無法在Keil中打開;
?
?之后就可以進入Keil里面編寫代碼了。
2.進入Keil編寫代碼
在main函數里編寫下面代碼即可點亮LED燈
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 燈1亮HAL_Delay(1000); // 延時1sHAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 燈1滅HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET); // 燈2亮HAL_Delay(1000); // 延時1sHAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET); // 燈2滅
?效果如下:
HAL庫點亮LED燈
三、采用中斷控制LED燈的亮滅
?1.創建項目
在剛剛亮LED的基礎上,我們加上中斷的設計,將PB5設置為外部中斷源
?
?
NVIC中斷優先級配置,點擊NVIC,進入其中,按照圖示步驟進行操作:?
后續步驟和點亮LED燈類似,配置時鐘,然后在Project Manger設置項目名稱和保存的位置,最后進入Keil中編寫代碼。
2.Keil中編寫代碼
在main.c文件中,在main函數上方進行編寫一個中斷函數HAL_GPIO_EXTI_Callback()以及自定義一個中斷的標識符號flag:
uint32_t flag=0;//自定義中斷標識符號
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){if(GPIO_Pin == SWITCH_Pin){//獲取B5的電位GPIO_PinState pinState = HAL_GPIO_ReadPin(SWITCH_GPIO_Port,SWITCH_Pin);//高電位if(pinState==GPIO_PIN_SET)//PB5高電位流水燈亮{flag=1;PB5高電位標識}//低電位else if(pinState==GPIO_PIN_RESET)//PB5低電位流水燈滅{flag=0;//PB5低電位標識}} }
?接著在main函數里的while(1)里面寫上如下代碼:
if(flag==1){HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);//PA0亮燈HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//PA1熄燈HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//PA2熄燈HAL_Delay(100);//延時0.1sHAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄燈HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);//PA1亮燈HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//PA2熄燈HAL_Delay(100);//延時0.1s HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄燈HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//PA1熄燈HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);//PA2亮燈HAL_Delay(100);//延時0.1s}else if(flag==0){HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄燈HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//PA1熄燈HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//PA2熄燈}
然后就可以燒錄程序了。
四、Keil波形分析
?
總結
????????使用HAL庫可以減輕我們很大的工作量,但是我們還是需要學習好標準庫和寄存器,因為并不是所有的芯片都可以使用HAL庫。
參考鏈接:
STM32基于HAL庫的中斷控制LED流水燈_hal庫控制不了led-CSDN博客