1. 点亮LED并测量GPIO输出波形

点亮LED并测量GPIO输出波形 学习卡片

任务说明

本案例要求使用MCU的GPIO引脚驱动LED,并通过逻辑分析仪或示波器测量该引脚的输出波形,验证GPIO配置与延时函数的准确性。你需要完成:GPIO初始化、LED点亮/熄灭控制、延时函数实现,以及波形测量点的明确标注。

硬件连接

  • MCU:STM32F103C8T6(Blue Pill)
  • LED正极通过220Ω限流电阻连接至PA5
  • LED负极连接至GND
  • 逻辑分析仪探头连接至PA5与GND

代码实现


#include "stm32f1xx_hal.h"

void delay_ms(uint32_t ms) {
    for (uint32_t i = 0; i < ms * 8000; i++) {
        __NOP();
    }
}

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

    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    while (1) {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);   // LED亮
        delay_ms(500);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // LED灭
        delay_ms(500);
    }
}

波形测量与验证

将逻辑分析仪采样率设置为1MHz以上,通道连接PA5。上电后应观察到周期为1s的方波:高电平持续500ms(LED亮),低电平持续500ms(LED灭)。若使用示波器,可测量高电平电压应为3.3V左右。

PA5 输出波形(周期1s,占空比50%) 0ms 250ms 500ms 750ms 1000ms 3.3V (LED亮) 0V (LED灭) T = 1000ms t_high = 500ms

验证方法

  1. 编译并烧录代码至STM32F103C8T6,确认LED以约1Hz频率闪烁。
  2. 逻辑分析仪连接PA5,观察波形是否为方波,高电平时间是否为500ms±50ms。
  3. 若波形周期偏差超过±10%,检查延时函数中的循环次数(当前值基于8MHz内部时钟估算,实际频率可能不同)。
  4. 判定标准:LED肉眼可见规律闪烁,且测量波形周期在0.9s~1.1s范围内即通过。

注意:延时函数基于软件循环实现,精度受编译器优化等级和系统时钟影响。若需精确延时,建议使用定时器(如HAL_Delay()),但本案例为演示GPIO波形测量,软件延时已足够验证逻辑分析仪的使用方法。