模块2 STM32程序开发-项目2 STM32 基础应用-任务1 点亮LED灯

📅 2026/8/27 12:23:30
模块2 STM32程序开发-项目2 STM32 基础应用-任务1 点亮LED灯
基于STM32的物联网环境监测与远程控制系统实训套件-淘宝网任务1 点亮LED灯一、任务描述本任务基于STM32F103C8T6最小系统板硬件连接为PA6 引脚驱动LED灯。在Keil中编写、编译、下载程序实现GPIO输出高电平点亮 LED的功能掌握STM32 GPIO最基础的输出控制方法。二、任务目标1.知识目标1理解STM32 GPIO端口的输出模式、推挽输出、开漏输出工作原理。2掌握LED点亮的硬件原理高电平点亮/低电平点亮的区别。3熟悉HAL库中GPIO初始化、电平控制的核心函数。4了解STM32工程下载、运行的完整流程。2.能力目标1能够生成工程并在Keil中编写GPIO电平控制代码。2能够独立完成程序编译、下载实现LED点亮功能。3能够排查硬件接线、软件配置导致的LED不亮问题。3.素质目标1培养嵌入式开发先配置、后编程、再调试的规范流程。2提升硬件与软件结合的分析、调试能力。3养成严谨、耐心排查问题的工程素养。三、任务重难点1.任务重点1PA6引脚正确配置GPIO推挽输出、无上拉下拉、低速模式。2掌握HAL库控制GPIO电平函数HAL_GPIO_WritePin()。3区分LED高电平点亮/低电平点亮正确设置输出电平。4工程编译无错误程序成功下载并运行。2.任务难点1硬件判断LED是高电平点亮还是低电平点亮。2正确调用HAL库GPIO函数参数匹配无误。3排查LED不亮原因接线错误、引脚配置错误、电平设置错误。4解决下载失败、程序不运行的基础问题。四、知识准备1.STM32F103C8T6的GPIO详细介绍1GPIO基本概念GPIOGeneral Purpose Input Output通用输入输出口是STM32单片机与外部硬件LED、按键、传感器等交互的最基础接口。STM32F103C8T6一共有GPIOA、GPIOB、GPIOC三组端口每组端口包含16个引脚Pin0~Pin15如图1所示。本任务使用GPIOA第6号引脚——PA6。2GPIO端口结构每组GPIO包含一组16个引脚控制寄存器控制模式、速度、电平数据寄存器读取/写入引脚电平3GPIO四种工作模式输入模式读取外部电平按键、传感器输出模式控制外部设备LED、继电器复用功能模式串口、SPI、I2C等硬件外设模拟模式ADC采集4GPIO输出模式点亮LED必须掌握输出模式分为两种推挽输出Push-Pull可输出强高电平强低电平驱动能力强适合驱动LED。开漏输出Open-Drain只能输出强低电平需要外部上拉一般不用于LED。本任务PA6必须配置为通用推挽输出5GPIO上拉/下拉Pull-up/Pull-down上拉引脚默认高电平下拉引脚默认低电平无上拉无下拉电平由程序控制点亮LED推荐无上拉无下拉6GPIO输出速度低速2MHz中速10MHz高速50MHzLED属于慢速设备使用低速即可。图1 STM32F103C8T6引脚定义2.HAL库GPIO函数详细使用点亮LED核心1GPIO初始化结构体GPIO_InitTypeDef GPIO_InitStruct {0};//开启GPIOA时钟__HAL_RCC_GPIOA_CLK_ENABLE();//配置PA6为推挽输出、无上下拉、低速GPIO_InitStruct.Pin GPIO_PIN_6;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull GPIO_NOPULL;GPIO_InitStruct.SpeedGPIO_SPEED_FREQ_LOW;//初始化引脚HAL_GPIO_Init(GPIOA,GPIO_InitStruct);2最核心函数设置引脚电平点亮/熄灭LEDHAL_GPIO_WritePin(GPIOx,GPIO_Pin,PinState);三个参数含义GPIOx端口如GPIOAGPIO_Pin引脚号如GPIO_PIN_6PinState电平状态GPIO_PIN_SET→高电平1GPIO_PIN_RESET→低电平03点亮LED常用代码示例//点亮LED根据硬件决定高低电平HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);//熄灭LEDHAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);4翻转电平函数闪烁LED用GPIO_PinState stateHAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6);3.LED点亮原理知识1LED点亮条件LED是单向导通的二极管必须加正向电压才会亮。2两种常见电路低电平点亮最常见PA6输出0→LED亮PA6输出1→LED灭高电平点亮PA6输出1→LED亮PA6输出0→LED灭4.时钟使能知识非常重要GPIO使用前必须开启时钟__HAL_RCC_GPIOA_CLK_ENABLE();如果不开启时钟GPIO无法工作LED不会亮。5.程序执行流程知识1系统初始化时钟、GPIO2进入main函数3执行MX_GPIO_Init()初始化PA64在while(1)之前点亮LED5程序保持运行LED常亮五、硬件连接LED模块接线如图2所示U6 为 LED 灯模块有两个引脚引脚 1标记为 A6直接连接到 STM32 核心板的 PA6 引脚作为 LED 的控制端。引脚 2标记为 GND直接连接到系统地GND。图2 LED模块接线六、任务实现任务1.1重定义fputc函数为了让printf函数输出的打印信息重定向到串口调试助手在usart.c文件中添加如下代码/* USER CODE BEGIN 0 */#include stdio.h/***********************************************************重定义fputc函数**********************************************************/int fputc(int ch,FILE *f){HAL_UART_Transmit (huart1 ,(uint8_t *)ch,1,HAL_MAX_DELAY );return ch;}/* USER CODE END 0 */任务1.2 添加LED驱动1.在项目根目录新建hardware文件夹在其中再建src和inc两个文件夹将led.c文件放到src文件夹中将led.h文件放到inc文件夹中如图3所示。图3 新建hardware文件夹2.在项目根目录下的MDK-ARM下双击TEST.uvprojx文件打开工程如图4所示。图4 打开工程3.单击按钮打开”Manager Project Items”对话框点击按钮添加hardware再点击“Add Files...”按钮将hardware\src下led.c文件添加进来如图5所示。图5 添加led.c文件4.单击按钮打开“Options for Target ’TEST’”对话框选择“C/C”选项卡在“Include Paths”后选择头文件所在目录“hardware\inc”如图6所示。图6 选择“hardware\inc”任务1.3 修改main.c文件1.添加头文件在main.c文件中添加头文件。/* USER CODE BEGIN Includes *///C库#include string.h#include stdio.h//LED驱动#include led.h/* USER CODE END Includes */2.在main函数中添加如下代码。/* USER CODE BEGIN 2 */Led_Init(); //LED初始化printf(任务1 点亮LED灯\r\n);Led_Set(LED_ON);/* USER CODE END 2 */任务1.4 编译、下载程序查看结果1.点击编译按钮编译程序。2.点击下载按钮下载程序。3.打开串口调试助手按stm32f103c8t6主控板上的复位键在串口调试助手中输出打印信息如图7所示同时LED灯点亮。图7 输出打印信息