硬件篇:教你做STM32蓝牙小车(基于STM32F103ZET6)

  • 查阅相关元件开发手册的能力

  • 一定的动手能力

准备材料


正点原子STM32精英开发板(STM32F103ZET6)、LM2596降压模块、HC-06蓝牙模块、MG995系列180度舵机、L298N电机驱动、任意品牌遥控车车架带电机、12V聚合物锂电池一块

部分原始材料图片


在这里插入图片描述

程序设计思路


  • STM32利用L298N电机驱动模块控制前后两路直流电机
motor.c

#include “motor.h” //导入led头文件

#include “stm32f10x.h” //导入STM32官方库

#include “stm32f10x_rcc.h” //导入STM32的RCC时钟库

#include “delay.h” //延时库

void Motor_12_Config(void) //定义初始化函数

{

GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO_InitTypeDef结构体

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOF, ENABLE); //开启引脚时GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; //定义IN引脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置输出功率

GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化GPIOF的引脚参数,写进

GPIO_ResetBits(GPIOF,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); //所有引脚拉低

}

void Motor_1_STOP(void)

{

IN1(High);

IN2(High);

}

void Motor_1_PRun(void)

{

IN1(Low);

IN2(High);

}

void Motor_1_NRun(void)

{

IN1(High);

IN2(Low);

}

void Motor_2_STOP(void)

{

IN3(High);

IN4(High);

}

void Motor_2_PRun(void)

{

IN3(Low);

IN4(High);

}

void Motor_2_NRun(void)

{

IN3(High);

IN4(Low);

}

motor.h

#ifndef __MOTOR1_H

#define __MOTOR1_H

#include “stm32f10x.h”

#include “stm32f10x_gpio.h”

#define High 1

#define Low 0

#define IN1(a) if (a) \

GPIO_SetBits(GPIOF,GPIO_Pin_0);\

else \

GPIO_ResetBits(GPIOF,GPIO_Pin_0)

#define IN2(a) if (a) \

GPIO_SetBits(GPIOF,GPIO_Pin_1);\

else \

GPIO_ResetBits(GPIOF,GPIO_Pin_1)

#define IN3(a) if (a) \

GPIO_SetBits(GPIOF,GPIO_Pin_2);\

else \

GPIO_ResetBits(GPIOF,GPIO_Pin_2)

#define IN4(a) if (a) \

GPIO_SetBits(GPIOF,GPIO_Pin_3);\

else \

GPIO_ResetBits(GPIOF,GPIO_Pin_3)

void Motor_12_Config(void);

void Motor_1_STOP(void);

void Motor_1_PRun(void);

void Motor_1_NRun(void);

void Motor_2_STOP(void);

void Motor_2_PRun(void);

void Motor_2_NRun(void);

#endif

  • PWM波控制舵机角度用于转向
PWM.C

#include “PWM.h”

#include “stm32f10x.h”

/* 函 数 名 : pwm_init

函数功能 : IO端口及TIM3初始化函数 */

void PWM_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//声明一个结构体变量,用来初始化定时器

TIM_OCInitTypeDef TIM_OCInitStructure;//根据TIM_OCInitStruct中指定的参数初始化外设TIMx

/* 开启时钟 */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

/* 配置GPIO的模式和IO口 */

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;// PC6

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出

GPIO_Init(GPIOC,&GPIO_InitStructure);

//TIM3定时器初始化

TIM_TimeBaseInitStructure.TIM_Period = 199; //PWM 频率=72000/(199+1)=36Khz//设置自动重装载寄存器周期的值

TIM_TimeBaseInitStructure.TIM_Prescaler = 7199;//设置用来作为TIMx时钟频率预分频值

TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_tim

TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStructure);

GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射 //pC6

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM输出使能

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;

TIM_OC1Init(TIM3,&TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能或者失能TIMx在CCR1上的预装载寄存器

TIM_Cmd(TIM3,ENABLE);

}

  • HC_06蓝牙模块用于通信(我用的是USART1串口)

(这部分代码参照原子视频代码即可!)

因为文章只是分享一个大概,具体的控制外设CSDN上也有很多可以参考的文章,大家有需要可以自行搜索查看,有问题也可以私信我)

接线示意


这里只是示意图,比较简略,只为了展示元件之间的接线,具体的供电根据自己的情况,建议L298N、STM32和舵机全部单独供电,避免产生影响,需要注意的是共地的问题,有基础的应该不难理解!!

在这里插入图片描述

最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

道路是曲折的,前途是光明的!”

TA3MTU3,size_16,color_FFFFFF,t_70#pic_center)

最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

道路是曲折的,前途是光明的!”

[外链图片转存中…(img-2XKqLjB0-1714768159711)]

[外链图片转存中…(img-9rMcaW61-1714768159712)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值