#include "stm32c0xx_hal.h"
// 暫時空的時鐘設定函式(避免編譯錯誤)
void SystemClock_Config(void)
{
// 目前先不做設定,後面會補
}
void MX_GPIO_Init(void)
{
// 啟用 GPIOA 外設的時鐘
// STM32 的每個外設(像 GPIOA、USART、ADC)在使用前都必須先開啟時鐘,否則無法動作
__HAL_RCC_GPIOA_CLK_ENABLE();
// 建立並初始化一個 GPIO 設定結構體(所有欄位預設為 0)
// 這樣可以避免前面記憶體裡的髒資料造成不預期的行為
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 指定要初始化的腳位(也就是 LED 腳位)
GPIO_InitStruct.Pin = GPIO_PIN_5;
// 設定 PA5 為「推挽輸出模式」(Push-Pull Output)
// 表示這個腳位會主動輸出高電位或低電位,適合控制 LED、蜂鳴器、繼電器等元件
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
// 不啟用上拉或下拉電阻(這在輸出模式下通常不需要)
GPIO_InitStruct.Pull = GPIO_NOPULL;
// 設定輸出切換速度為低速(Low speed)
// 控制 LED 不需要高頻切換,用低速可以節省功耗
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
// 實際初始化 GPIOA 的設定,將以上配置套用到硬體
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 設定 PA6 為輸入模式(按鈕)
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
int main(void)
{
HAL_Init();
SystemClock_Config(); // 空的也可以
MX_GPIO_Init();
while (1)
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
}
else{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}
}
}