基于Keil_v5开发环境 stm32f103c6t6开发板 L298N电机驱动模块 HC-05蓝牙模块的双驱蓝牙小车教程(基础版)
一、所需材料



面包板电源模块 HC-05蓝牙模块 stm32c6t6开发板



ST-LINK V2下载器 L298N迷你板 小车底板材料
电脑(需要烧录代码到开发板中)
杜邦线若干(没有的话也可以用普通电线代替,只是用来导电有接口,没有什么特殊性)
手机端Bluetooth Electronics app(去浏览器下载即可)
二、软件下载及环境搭建
本项目采用的是Keil_v5开发环境
具体环境搭建步骤可以参考其它博主的详细教程,此处不再赘述
需要注意的是该软件创建工程的时候比较麻烦,仔细一点
·测试是否搭建成功(点灯测试)
源代码如下:
#include "stm32f10x.h"
// 主函数
int main(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
//GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
while (1) {
}
}
环境搭建成功的话,可以观察到开发板上的指示灯常亮

刚开始插上电脑的时候,由于stm32内原先有测试程序,所以会出现闪烁现象,烧录代码之后绿色指示灯常亮即环境搭建成功,可以进行后续步骤啦
如果测试未成功,建议检查接线以及是否缺少相关库文件
三、组装接线
可以参考作者在b站发布的详细教程
基于Keil_v5开发环境 stm32f103c6t6开发板 L298N电机驱动模块 HC-05蓝牙模块的双驱蓝牙小车教程(基础版)_哔哩哔哩_bilibili
完成图如下所示:

四、烧录代码
这里就直接给出源代码了:
#include "stm32f10x.h"
// 定义电机控制引脚
#define MOTOR1_FORWARD_PIN GPIO_Pin_0
#define MOTOR1_BACKWARD_PIN GPIO_Pin_1
#define MOTOR2_FORWARD_PIN GPIO_Pin_10
#define MOTOR2_BACKWARD_PIN GPIO_Pin_11
// 初始化串口
void USART_Config(void) {
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 打开串口和GPIOA的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
// 配置USART的TX引脚(PA9)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // TX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置USART的RX引脚(PA10)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置USART1参数
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
// 启动USART1
USART_Cmd(USART1, ENABLE);
}
// 发送数据到蓝牙
void USART_SendDataDirect(uint16_t Data) {
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待数据寄存器为空
USART_SendData(USART1, Data); // 发送数据
}
// 电机控制函数
void Motor_Control(uint8_t command) {
// 通过接收到的命令来控制电机
if (command == 'F') { // 前进
GPIO_SetBits(GPIOB, MOTOR1_FORWARD_PIN);
GPIO_ResetBits(GPIOB, MOTOR1_BACKWARD_PIN);
GPIO_SetBits(GPIOB, MOTOR2_FORWARD_PIN);
GPIO_ResetBits(GPIOB, MOTOR2_BACKWARD_PIN);
}
else if (command == 'B') { // 后退
GPIO_ResetBits(GPIOB, MOTOR1_FORWARD_PIN);
GPIO_SetBits(GPIOB, MOTOR1_BACKWARD_PIN);
GPIO_ResetBits(GPIOB, MOTOR2_FORWARD_PIN);
GPIO_SetBits(GPIOB, MOTOR2_BACKWARD_PIN);
}
else if (command == 'L') { // 左转
GPIO_ResetBits(GPIOB, MOTOR1_FORWARD_PIN);
GPIO_SetBits(GPIOB, MOTOR1_BACKWARD_PIN);
GPIO_SetBits(GPIOB, MOTOR2_FORWARD_PIN);
GPIO_ResetBits(GPIOB, MOTOR2_BACKWARD_PIN);
}
else if (command == 'R') { // 右转
GPIO_SetBits(GPIOB, MOTOR1_FORWARD_PIN);
GPIO_ResetBits(GPIOB, MOTOR1_BACKWARD_PIN);
GPIO_ResetBits(GPIOB, MOTOR2_FORWARD_PIN);
GPIO_SetBits(GPIOB, MOTOR2_BACKWARD_PIN);
}
else { // 停止
GPIO_ResetBits(GPIOB, MOTOR1_FORWARD_PIN | MOTOR1_BACKWARD_PIN);
GPIO_ResetBits(GPIOB, MOTOR2_FORWARD_PIN | MOTOR2_BACKWARD_PIN);
}
}
// 主函数
int main(void) {
// 配置电机控制引脚
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = MOTOR1_FORWARD_PIN | MOTOR1_BACKWARD_PIN |
MOTOR2_FORWARD_PIN | MOTOR2_BACKWARD_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 设置为推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 配置引脚速度
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 初始化串口
USART_Config();
while (1) {
// 检查是否接收到数据
if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET) {
uint8_t command = USART_ReceiveData(USART1); // 接收数据
Motor_Control(command); // 根据命令控制电机
}
}
}
我们在编写代码的时候,对于引脚的定义是可以修改的,具体可以参考stm32f103c6t6开发板的引脚定义

代码编写完成后先进行Build,图中红色圈圈处

然后进行下载

注意:下载器和sttm32的接线引脚一一对应即可,注意供电的选择不要接错线就OK
五、手机端Bluetooth Electronics app按键设置

找到添加这些按钮即可,注意每一个按钮要设置参数,前进为F,后退为B,左转为L,右转为 R,注意每个按钮松下即是S,这样按下即走,松开即停
六、连接蓝牙测试功能是否正常
这步需要手机端先找到蓝牙连接上,然后直接点run即可

完成后大概就是这个样子,可以正常跑起来啦,经测试功能正常,本项目到此完成!
制作不易,最后喜欢的话可以收藏+关注一波哦!后续还会更新升级避障版本的教程哦以及其它资料,有什么问题欢迎评论区交流~
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)