(优作)基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)竞赛作品

基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)竞赛作品

        基于意法半导体与ARM公司生产的STM32F4 DISCOVERY开发板的集电机驱动模块、电源管理模块、stm32f4主控模块、蓝牙串口通信模块、android控制端模块。电机驱动模块使用了两个L298N芯片来驱动4路电机,使能端连接4路来自主控板的PWM波信号,8个输入端接主控板的8个输出端口;电源管理模块使用了LM2940-5.0芯片进行12V到5V的转换,12V用于电机模块的供电,5V用于蓝牙模块、传感器等的供电;主控模块采用了MDK编辑程序,然后下载到主控板,实现硬件与软件的交互;蓝牙串口通信模块则是采用了FBT06_LPDB针插蓝牙模块,与主控板进行串口通信,同时与android手机进行通信;android控制端模块是一个集开启蓝牙、搜索蓝牙、控制小车等功能。用户可以通过android控制端进行控制小车的运动,实现一些用户需要的功能和服务。

设置电机转向程序
改程序将电机驱动模块的8个输入端口接到了主控板的8个GPIO口,通过推挽输出,从而控制电机的转向,代码如下:


void Direction(int direction)
{
SysTick_Config(SystemCoreClock / 1000); //时钟中断设为1ms
 	RCC->AHB1ENR |= 0x00000005; //使能GPIOA和GPIOD时钟
    RCC->APB2ENR |= (1<<14);  //使能syscfg时钟
if(direction==0)
{
   GPIOA->MODER &= 0xffff0000; //设置PA0,1,2,3为输出
   GPIOA->MODER |= 0x00005555; 
   GPIOA->OTYPER &= 0xFFFFff00; //设置PA0,1,2,3为推挽输出
   GPIOA->OSPEEDR &= 0xffff0000; //设置PA0,1,2,3的输出速度为100M
   GPIOA->OSPEEDR |= 0x0000ffff;
   SYSCFG->CMPCR = 0x00000001; //使用IO补偿单元
   GPIOA->PUPDR &= 0xffffff00;  //设置PA0,1,2,3无上拉,无下拉
   GPIOA->BSRRH = 0x00ff;  //复位GPIOA_BSRRH寄存器
   GPIOA->BSRRL = 0x0055;		
	 }
	else
	{
GPIOA->MODER &= 0xffff0000; //设置PA0,1,2,3为输出
   GPIOA->MODER |= 0x0000005555; 
   GPIOA->OTYPER &= 0xFFFFff00; //设置PA0,1,2,3为推挽输出
   GPIOA->OSPEEDR &= 0xffff0000; //设置PA0,1,2,3的输出速度为100M
   GPIOA->OSPEEDR |= 0x0000ffff;
   SYSCFG->CMPCR = 0x00000001; //使用IO补偿单元
   GPIOA->PUPDR &= 0xffffff00;  //设置PA0,1,2,3无上拉,无下拉
   GPIOA->BSRRH = 0x00ff;  //复位GPIOA_BSRRH寄存器
   GPIOA->BSRRL = 0x00AA;
}

成果展示:

资料下载:

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例,展示了如何使用C语言编写STM32蓝牙控制循迹小车源代码: ```c #include "stm32f4xx.h" // 定义引脚和端口 #define IN1_PIN GPIO_Pin_0 #define IN1_PORT GPIOA #define IN2_PIN GPIO_Pin_1 #define IN2_PORT GPIOA #define IN3_PIN GPIO_Pin_2 #define IN3_PORT GPIOA #define IN4_PIN GPIO_Pin_3 #define IN4_PORT GPIOA // 初始化GPIO void GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // 配置引脚为输出模式 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Pin = IN1_PIN | IN2_PIN | IN3_PIN | IN4_PIN; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); } // 向前运动 void MoveForward(void) { // 设置引脚状态,使小车向前运动 GPIO_SetBits(IN1_PORT, IN1_PIN); GPIO_ResetBits(IN2_PORT, IN2_PIN); GPIO_SetBits(IN3_PORT, IN3_PIN); GPIO_ResetBits(IN4_PORT, IN4_PIN); } // 停止运动 void StopMove(void) { // 设置引脚状态,停止小车运动 GPIO_ResetBits(IN1_PORT, IN1_PIN); GPIO_ResetBits(IN2_PORT, IN2_PIN); GPIO_ResetBits(IN3_PORT, IN3_PIN); GPIO_ResetBits(IN4_PORT, IN4_PIN); } // 主函数 int main(void) { // 初始化GPIO GPIO_Init(); // 无限循环 while (1) { // 接收蓝牙指令并处理 // 判断接收到的指令,控制小车运动 // 这里可以使用UART或其他方式接收蓝牙指令,并根据指令控制小车运动 // 示例:如果接收到指令为'F',则向前运动 if (received_command == 'F') { MoveForward(); } // 示例:如果接收到指令为'S',则停止运动 else if (received_command == 'S') { StopMove(); } } } ``` 请注意,这只是一个简单的示例,您可能需要根据您的具体硬件配置和需求进行适当的修改。此外,您还需要添加适当的蓝牙模块驱动程序和与蓝牙模块通信的代码。希望这个示例能对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值