本文基于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. 硬件共地是非常关键的一点,不共地会导致电机控制异常。
本实验是智能小车、具身智能机器人的基础实验。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐