Stm32蓝牙小车HAL库(CubeMx配置)

本文介绍了如何使用STM32F407单片机配合L298n电机驱动模块和JDY-31蓝牙模块,实现通过手机蓝牙APP远程控制双马达的运动。包括硬件配置、软件配置(如 CubeMX配置和串口通信)、马达控制代码以及手机端APP的交互设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、硬件配置

1.作品实图

2.L298n电机驱动模块      

3.JDY-31蓝牙模块

二、软件配置

1.Stm32CubeMx配置引脚

2.串口通信

三、软件代码

1.马达模块

 2.main.c

四、手机蓝牙APP

总结


一、硬件配置

配件:

  • 7.4V锂电池
  • 两个马达
  • L298n电机驱动模块
  • JDY-31蓝牙模块
  • stm32f407zgt6单片机

1.作品实图

                               

                      (正面)                                                                         (反面) 

2.L298n电机驱动模块      

1、单片机在CubeMx上配置四个引脚连接逻辑输入四个引脚

2、将两个马达分别引出两条线接输出A输出B,同时接跳线帽使能通道A和通道B

3、接入7-12V电源在12V供电口(可以在此处作开关处理,将电池正极连接开关一端,开关另一端接入12V供电),使电源转换为5v接入单片机(单片机最高5v),为单片机供电

4、将供电GND和5V供电接入单片机

3.JDY-31蓝牙模块

这部分不作多解释,详细可以查看手册。

二、软件配置

软件:

  • Stm32CubeMx
  • Keil5

1.Stm32CubeMx配置引脚

这里配置PA1-A4四个引脚作马达引脚,A1-A2马达1,A3-A4马达2


2.串口通信

这里波特率需要和蓝牙波特率相同,否则无法实现数据发送

三、软件代码

代码如下(示例):

1.马达模块

Motor.c

一个电机2个引脚,一正一负驱动,通过对引脚赋值高低电平进行方向控制。

#include "Motor.h"
#include "gpio.h"
#include "main.h"


void Lower(){
	HAL_GPIO_WritePin(Motor1_1_GPIO_Port,Motor1_1_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(Motor1_2_GPIO_Port,Motor1_2_Pin,GPIO_PIN_SET);

	HAL_GPIO_WritePin(Motor2_1_GPIO_Port,Motor2_1_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(Motor2_2_GPIO_Port,Motor2_2_Pin,GPIO_PIN_SET); 
}

void Upper(){
	HAL_GPIO_WritePin(Motor1_1_GPIO_Port,Motor1_1_Pin,GPIO_PIN_SET);
	HAL_GPIO_WritePin(Motor1_2_GPIO_Port,Motor1_2_Pin,GPIO_PIN_RESET);

	HAL_GPIO_WritePin(Motor2_1_GPIO_Port,Motor2_1_Pin,GPIO_PIN_SET);
	HAL_GPIO_WritePin(Motor2_2_GPIO_Port,Motor2_2_Pin,GPIO_PIN_RESET); 
}


void Left(){
	HAL_GPIO_WritePin(Motor1_1_GPIO_Port,Motor1_1_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(Motor1_2_GPIO_Port,Motor1_2_Pin,GPIO_PIN_SET);

	HAL_GPIO_WritePin(Motor2_1_GPIO_Port,Motor2_1_Pin,GPIO_PIN_SET);
	HAL_GPIO_WritePin(Motor2_2_GPIO_Port,Motor2_2_Pin,GPIO_PIN_RESET); 
}


void Right(){
	HAL_GPIO_WritePin(Motor1_1_GPIO_Port,Motor1_1_Pin,GPIO_PIN_SET);
	HAL_GPIO_WritePin(Motor1_2_GPIO_Port,Motor1_2_Pin,GPIO_PIN_RESET);

	HAL_GPIO_WritePin(Motor2_1_GPIO_Port,Motor2_1_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(Motor2_2_GPIO_Port,Motor2_2_Pin,GPIO_PIN_SET); 
}

void Stop(){
	HAL_GPIO_WritePin(Motor1_1_GPIO_Port,Motor1_1_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(Motor1_2_GPIO_Port,Motor1_2_Pin,GPIO_PIN_RESET);

	HAL_GPIO_WritePin(Motor2_1_GPIO_Port,Motor2_1_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(Motor2_2_GPIO_Port,Motor2_2_Pin,GPIO_PIN_RESET); 
}

Motor.h

#ifndef _MOTOR_H_
#define _MOTOR_H_

void Upper(void);
void Lower(void);
void Left(void);
void Right(void);
void Stop(void);

#endif

 2.main.c

uint8_t Receive;
while (1)
{
	HAL_UART_Receive(&huart1,&Receive,1,HAL_MAX_DELAY);//等待蓝牙发送数据
	if(Receive == 'w')
		Upper();
	else if(Receive == 's')
		Lower();
	else if(Receive == 'a')
		Left();
	else if(Receive == 'd')
		Right();
	else
		Stop();
}

四、手机蓝牙APP

在手机蓝牙APP上开启编辑模式,修改按钮发送数据,连接蓝牙后就可以发送数据实现控制

                                        

### 使用HAL进行蓝牙配置 #### 配置CubeMX中的UART接口 为了使STM32能够通过蓝牙模块接收命令并控制电机,需先利用STM32CubeMX软件完成基本设置。打开STM32CubeMX后选择对应的微控制器型号,在Pinout&Configuration界面找到USART外设,并将其模式设定为Asynchronous异步串行通讯方式[^1]。 #### 初始化UART结构体变量 在`main.c`文件中会自动生成如下形式的全局句柄声明: ```c UART_HandleTypeDef huart1; ``` 此句柄用于后续调用各种与该UART实例有关的操作函数,比如初始化、发送以及接收数据等操作。 #### 编写接收处理逻辑 当接收到特定字符时执行相应动作,例如移动方向或停止运动。下面展示了如何依据不同按键指令来操控小车的动作: ```c uint8_t Receive; while (1) { HAL_UART_Receive(&huart1, &Receive, 1, HAL_MAX_DELAY); if(Receive == 'w') Upper(); else if(Receive == 's') Lower(); else if(Receive == 'a') Left(); else if(Receive == 'd') Right(); else Stop(); } ``` 上述代码片段实现了简单的键盘遥控功能,其中每个条件分支对应着不同的行驶状态转换方法定义于其他头文件内(如_Motor.h_),这些方法负责实际驱动硬件组件工作以改变车辆姿态。 #### 设置HC-05蓝牙模块的工作模式 对于采用HC-05作为无线传输媒介的情况而言,可能还需要进入其特有的AT命令集环境调整参数,像切换主/从角色之类的高级选项都依赖于此过程完成。这通常涉及到短按KEY按钮进入配置阶段,之后可以通过向BT模块发送一系列预定义好的字符串来进行必要的更改[^2]。 #### 注意事项 值得注意的是,在某些应用场景下如果存在多个蓝牙连接,则应确保关闭不再使用的配对关系以免造成干扰;另外就是务必按照产品手册指导正确连线并且遵循官方推荐的最佳实践指南实施开发活动。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值