小白也可以做的STM32RC蓝牙小车的大概思路

功能:用蓝牙连接手机 在手机app上控制小车的运行(本人是设置了刹车键、左转键、右转键,高速键、低速键)

主要实现过程:

1.初始化各个部件(具体有TIM1,TIM8,USART1,RCC,NVIC,GPIO)

2.串口与蓝牙连接[本人用的是带按键的HC05蓝牙模块],这一部分的连接花了我一整天的时间,然后我总结了以下连接要点:

①这种带按键的要按着按键然后通过USB转TTL模块接上电脑,之后打开串口助手才可以进入AT指令配置模式配置AT指令【之前有一次没有按着按键都不能进入AT指令配置模式 导致配置失败】

②我们要先在USB转TTL模块先用手机或者其他设备去连接蓝牙

【要先配置成从模式(我之前也因为配置成主模式而导致失败 要明确主模式是主动连接别人的 从模式是被别人主动连接的)

然后要设置好波特率,记住在AT指令配置时用串口助手发送时波特率是默认且固定的,而我们用AT配置的波特率是单片机串口与蓝牙通信的,可变的,

还可以改一下名字 在在连接蓝牙的时候比较好找】,记住手机要在蓝牙模块AT指令配置后通过USB转TTL供电时直接先连一次,之后再将蓝牙拔到单片机的串口上,然后再用手机连接一次(因为将蓝牙转移到单片机串口的过程是掉电的,所以得重连)

3.接下来说一下代码还有外设分配的部分,考虑小车需要刹车功能,所以前后轮都使用了高级定时器,项目需要用到的两个前轮是由舵机控制,两个后轮是由电机控制,舵机和电机的原理详看上级篇笔记博客,我简略地说一下原理:

①舵机(我们只需设置一个通道)

系统时钟除以定时器设置的分频是定时器时钟(单位M),定时器时钟值分之一即定时器的计数器计数一次的时间,然后period值的含义是每个周期计数个数,故计数一次周期的时间为period(1/定时器时钟)

然后舵机是通过高电平持续多长时间去控制转动角度的

然后可以通过计数一次的时间和相应的控制转动时间去计算要计数到几电平才会跃变,并将这个值写入相应寄存器CCRx

由于前轮只具备控制方向角度的功能,并没有轮胎转动的功能,所以我们不需要配置刹车功能

关于舵机的角度 我们可以设置一个函数将舵机的角度转换【我们从图里可以知道高电平的时间越长 转动角度越大(在0.5ms到2.5ms里 即250次计数到1250次之间)】 控制CCR里的值去控制其角度 

②电机

配置四个通道(分别对应两个电机线+ 两个电机线-),在CubeMX里设置模式 和pulse值(当计数器计数到Pulse时会产生跳变 然后如果需要设置这个位可以配置CCR 寄存器的相关位)

电机的原理 是一个电机线输出高电平 另一个电机线输出低电平就可以控制转动 但是具体向前转还是向后转得自己去调试 然后如果高电平越高 则转的越快 高电平较低 则速度较慢 我初始化时是将其配置成pulse=5000的 因为整个peiord是10000 所以是匀速转动的 

然后可以用两个函数去配置速度 一个将配置高电平的电机线的CCR配置成1000设为低速 另一个将其设为9000控制高速(这两个配置是在模式设置成mode1 mode1模式指的是先输出高电平 pulse设为9000的意义是计数器在一个周期内计到9000才跳变成低速)

还有一个刹车的函数 在数据手册上找刹车对应的引脚写入高电平即可刹车【注意不能将刹车对应的gpio写成浮空模式 不然会一直置高一直刹车(对于PA6而言) 要置低】

③蓝牙

自己定义一个蓝牙的通信协议 比如我用的通信协议是接收到2C 12 ……5B形式的才是有效数据 然后我们可以通过if else 或switch case 去操作接收到什么要执行什么指令

比如我们利用存放接收数据的数组ruffer[]设置灯的开关,我们令ruffer[2]写入0x11时灯亮,则可以在接收中断函数里写入if(ruffer[2]==0x11){HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);}//打开PA8灯

可以用类似串口助手的相关软件去完成发送命令的操作 本人使用的是在CSDN上别人分享的一个手机蓝牙串口助手APP 需要的可以去搜一下

可以通过APP的按键去触发单片机的接收中断(APP可以设置某个键按下是发送什么值)把发送给单片机的数据用if函数去进行对比,相应的接收值会进行不同的中断处理 

即可以if(ruffer[2]==0x22){//左转函数}

if(ruffer[2]==0x22){//右转函数}

这个STM32RC蓝牙小车的大概思路就是这样 谢谢大家

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值