STM32蓝牙遥控小车

基于STM32F103系列的蓝牙控制小车以及PWM调速
代码下载

HC-06蓝牙模块

使用蓝牙模块前,需要先对其进行一些设置:
使用USB转TTL模块将蓝牙模块连接到电脑,蓝牙RX连接USB-TTL的TX;蓝牙TX接UCB-TTLRX;VCC接5V,GND接GND。这样就可以使用串口与蓝牙进行通讯,通过串口发送AT指令对蓝牙进行一些设置。

打开串口调试软件,蓝牙模块默认的波特率为9600,在串口助手中将波特率设置为9600,其他几项默认就可以。
打开串口,发送“AT”,如果蓝牙没有问题,应该就会返回“OK”。此时就可以对蓝牙的波特率、名字、配对密码等进行设置了。
串口调试助手

设置波特率

一般我们用的波特率为115200,发送“AT+BAUD8”,返回“OK”,此时波特率就设置完成了。如果想设置成其他的波特率修改“AT+BAUD8”中的编号“8”就可以了。编号对应波特率如下:1–1200 2–2400 3–4800 4-9600 5–19200 6–38400 7–57600 8–115200 9–230400 A–460800 B–921600 C–1382400

设置蓝牙名称

发送:AT+NAMEname,“name”就是想要设置的蓝牙名称,接着发送“AT+RESET”指令,让蓝牙模块重启,就可以在手机或者电脑上搜到你的蓝牙了。
设置配对密码
一般我们使用默认配对密码,默认密码为1234或者0000。但是如果你想设置成其他的配对密码,发送“AT+PINpassword”,“password”为想要设置的密码。至此就完成了蓝牙模块的基本设置,就可以使用手机或者电脑连接蓝牙了。但是想要给蓝牙模块发送消息还需要一个蓝牙串口软件。

先打开手机设置,将蓝牙模块和手机进行配对,然后打开蓝牙串口软件,点击右上角连接到蓝牙模块。连接成功后就可以用手机给蓝牙发送消息了,蓝牙接受到消息后通过串口再将消息发送到电脑上电脑也可以通过蓝牙发送消息到手机上,实现手机电脑的无线通信。
手机串口软件

而遥控小车只是将电脑换成了STM32单片机,通过手机发送指令数据,单片机接收到指令数据就执行指定的程序。通过配置STM32的USART串口与蓝牙模块通信就可以接受数据了。

STM32 USART3配置

   GPIO_InitTypeDef GPIO_InitStrue;  //定义结构体变量USART_InitTypeDef USART_InitStrue;  NVIC_InitTypeDef NVIC_InitStrue;  //打开各个外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//usart3的RX与TX引脚配置 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;  GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  GPIO_Init(GPIOB,&GPIO_InitStrue);  GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;  GPIO_InitStrue.GPIO_Pin=GPIO_Pin_11;  GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  GPIO_Init(GPIOB,&GPIO_InitStrue);  USART_InitStrue.USART_BaudRate=115200;  //波特率设置与蓝牙一样USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  无硬件数据流控制USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//收发模式USART_InitStrue.USART_Parity=USART_Parity_No;  //无奇偶校验位USART_InitStrue.USART_StopBits=USART_StopBits_1; //一个停止位 USART_InitStrue.USART_WordLength=USART_WordLength_8b;  //字长为8位数据格式USART_Init(USART3,&USART_InitStrue); //初始化USART_Cmd(USART3,ENABLE);//使能USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//串口中断使能NVIC_InitStrue.NVIC_IRQChannel=USART3_IRQn;  //中断通道选择NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE; //通道使能NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1; //抢占优先级 NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;  //子优先级NVIC_Init(&NVIC_InitStrue);  void USART3_IRQHandler(void)  //串口3中断服务程序
{  if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET) //接受标志位{  res= USART_ReceiveData(USART3);//将接收到的数据保存到变量resUSART_SendData(USART3,res);  //发送接收到的数据验证是否发送成功}
}  

这样就完成了STM32的串口设置,将蓝牙模块的RX,TX,与PB11,PB10连接,再用手机发送消息到蓝牙,如果手机接收到了发送的消息就表明配置成功。

直流有刷电机驱动

想要驱动电机,必须得有一个电机驱动器,我这里用的是L298N

逻辑输入接口:左边两个控制输出A,输入00则电机不转,输入10正转,输入01反转。输出B同理。如果想要电机左转或者右转,只需让电机一边正转,一边反转即可
供电:采用12V的电源接12V供电接口和GND;5V供电可以输出5V的电压,可以用此接口接单片机的VCC,GND接单片机的GND。
调速:如果想要对电机调速,通道A和通道B的跳线帽拿下来,使能口接PWM波即可

电机逻辑控制引脚初始化

GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);

电机驱动的逻辑输入接口分别接PA4、PA5、PA3、PA8。

电机蓝牙控制


void motor_f(void)
{M1=1;M2=0;M3=1;M4=0;
}void motor_b(void)
{M1=0;M2=1;M3=0;M4=1;
}void motor_r(void)
{M1=1;M2=0;M3=0;M4=1;
}void motor_l(void)
{M1=0;M2=1;M3=1;M4=0;}
void motor_s(void)
{M1=0;M2=0;M3=0;M4=0;
}
void motor_control(void)
{if(res=='5')motor_s();//接收到数据5停止else if (res=='1')motor_b();//接收到1后退else if(res=='2')motor_f();//接收到2前进else if(res=='3')motor_l();//接收到3左转else if(res=='4')motor_r();//接收到4右转}

利用手机发送指定指令的数据就可以控制小车的前进,后退,左转,右转了。
如果想要对小车调速,可以使用STM32输出PWM来调速。
采用STM32F103的TIM输出两路可调占空比的PWM来进行电机调速
TIM3配置

void TIM3_CH1_PWM_Init(u16 per,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;GPIO_InitTypeDef GPIO_InitStructure;//时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 配置GPIO的模式和IO口 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);TIM_TimeBaseInitStructure.TIM_Period=per;   //自动装载值TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);    TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;//PWM2模式TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;//极性低TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//输出通道使能TIM_OC1Init(TIM3,&TIM_OCInitStructure); //输出比较通道1初始化TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OC2Init(TIM3,&TIM_OCInitStructure); //输出比较通道2初始化TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能TIMx在 CCR1 上的预装载寄存器TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能TIMx在 CCR1 上的预装载寄存器TIM_ARRPreloadConfig(TIM3,ENABLE);//使能预装载寄存器TIM_Cmd(TIM3,ENABLE); //使能定时器}

配置好 per和psc值后调用 TIM_SetCompare1(TIM3,xxx)和
TIM_SetCompare2(TIM3,xxx)函数就可以输出PWM波了;通过调整xxx的值来调整占空比实现对电机的调速。

整个工程文件

STM32蓝牙小车以及PWM调速相关推荐

  1. 基于STM32单片机的直流电机PWM调速(Proteus仿真+程序)

    编号:9 基于STM32单片机的直流电机PWM调速 功能描述: 由 STM32单片机+液晶1602显示模块+键盘模块+L298N电机驱动模块+直流电机 1.采用STM32F103单片机为主控制器 2. ...

  2. STM32 学习笔记1-智能小车-基于PWM 调速 的电机设置

    目录 本文章主要介绍 STM32 电机相关软件的配置,PWM的相关介绍,csdn上面有很多资料 硬件: PWM(Pulse Width Modulation) 介绍: 基本定时器(TIM6/7) 通用 ...

  3. pwm调速流程图小车_51单片机智能小车《pwm调速按键控制小车动作》

    //P1.0-P1.7分别对应小车1N1-1N8. #include           //头文件 #define uint unsigned int  //宏定义 #define uchar un ...

  4. 51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1--前进 按键2--后退 按键3--加速 按键4--减速 (板子上只有四个按键) 串口控制 '1'--前进 ...

  5. pwm调速流程图小车_51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1--前进 按键2--后退 按键3--加速 按键4--减速 (板子上只有四个按键) 串口控制 '1'--前进 ...

  6. 51 PWM调速蓝牙小车

    文章目录 前言 一.硬件配置 二.相关接线 1.L298N驱动模块 2.HC-05蓝牙模块 3.接线图解 三.PWM调速 四.完整代码 总结 前言 当你看到无人机升天.平衡车的落地以及超声波避障等技术 ...

  7. 基于arduino的蓝牙小车 超声波测距 OLED 屏幕显示数据 超声波避障 蓝牙控制 pwm调速

    const int TrigPin = 2; //超声波引脚定义 const int EchoPin = 3; //超声波引脚定义 float cm; //测距参数 //l298n驱动上对应的接口 i ...

  8. 小车PWM调速-模式选择

    小车PWM调速-模式选择 写好程序后,接上蓝牙模块,打开手机蓝牙助手,小车运行效果:首先进行模式选择,有快速模式.中速模式.慢速模式,按下模式选择,小车接收到串口信号后(串口接收指示灯会闪一下),便可 ...

  9. 小车PWM调速-串口控制

    小车PWM调速-串口控制 串口控制调速,即通过串口修改speed的值, 1.将上节PWM调速用到的定时器0源文件和头文件引入进来,工程文件如下 mian.c:主函数 Motor.c:小车前进.后退.左 ...

最新文章

  1. 苹果裁员逾200人,拿无人驾驶“开刀”
  2. iOS中判断程序是不是第一次运行(新手引导界面用)
  3. 为什么有的项目不能打断点_《街霸:对决》:有效利用“打断”机制,让玩家在战斗中越级战斗...
  4. verilog for循环_HDLBits:在线学习 Verilog (二十四 · Problem 115-119)
  5. Python技巧-只用一行代码轻松实现图片文本识别
  6. adb启动失败 ADB server didn't ACK
  7. python笔记之序列(set的基本使用和常用操作)
  8. vb访问mysql容易死机_VB访问MySQL
  9. 动物和计算机-自组织是悬空的钢丝
  10. 发光的“盖面神器”!全新Kindle青春版体验评测来了
  11. 从开发者到讲师的心路历程与必知必会 | 原力计划
  12. 学生信息管理系统_C语言实现_单链表
  13. 论文笔记:公钥密码算法的硬件实现及侧信道攻击研究(RSA部分)
  14. 你还在用命令看日志?快用 Kibana 吧,一张图片胜过千万行日志!
  15. Cocos Creator 微信登录授权按钮适配
  16. 秀米怎么添加附件链接,如Word、Excel、Pdf等
  17. 粒子群算法求解多元函数最值问题
  18. 中华万年历头条数据聚合优化之路
  19. Docker的安装以及解决启动失败问题
  20. Libevent 学习七:Libevent 两个实例

热门文章

  1. 区块链技术如何赋能公共资源招采管理服务?
  2. STL容器——案例版
  3. 百度图片批量下载助手
  4. CentOS 6.3安装chrome
  5. MSDC 4.3 接口规范(18)
  6. ABAQUS运行问题总结
  7. PTA 7-10 字符转换 (15分)
  8. DeepStream 快速入门
  9. 输入法自定义短语笔记/md常用配置/搜狗输入法自定义词库推荐
  10. 人工智能(AI)和机器学习——未来的发展趋势