STM32示例程序:从零开始点亮你的第一盏LED

前两天朋友约我去郊区露营,我顺手把刚调试好的STM32开发板塞进了背包。晚上搭好帐篷,接上移动电源,打开小屏幕,一行代码跑起来,板子上的LED开始闪烁,像极了山间忽明忽暗的萤火虫。其实这背后就是一个最基础的STM32示例程序——GPIO控制LED。

为什么从LED开始?

就像学做饭先学会煮鸡蛋一样,嵌入式开发的第一步往往是让开发板上的LED灯亮起来。STM32作为一款广泛应用的ARM Cortex-M内核单片机,资料丰富,社区活跃,特别适合新手入门。而官方提供的标准外设库和HAL库中,都包含了大量示例程序,其中最经典的莫过于LED闪烁。

一个简单的GPIO控制示例

假设你用的是STM32F103C8T6(俗称“蓝丸”),使用HAL库开发,下面是一个让PC13引脚连接的LED每500毫秒闪烁一次的代码片段:

#include <stm32f1xx_hal.h>

int main(void)
{
    HAL_Init();
    __HAL_RCC_GPIOC_CLK_ENABLE();

    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_13;
    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);

    while (1)
    {
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
        HAL_Delay(500);
    }
}

这段代码在Keil MDK或STM32CubeIDE中编译下载后,就能看到LED开始工作。我在露营时就是靠它确认开发环境没问题,顺便给帐篷加了个“信号灯”功能。

哪里能找到更多示例程序?

ST官网的STM32Cube固件包是宝藏资源,每个系列都有对应的STM32CubeMX生成的示例工程,涵盖UART通信、ADC采样、定时器、I2C驱动OLED屏等。比如你想做个便携温湿度监测仪,可以直接参考HAL库中的DHT11与USART串口打印结合的例程。

社区里也有很多开发者分享自己的项目,比如用STM32驱动一个小屏幕显示GPS坐标,配合锂电池就成了简易户外导航仪。这些项目的起点,往往就是几个基础的示例程序拼接而成。

动手前的小建议

别急着焊电路,先用杜邦线把开发板和面包板连起来。写代码时记得开启调试接口(SWD),不然程序下不进去。还有,第一次烧录前最好查清楚BOOT引脚状态,不然会卡在启动失败的循环里。

上次我在山里试一个低功耗待机程序,结果忘了关看门狗,半夜开发板突然重启,闪了几下灯,差点被当成野生动物。这种细节,往往就藏在示例程序的注释里。