目录
一、硬件配置
1.作品实图
2.L298n电机驱动模块
3.JDY-31蓝牙模块
二、软件配置
1.Stm32CubeMx配置引脚
2.串口通信
三、软件代码
1.马达模块
2.main.c
四、手机蓝牙APP
总结
配件:
(正面) (反面)
1、单片机在CubeMx上配置四个引脚连接逻辑输入四个引脚
2、将两个马达分别引出两条线接输出A和输出B,同时接跳线帽使能通道A和通道B
3、接入7-12V电源在12V供电口(可以在此处作开关处理,将电池正极连接开关一端,开关另一端接入12V供电),使电源转换为5v接入单片机(单片机最高5v),为单片机供电
4、将供电GND和5V供电接入单片机
这部分不作多解释,详细可以查看手册。
软件:
这里配置PA1-A4四个引脚作马达引脚,A1-A2马达1,A3-A4马达2
这里波特率需要和蓝牙波特率相同,否则无法实现数据发送
代码如下(示例):
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
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上开启编辑模式,修改按钮发送数据,连接蓝牙后就可以发送数据实现控制