天天看點

直擊翻車現場:STM32 GPIO 無法輸出的問題

問題描述

平台:STM32F103RBT6,其中有GPIO 輸入,也有GPIO輸出,其中LED訓示燈(GPIO 輸出)。

發現,程式燒寫後,代碼正常跑,配置的GPIO 引腳,沒有電平輸出。

問題分析

  1. 開始以為代碼有問題,是以,軟體調試,發現可以正常的跑。
  2. 序列槽列印,發現程式能正常的執行!!
  3. 确認引腳配置正确後,開始認真的分析,發現,GPIO 的寄存器配置,感覺已經配置了推挽輸出!!
  4. 檢查硬體,發現焊接良好。
  5. 對比官方的GPIO配置,發現了一點問題。GPIO 的速率,沒有配置!!

問題解決

原來配置GPIO時,上面有GPIO 輸入,沒有配置SPEED,配置輸出時,直接複制粘貼後,改為了PP推挽輸出,沒有配置SPEED。

/* LED_PIN_RUN2 */
    HAL_GPIO_WritePin(PORT_LED_PIN_RUN2, LED_PIN_RUN2, GPIO_PIN_RESET);
    GPIO_InitStruct.Pin = LED_PIN_RUN2;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  /* 注意,需要配置!! */
    HAL_GPIO_Init(PORT_LED_PIN_RUN2, &GPIO_InitStruct);
           

反思

  1. 其實都是懶引起的,代碼,不能總是複制與粘貼。
  2. 認真分析問題,認真總結。

繼續閱讀