利用STM32控制流水灯以及直流电机正反转
本文基于STM32F103C8T6单片机,搭配L298N电机驱动模块,完成流水灯效果与直流电机正反转控制实验,包含硬件接线、CubeMX配置、HAL库代码、烧录调试完整流程,为具身智能小车基础实验。
一、前言
在掌握STM32点灯基础实验后,进一步学习IO口驱动外设。本次实验同时实现LED流水灯与直流电机的启停、正反转控制,理解GPIO输出原理,认识L298N驱动芯片,掌握电机控制时延时保护,防止电流冲击损坏硬件。
二、最终效果与整体流程
1. 流水灯:4个LED灯依次点亮、循环流动。
2. 电机动作:电机正转 → 延时停止 → 电机反转 → 延时停止。
3. 整体逻辑:单片机GPIO输出高低电平,一方面控制LED亮灭;另一方面输出电平给L298N,控制电机转向。
注意:电机正反转切换前,加入停止延时,避免瞬间大电流冲击,保护驱动模块和电源。
三、硬件准备与接线
硬件清单
STM32F103C8T6最小系统板、L298N电机驱动模块、直流电机、LED灯×4、220Ω电阻、杜邦线、5V电源。
接线说明
1. LED:LED正极串联220Ω电阻,接STM32 GPIO引脚,负极接GND。
2. L298N驱动:
- IN1、IN2 接STM32两个GPIO口,用来控制电机转向
- L298N 12V供电接外部电源,5V可给板载供电,共地(GND必须相连!)
- OUT1、OUT2 接直流电机两端
四、软件环境
1. STM32CubeMX:图形化配置单片机引脚,生成工程代码
2. Keil MDK:编写、编译C代码,生成hex文件
3. XISP烧录软件:将hex文件烧录进STM32芯片
五、CubeMX图形化配置
1. 选择芯片:STM32F103C8T6
2. RCC配置:开启外部高速晶振HSE
3. SYS配置:调试接口选择Serial Wire
4. GPIO配置:
- LED对应引脚设置为 GPIO_Output 推挽输出
- L298N的IN1、IN2引脚设置为 GPIO_Output 推挽输出
5. 时钟树配置:系统时钟72MHz
6. 工程设置:生成工程,选择HAL库,生成代码。
六、核心代码
#include "main.h"
#include "gpio.h"
#include "delay.h"
//流水灯+电机控制主函数
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
//=====流水灯程序=====
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_Delay(300);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_Delay(300);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
HAL_Delay(300);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
HAL_Delay(300);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
//=====直流电机正转=====
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_Delay(1000);
//电机停止
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_Delay(500);
//=====直流电机反转=====
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
HAL_Delay(1000);
//电机停止
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
HAL_Delay(500);
}
}
七、烧录与调试
1. Keil编译代码,生成 .hex 文件
2. 打开XISP软件,选择对应芯片,加载hex文件
3. STM32通过串口连接电脑,点击下载烧录
4. 上电测试:观察LED流水效果,电机正转、暂停、反转循环。
八、实验总结
本次实验熟悉STM32的GPIO输出控制原理,学会L298N驱动直流电机。
1. GPIO输出高低电平可以控制LED亮灭和电机转向;
2. 电机切换转向前必须延时停机,防止冲击电流烧毁器件;
3. 硬件共地是非常关键的一点,不共地会导致电机控制异常。
本实验是智能小车、具身智能机器人的基础实验。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)