[STM32CubeMX]學習筆記1:GPIO輸出LED流水燈

 

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庫實現流水燈的效果程序。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章