发 帖  
原厂入驻New
实战多通道高速精密测温仪的全系列设计教程,以实际项目为依托,提升工程师核心竞争力!→点击立即抢购←

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

2018-8-31 14:57:34  8369 STM32 蓝牙模块 蓝牙小车
分享
5
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里)


游客,如果您要查看本帖隐藏内容请回复



L298N_电机驱动模块_程序书(1).doc (722.5 KB, 下载次数: 45)



STM32F103C8最小系统资料(1).zip (2.76 MB, 下载次数: 58)



源代码.zip (6.32 MB, 下载次数: 250)















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

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


凤凰凤凰家 2018-8-31 15:10:44

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


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





1回复

举报

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

HR8FV@V96]GUEN8L$BBSF.png (203.83 KB, 下载次数: 22)

HR8FV@V96]GUEN8L$BBSF.png

IMG_20180831_104954.jpg (2.41 MB, 下载次数: 17)

IMG_20180831_104954.jpg

IMG_20180831_105023.jpg (3.11 MB, 下载次数: 14)

IMG_20180831_105023.jpg

S0$G]12FP0}`X~4$}PJ~%@T.png (10.94 KB, 下载次数: 16)

S0$G]12FP0}`X~4$}PJ~%@T.png

SDHM}W()FH[2}C[JMEKIBGJ.png (39.21 KB, 下载次数: 19)

SDHM}W()FH[2}C[JMEKIBGJ.png
回复

举报

凤凰凤凰家 2018-9-1 08:21:11
蓝牙程序也补上

[WE0H~X1$@_H}K@%S_`20RN.png (113.1 KB, 下载次数: 19)

[WE0H~X1$@_H}K@%S_`20RN.png
回复

举报

1202050224 2019-8-12 14:07:10
很好的资料  学习了 哈哈哈哈哈哈哈哈哈
回复

举报

hnlouji 2019-8-10 16:19:38
我想试试下载来做个小车玩玩。
回复

举报

boomh 2019-8-8 17:27:17
真好呀 这是个好东东
回复

举报

Dreambuilding 2019-8-5 10:20:15
学习下,谢谢楼主分享
回复

举报

对方正在0 2019-8-1 20:28:43
检验合格v计划v韩国v结婚计划包括基本就看见你看
回复

举报

生如夏花_ 2019-7-23 17:36:15
本帖最后由 生如夏花_ 于 2019-7-23 17:43 编辑

十分感谢,十分感谢找了两天的程序,终于找到了,非常有用
回复

举报

不错2 2019-7-19 11:11:29
请问格式化串口输出函数有神魔作用
回复

举报

白日梦我 2019-7-12 12:00:59
那这个怎么接线啊
回复

举报

mr11 2019-5-28 23:40:01
多谢分享  嘻嘻嘻
回复

举报

zzxx120021 2019-5-17 16:48:17
我想问问 为什么连接上了 小车没反应 AT设置也不回应
回复

举报

浅笑无恨 2019-5-11 17:14:07
看看,学习一下
回复

举报

royal90 2019-5-6 09:30:42
谢谢分享,蓝牙配MCU!!!
1回复

举报

  • 宁静致远fcy 2019-5-6 16:05

    《基于蓝牙BLE的APP编程实战快速入门》5月7号晚8点正式开播啦~由李旭枝老师根据自身多年工作经验对知识点进行重点讲解,主要内容包括1、区块链手环项目介绍

    2、BLE(4.0)通讯原理介绍

    3、BLE跟android 通讯编程实战

    4、BLE 跟 IOS  通讯编程实战
    本次直播免费,点击以下链接入群关注即可获得观看权限,欢迎报名~
    http://t.elecfans.com/live/838.html

王正帅 2019-4-28 00:51:46
支持,支持,支持
!!!!!!!!!!!!!!!!!!!!!!!!
1回复

举报

  • 宁静致远fcy 2019-5-6 16:06

    《基于蓝牙BLE的APP编程实战快速入门》5月7号晚8点正式开播啦~由李旭枝老师根据自身多年工作经验对知识点进行重点讲解,主要内容包括1、区块链手环项目介绍

    2、BLE(4.0)通讯原理介绍

    3、BLE跟android 通讯编程实战

    4、BLE 跟 IOS  通讯编程实战
    本次直播免费,点击以下链接入群关注即可获得观看权限,欢迎报名~
    http://t.elecfans.com/live/838.html

Frost1066 2019-4-8 12:40:36
谢谢大佬的分享
1回复

举报

  • 宁静致远fcy 2019-5-6 16:06

    《基于蓝牙BLE的APP编程实战快速入门》5月7号晚8点正式开播啦~由李旭枝老师根据自身多年工作经验对知识点进行重点讲解,主要内容包括1、区块链手环项目介绍

    2、BLE(4.0)通讯原理介绍

    3、BLE跟android 通讯编程实战

    4、BLE 跟 IOS  通讯编程实战
    本次直播免费,点击以下链接入群关注即可获得观看权限,欢迎报名~
    http://t.elecfans.com/live/838.html

Frost1066 2019-4-8 12:32:43
谢谢分享。。。。。。。。
1回复

举报

  • 宁静致远fcy 2019-5-6 16:07

    《基于蓝牙BLE的APP编程实战快速入门》5月7号晚8点正式开播啦~由李旭枝老师根据自身多年工作经验对知识点进行重点讲解,主要内容包括1、区块链手环项目介绍

    2、BLE(4.0)通讯原理介绍

    3、BLE跟android 通讯编程实战

    4、BLE 跟 IOS  通讯编程实战
    本次直播免费,点击以下链接入群关注即可获得观看权限,欢迎报名~
    http://t.elecfans.com/live/838.html

szmmgg 2019-4-3 14:28:20
支持一下,不知用哪个版本的编译软件
1回复

举报

  • 宁静致远fcy 2019-5-6 16:07

    《基于蓝牙BLE的APP编程实战快速入门》5月7号晚8点正式开播啦~由李旭枝老师根据自身多年工作经验对知识点进行重点讲解,主要内容包括1、区块链手环项目介绍

    2、BLE(4.0)通讯原理介绍

    3、BLE跟android 通讯编程实战

    4、BLE 跟 IOS  通讯编程实战
    本次直播免费,点击以下链接入群关注即可获得观看权限,欢迎报名~
    http://t.elecfans.com/live/838.html

余生12138 2019-3-29 16:35:16
下来看看 最近做东西 找点资料参考一下
回复

举报

余生12138 2019-3-29 16:34:57
下来看看 最近做东西 找点资料参考一下
1回复

举报

  • 宁静致远fcy 2019-5-6 16:07

    《基于蓝牙BLE的APP编程实战快速入门》5月7号晚8点正式开播啦~由李旭枝老师根据自身多年工作经验对知识点进行重点讲解,主要内容包括1、区块链手环项目介绍

    2、BLE(4.0)通讯原理介绍

    3、BLE跟android 通讯编程实战

    4、BLE 跟 IOS  通讯编程实战
    本次直播免费,点击以下链接入群关注即可获得观看权限,欢迎报名~
    http://t.elecfans.com/live/838.html

martinedies 2019-3-14 18:27:26
emm,能问一下源代码为什么一直有一个警告吗
回复

举报

secwea 2019-3-13 20:36:02
我想试试下载来做个小车玩玩
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

123下一页
发经验
课程
    关闭

    站长推荐 上一条 /10 下一条