- 使用標準庫實現本次功能的源代碼已上傳:
- https://github.com/yzmj0986/STM32_Std.lib_LEDControl.git
MCU:STM32F103ZET6
IDE: MDK-ARM V5 +STM32CubeMX5.0.0
一. 在 Pinout&Configuration---System Core中:
- 1. 首先設置時鐘RCC的HSE(外部高速時鐘)爲晶振模式:Crystal/ceramic Resonator
- 2. 設置系統SYS的Debug爲Serial Wire:
- 3. 設置GPIO中的LED管腳。
根據MCU的硬件原理圖可以看出LED均是低電平觸發,且對應的端口爲PC0-PC7,因此在使能是應開啓GPIOC端口。
在MCU管腳圖中找到PC0-PC7管腳,右鍵將管腳設置爲GPIO_Output輸出模式。
此時在System Core的GPIO中,會出現對應端口,點擊端口將GPIO output level設置爲low,將User Label定義爲LED。
二.在 Project Manager---Project中:
1.設置項目的名稱以及保存的位置,選擇Toolchain/IDE爲MDK-ARM V5,
Tips:最好把Linker Settings中的Minimum Heap Size設置爲0x600。
2.在Code Generator選項中如下勾選:
最後點Generate Code生成代碼,並選擇“Open Project”:
首先進入main.h,其中已經對管腳端口進行了宏定義(對應User_Label的內容):
#define LED1_Pin GPIO_PIN_0
#define LED1_GPIO_Port GPIOC
在gpio.c中進行了對GPIO的初始化:貼出核心代碼與備註
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin
|LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin
|LED5_Pin|LED6_Pin|LED7_Pin|LED8_Pin; //選擇對應的LED管腳
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //輸出模式
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; //輸出速度
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
三.在keil中編寫主函數main.c:
打開main.c,在while(1)中編寫主函數,要實現LED燈亮與滅可以通過調用HAL_GPIO_TogglePin函數與HAL_Delay函數。
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
這個函數用來翻轉某個引腳的電平狀態,可用以實現LED的閃爍。
__weak void HAL_Delay(uint32_t Delay)
是毫秒級的延時函數。
關於HAL庫中GPIO的函數介紹:HAL庫中GPIO函數介紹。
主程序如下:
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
HAL_Delay(500);//毫秒級延遲
HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED4_GPIO_Port,LED4_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED5_GPIO_Port,LED5_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED6_GPIO_Port,LED6_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED7_GPIO_Port,LED7_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED8_GPIO_Port,LED8_Pin);
HAL_Delay(500);
/* USER CODE BEGIN 3 */
}
至此,編譯後無錯並下載到開發板中,就完成了通過STM32CubeMX調用HAL庫實現流水燈的效果程序。