登录/注册

stm32f103小车程序

更多

以下是一个基于STM32F103的智能小车基础程序框架,包含电机控制、超声波避障和蓝牙遥控功能。使用HAL库开发,可根据硬件连接调整引脚。

一、硬件准备

  1. STM32F103C8T6核心板
  2. L298N电机驱动模块
  3. HC-SR04超声波模块
  4. 4WD小车底盘
  5. HC-05蓝牙模块
  6. 7.4V锂电池供电

二、代码结构

/* 引脚定义 */
// 电机控制
#define MOTOR_L1_PIN    GPIO_PIN_0
#define MOTOR_L1_PORT   GPIOA
#define MOTOR_L2_PIN    GPIO_PIN_1
#define MOTOR_R1_PIN    GPIO_PIN_2
#define MOTOR_R1_PORT   GPIOA
#define MOTOR_R2_PIN    GPIO_PIN_3

// 超声波
#define TRIG_PIN        GPIO_PIN_4
#define TRIG_PORT       GPIOA
#define ECHO_PIN        GPIO_PIN_5
#define ECHO_PORT       GPIOA

// PWM定时器配置(TIM2 CH1)
#define PWM_TIM         TIM2
#define PWM_CHANNEL     TIM_CHANNEL_1

/* 全局变量 */
uint32_t distance_cm = 0;  // 超声波距离

/* 函数声明 */
void SystemClock_Config(void);
void Motor_Init(void);
void Ultrasonic_Init(void);
void Bluetooth_Init(void);
void Car_Forward(void);
void Car_Stop(void);
void PWM_SetSpeed(uint8_t speed);

三、电机控制函数

// 电机初始化
void Motor_Init(void) {
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    // 使能GPIO时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();

    // 配置电机控制引脚
    GPIO_InitStruct.Pin = MOTOR_L1_PIN | MOTOR_L2_PIN | MOTOR_R1_PIN | MOTOR_R2_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

// 前进
void Car_Forward(void) {
    HAL_GPIO_WritePin(MOTOR_L1_PORT, MOTOR_L1_PIN, GPIO_PIN_SET);
    HAL_GPIO_WritePin(MOTOR_L2_PORT, MOTOR_L2_PIN, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(MOTOR_R1_PORT, MOTOR_R1_PIN, GPIO_PIN_SET);
    HAL_GPIO_WritePin(MOTOR_R2_PORT, MOTOR_R2_PIN, GPIO_PIN_RESET);
}

// 停止
void Car_Stop(void) {
    HAL_GPIO_WritePin(MOTOR_L1_PORT, MOTOR_L1_PIN, GPIO_PIN_RESET);
    // ...其他引脚同理
}

四、PWM速度控制

void PWM_Init(void) {
    TIM_OC_InitTypeDef sConfigOC = {0};

    // 使能TIM2时钟
    __HAL_RCC_TIM2_CLK_ENABLE();

    // 定时器基础配置
    htim2.Instance = PWM_TIM;
    htim2.Init.Prescaler = 72-1;  // 1MHz
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = 100-1;    // 10kHz PWM
    HAL_TIM_PWM_Init(&htim2);

    // PWM通道配置
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 50;  // 初始占空比50%
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, PWM_CHANNEL);

    HAL_TIM_PWM_Start(&htim2, PWM_CHANNEL);
}

void PWM_SetSpeed(uint8_t speed) {
    __HAL_TIM_SET_COMPARE(&htim2, PWM_CHANNEL, speed);
}

五、超声波测距

void Ultrasonic_Measure(void) {
    // 发送10us高电平触发信号
    HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);
    delay_us(10);
    HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);

    // 等待回响信号
    while(!HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN));
    uint32_t start = HAL_GetTick();
    while(HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN));
    uint32_t duration = HAL_GetTick() - start;

    distance_cm = duration * 0.034 / 2;  // 计算距离
}

六、主程序逻辑

int main(void) {
    HAL_Init();
    SystemClock_Config();
    Motor_Init();
    PWM_Init();
    Ultrasonic_Init();
    Bluetooth_Init();

    while(1) {
        Ultrasonic_Measure();

        // 自动避障逻辑
        if(distance_cm < 20) {
            Car_Stop();
            HAL_Delay(500);
            Car_Backward();
            HAL_Delay(300);
            Car_TurnLeft();
            HAL_Delay(500);
        } else {
            Car_Forward();
            PWM_SetSpeed(80);  // 设置速度80%
        }

        HAL_Delay(100);
    }
}

注意事项:

  1. 根据实际硬件连接修改引脚定义
  2. 需要配置正确的中断优先级(特别是超声波模块)
  3. 建议使用硬件PWM控制电机速度
  4. 蓝牙模块需要配置串口通信(USART1/2)
  5. 添加适当的延时函数和去抖处理
  6. 建议使用PID算法实现更精准的速度控制

完整项目需要包含以下模块:

  1. 电机驱动
  2. 传感器数据采集(超声波/红外)
  3. 通信模块(蓝牙/WIFI)
  4. 电源管理
  5. 异常状态处理

建议使用STM32CubeMX生成初始化代码,再添加业务逻辑。实际开发中需要根据具体电机参数调整PWM频率和占空比范围。

STM32F103VET6

1970-01-01 08:00:00 至 1970-01-01 08:00:00

ARM系列STM32F103芯片的解密方法

破解STM32F103芯片的方法

2023-09-19 09:03:40

ch32v103stm32f103的区别

ch32v103与stm32f103的区别  Ch32v103与STM32f103

2023-08-22 15:49:00

基于STM32蓝牙小车程序

基于STM32蓝牙小车程序

资料下载 jinyi7016 2022-09-26 14:22:48

STM32F103芯片FFT程序

STM32F103芯片使用DSP库进行FFT运算的资料与程序。

资料下载 米一样 2022-06-07 16:30:21

基于STM32f103的输入捕获测频率和占空比

基于STM32f103的输入捕获测频率和占空比

资料下载 shyshyshy 2021-08-02 10:10:24

基于STM32f103的FFT频率测试程序下载

基于STM32f103的FFT频率测试程序下载

资料下载 shyshyshy 2021-08-02 10:07:20

STM32F103 CAN模板程序

STM32F103 CAN模板程序

资料下载 luo 2020-11-09 11:08:07

STM32F103 GPIO内部电路图讲解

STM32F103 GPIO内部电路图讲解

2023-02-01 16:32:14

基于STM32F103单片机的矩阵按键设计

本实验使用STM32F103单片机,主题代码通用的。

2022-12-09 17:18:46

基于STM32F103智能小车设计

基于STM32F103智能小车设计,包含:硬件、原理图、软件、流程等全套方案,有需要的朋友可以下载。

2022-03-24 10:24:05

怎样去设计一种基于STM32F103芯片的智能小车

怎样去设计一种基于STM32F103芯片的智能小车呢?基于STM32F103芯片的智能

2021-11-18 06:23:28

芯片短缺如何用HK32F103换掉STM32F103

本篇笔记主要记录因为芯片短缺,使用HK32F103换掉了STM32F103的过程和注意事项。 准备工作 准备之前的STM32F103工程。 测试

2021-11-01 14:14:48

如何利用STM32F103实现小车的转动?

如何利用STM32F103实现小车的转动?

2021-10-19 06:07:03

stm32f030和stm32f103功能差异

stm32f030和stm32f103功能差异主要表现在哪?

2021-07-22 09:35:47

7天热门专题 换一换
相关标签