蓝牙技术
直播中

郭鑫

6年用户 19经验值
私信 关注
[讨论]

【参赛】stm32蓝牙小车详解(源程序+配件详解)

`
STM32蓝牙小车
20188月31日



一、
摘要
1. “基于stm32f4的蓝牙控制小车”是一个基于意法半导体ARM公司生产的STM32F4 DISCOVERY开发板的集电机驱动模块、电源管理模块、stm32f4主控模块、蓝牙串口通信模块、android控制端模块通俗讲:用手机控制)。
2. 蓝牙的创始人是瑞典爱立信公司,蓝牙技术是一种无限数据与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。手机之间通过蓝牙实现数据共享成为常理,将手机变为遥控器为人们的生活带来无限方便。遥控小车在工业、国防、科研等领域应用越来越广泛,例如说:消防遥控小车、探测小车等。


二、引言
本文详细阐述了使用蓝牙通信的手机遥控小车前行、倒退、左转、右转和停止等功能的软硬件设计过程。
而我自己也是刚刚做完我们学校的校内赛,以下都是我自己的经验之谈。
在做蓝牙小车前期,感觉网上的资料大多不太详细。现在我总结了一下,不足之处请大家谅解。



三、系统方案
该系统分为电机驱动模块、电源管理模块、主控板、蓝牙通信模块、Android控制端(手机下载串口通讯即可)等5个模块。(我用的是学长们给的stm32模块,大家也可以用网上的模块,都是大同小异的)

四、配件分类
开发板stm32c8t6;电机驱动:l298n;蓝牙模块:HC-05主从机一体蓝牙模块两个)电机(小黄电机,铁电机等);电池、降压模块(LM2596S DC-DC 降压电源模块 )等。附上我们小车的粗糙图:
                       

五、前期工作
1. 蓝牙的配置。
2. 了解stn32c8t6的各个IO口。
3. 了解stn32tiM1~4),知道各个IO口对应的通道。
4. 了解L298驱动模块。
5. 以上我就不一一介绍,下面有文件大家看一下。


六、系统软件设计




1. 首先进行bsp.c的配置


2. 我使用的是A0~3(TIM2)和B6~9(TIM4)的引脚。



3. TIM2的配置(TIM4查表差不多,只要把TIM2的改为TIM4即可,原理请看stm32参考手册。)
  1. void TIM2_Configuration(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         TIM_OCInitTypeDef TIM_OCInitStructure;
  5.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  6.        
  7.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;                           
  8.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                 //复用推挽输出
  9.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  10.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  11.                        
  12.         /* Time base configuration */
  13.         TIM_TimeBaseStructure.TIM_Period = (100- 1);                                        //arr  设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  14.         TIM_TimeBaseStructure.TIM_Prescaler = (7200-1);                                          //分频        psc
  15.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;                                         //时钟分割,一般写0
  16.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                 //设置为向上计数模式
  17.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  18.         /* PWM1 Mode configuration: Channel1*/
  19.         TIM_OCInitStructure.TIM_Pulse = 0;                                                // 初始值
  20.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                           //pwm模式2
  21.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //使能通道
  22.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;        //高电平
  23.        
  24.         TIM_OC1Init(TIM2, &TIM_OCInitStructure);                         
  25.         TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);                        //使能或者失能TIMx在CCR3上的预装载寄存器
  26.         TIM_OC2Init(TIM2, &TIM_OCInitStructure);                         
  27.         TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
  28.         TIM_OC3Init(TIM2, &TIM_OCInitStructure);                         
  29.         TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);                        //使能或者失能TIMx在CCR3上的预装载寄存器
  30.         TIM_OC4Init(TIM2, &TIM_OCInitStructure);                         
  31.         TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);

  32.        
  33.         TIM_ARRPreloadConfig(TIM2, ENABLE);  /* 中断使能 */
  34.         /* TIM3 enable counter */
  35.         TIM_Cmd(TIM2, ENABLE);        /* 使能 */
  36. }


4.初始化串口1(蓝牙数据传输用A9、A10)

  1. void USART1_Configuration(void)
  2. {
  3.         USART_InitTypeDef USART_InitStructure;
  4.         GPIO_InitTypeDef GPIO_InitStructure;
  5.         /* Configure USART1 Rx (PA.10) as input floating */
  6.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  7.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                  //浮空输入模式          
  8.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  9.        
  10.         /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  12.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                          //复用推挽输出
  14.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  15.        
  16.         USART_InitStructure.USART_BaudRate = 38400;                                                //速率115200bps
  17.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;                //数据位8位
  18.         USART_InitStructure.USART_StopBits = USART_StopBits_1;                        //停止位1位
  19.         USART_InitStructure.USART_Parity = USART_Parity_No;                                //无校验位
  20.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;   //无硬件流控
  21.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                                        //收发模式
  22.         /* Configure USART1 */
  23.         USART_Init(USART1, &USART_InitStructure);                                                        //配置串口参数函数
  24.         /* Enable USART1 Receive and Transmit interrupts */
  25.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                    //使能接收中断
  26.         /* Enable the USART1 */
  27.         USART_Cmd(USART1, ENABLE);                          //使能串口
  28. }


5.蓝牙指令程序(在stm32f10x_it.c)


  1. extern int x;//全局声明



6.主函数(里面的数据是我们小车,大家可以自己更改)

  1. int x=0;
  2. int main(void)
  3. {
  4.         BSP_Init();
  5.         while(1)
  6.         {
  7.                         if(x == 1)
  8.                         {
  9.           TIM2->CCR1 = 0;
  10.           TIM2->CCR2 = 99;
  11.                                   TIM2->CCR3= 0;
  12.           TIM2->CCR4 = 99;
  13.                                   TIM4->CCR1 = 0;
  14.           TIM4->CCR2 = 99;
  15.                                   TIM4->CCR3= 0;
  16.           TIM4->CCR4 = 99;
  17.                         }       
  18.      if(x == 2)
  19.                         {
  20.           TIM2->CCR1 = 0;
  21.           TIM2->CCR2 = 0;
  22.                                   TIM2->CCR3 = 0;
  23.           TIM2->CCR4 = 0;
  24.                                   TIM4->CCR1 = 0;
  25.           TIM4->CCR2 = 0;
  26.                                   TIM4->CCR3 = 0;
  27.           TIM4->CCR4 = 0;
  28.                         }
  29.                         if(x == 3)
  30.                         {
  31.           TIM2->CCR1 = 99;
  32.           TIM2->CCR2 = 0;
  33.                                   TIM2->CCR3 = 99;
  34.           TIM2->CCR4 = 0;
  35.                                   TIM4->CCR1 = 99;
  36.           TIM4->CCR2 = 0;
  37.                                   TIM4->CCR3 = 99;
  38.           TIM4->CCR4 = 0;
  39.                         }
  40.      if(x == 4)
  41.                         {
  42.           TIM2->CCR1 = 0;
  43.           TIM2->CCR2 = 99;
  44.                                   TIM2->CCR3 = 99;
  45.           TIM2->CCR4 = 0;
  46.                                   TIM4->CCR1 =0;
  47.           TIM4->CCR2 =99;
  48.                                   TIM4->CCR3 = 99;
  49.           TIM4->CCR4 = 0;
  50.                         }
  51.      if(x == 5)
  52.                         {
  53.           TIM2->CCR1 = 99;
  54.           TIM2->CCR2 = 0;
  55.                                   TIM2->CCR3 = 0;
  56.           TIM2->CCR4 = 99;
  57.                                   TIM4->CCR1 = 99;
  58.           TIM4->CCR2 = 0;
  59.                                   TIM4->CCR3 = 0;
  60.           TIM4->CCR4 = 99;
  61.                         }                                                                                                       
  62.                 while_1();        // 主要的执行程序
  63.         }       

  64. }
  65. /*********************************************************
  66.                                                                                 printf重定义
  67. **********************************************************/
  68. int fputc(int ch,FILE  *f)
  69. {
  70.         USART_SendData(USART1,(u8)ch);
  71.         while (USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
  72.         return ch;
  73. }

7.最后是提醒一下:
主要执行函数,执行空语句就好了。(在device.c里)


游客,如果您要查看本帖隐藏内容请回复
HC-05 主从机一体蓝牙模块 无线蓝牙串口透传模块 无线模块 1.rar (69.88 KB)
(下载次数: 260, 2018-8-31 11:57 上传)



L298N_电机驱动模块_程序书(1).doc (722.5 KB)
(下载次数: 121, 2018-8-31 11:57 上传)



STM32F103C8最小系统资料(1).zip (2.76 MB)
(下载次数: 114, 2018-8-31 11:58 上传)



源代码.zip (6.32 MB)
(下载次数: 568, 2018-8-31 14:44 上传)















https://bbs.elecfans.com/forum.php?mod=attachment&aid=Njc4ODUyfGMxNmUwZjljYWE2NTY2ZjZiYzVkNzJlZWFkMzcwNWI2fDE3MzUzNzYxNzQ%3D&request=yes&_f=.rarattach://678852.rar

以上就是我做小车比赛的总结,希望对大家有所帮助。我通过这一次小车比赛,也是初步的认识了stm32,希望大家也能通过蓝牙小车程序的配置,了解stm32.


` HR8FV@V96]GUEN8L$BBSF.png IMG_20180831_104954.jpg IMG_20180831_105023.jpg S0$G]12FP0}`X~4$}PJ~%@T.png SDHM}W()FH[2}C[JMEKIBGJ.png [WE0H~X1$@_H}K@%S_`20RN.png

回帖(84)

郭鑫

2018-8-31 15:10:44

RE: 【参赛】stm32蓝牙小车详解(源程序+配件详解)


图片没能上传,实在很抱歉。





1 举报
  • 周凯: 谢谢分享,学习学习。

郭鑫

2018-9-1 08:16:15
这些是剩下的图片,真的很抱歉。
举报

郭鑫

2018-9-1 08:21:11
蓝牙程序也补上
举报

北山独狼

2022-3-31 08:09:49
蓝牙技术,学习学习
举报

北山独狼

2022-3-7 10:51:52
多谢楼主的分享,学习学习
举报

lboy

2022-3-7 09:42:13
谢谢分享
举报

褪色毛衣

2022-1-23 01:41:58
89897974更何况里面,房管局一块
举报

尹会胜

2021-9-25 18:57:33
多谢楼主分享,好人一生平安
举报

AaronLin

2021-4-21 13:40:56
Something special! just study!
举报

AaronLin

2021-4-21 11:55:51
study it ! would you reply all package, thank you!
举报

xbw233

2021-4-1 12:46:50
多谢楼主分享,好人一生平安
多谢楼主分享,好人一生平安
举报

matmat

2021-3-31 17:36:58
谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
举报

gzy1223

2021-3-17 22:03:35
太棒了,这个报告,有很高的参考价值
举报

不慌同学

2021-1-12 20:04:46
可以的反反复复烦烦烦烦烦烦烦烦烦烦烦烦烦烦烦
举报

周财胜

2020-9-27 16:43:24
多谢楼主分享,好人一生平安
多谢楼主分享,好人一生平安
举报

Samuel2020

2020-9-17 16:15:02
厉害,学习了,真是个好东西
举报

银鱼小宝宝

2020-8-25 14:53:35
6666666666666666666666666666666666
举报

wzjhuohua

2020-7-28 15:38:05
小伙子很厉害啊
举报

h1654155340.3769

2020-6-19 19:12:14
666666666666666666666666666666
举报

余一

2020-6-13 12:49:49
需要 学习 谢谢楼主的分享
举报

2020-5-1 15:58:26
谢谢楼主的分享
举报

张泼皮

2020-1-30 11:39:09
学习了 谢谢分享
举报

zy66666

2019-11-29 13:23:34
感谢老哥

.......................................
举报

更多回帖

发帖
×
20
完善资料,
赚取积分