找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1450|回复: 0
打印 上一主题 下一主题
收起左侧

STM32蓝牙遥控小车带三个舵机源码

[复制链接]
跳转到指定楼层
楼主
ID:892737 发表于 2021-9-20 16:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,使用stm32f103rct6,控制四个轮子的电机正反转分别为PC0-PC8,四个轮子的使能端为PA0,PA1,PA2,PA3(定时器2)(左前,左后,右前,右后),三个舵机在PB6,PB7,PB9(定时器4),使用范围在5-25之间,蓝牙接PC10,PC11,使用串口4,波特率为9600.
图片太大,发不上来。

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "pwm.h"
  3. #include "gpio.h"
  4. #include "delay.h"
  5. #include "system.h"
  6. #include "motor.h"
  7. #include "USART.h"
  8. #include "bluetooth.h"
  9. #include "duojipwm.h"

  10. #define KEY1  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)
  11. #define KEY2  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)

  12. int CMD=0x61;
  13. void USART3_Init(void);
  14. void GPIOdianji_Init(void);
  15. void TIM4_PWM_Init(u16 arr,u16 psc);


  16. int main(void){
  17.         USART_Config();//串口
  18.         GPIOdianji_Init();//电机引脚
  19.         GENERAL_TIM_Init();//电机PWM初始化
  20.         blueToothInit();//蓝牙初始化
  21.         TIM4_PWM_Init(199,7199);
  22.         TIM_SetCompare4(TIM4, 4);
  23.         TIM_SetCompare1(TIM4, 5);
  24.         TIM_SetCompare2(TIM4, 23);
  25.         TIM_SetCompare3(TIM4, 13);
  26.         while(1){
  27.                 //如果蓝牙断开,小车会一直在刹车状态
  28.                 if(BLUE_TOOTH_STATE != Bit_SET){
  29.                         stop();
  30.                 }
  31.                 if(KEY1==0)
  32.                 {
  33.                     forward();
  34.                         TIM_SetCompare1(TIM4,25);

  35.                 }
  36.                 if(KEY2==0)
  37.                 {
  38.                         stop();
  39.                         TIM_SetCompare1(TIM4,5);
  40.                 }
  41. //                car_speed();
  42.         }

  43. }
复制代码

  1. #include "duojipwm.h"
  2. #include "delay.h"


  3. void TIM4_PWM_Init(u16 arr,u16 psc)
  4. {  
  5.         //**结构体声明**//
  6.         GPIO_InitTypeDef GPIO_InitStructure;            //声明GPIO
  7.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; //声明定时器
  8.         TIM_OCInitTypeDef  TIM_OCInitStructure;         //声明PWM通道
  9.        
  10.         //**时钟使能**//
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);        //使能定时器TIM4时钟
  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能PB端口时钟
  13.        
  14.         //****//
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                                 //LED0-->PB.6 端口配置
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出
  17.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  18.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOB.6
  19.         GPIO_SetBits(GPIOB,GPIO_Pin_6);
  20.         //****//
  21.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                                 //LED0-->PB.7 端口配置
  22.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出
  23.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  24.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOB.7
  25.         GPIO_SetBits(GPIOB,GPIO_Pin_7);
  26.        
  27.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                                 //LED0-->PB.7 端口配置
  28.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出
  29.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOB.7
  31.         GPIO_SetBits(GPIOB,GPIO_Pin_8);
  32.        
  33.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                 //LED0-->PB.7 端口配置
  34.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //复用推挽输出
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  36.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOB.7
  37.         GPIO_SetBits(GPIOB,GPIO_Pin_9);

  38.   //初始化TIM3
  39.         TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  40.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
  41.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  42.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  43.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

  44.         //初始化TIM3 Channel1 PWM模式         
  45.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
  46.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  47.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  48.         TIM_OC1Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC1
  49.        
  50.         //初始化TIM3 Channel2 PWM模式         
  51.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
  52.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  53.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  54.         TIM_OC2Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2
  55.        
  56.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
  57.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  58.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  59.         TIM_OC3Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC3
  60.        
  61.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
  62.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  63.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  64.         TIM_OC4Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC4

  65.         TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4_CH1预装载寄存器
  66.         TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4_CH2预装载寄存器
  67.         TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4_CH3预装载寄存器
  68.         TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4_CH4预装载寄存器
  69.    
  70.         TIM_Cmd(TIM4, ENABLE);  //使能TIM4
  71. }

  72. //void pigupwm(void)
  73. //{
  74. //     TIM_SetCompare1(TIM4,i);
  75. //         delay_ms(500);
  76. //}

  77. //void dizuopwm(void)
  78. //{
  79. //         TIM_SetCompare2(TIM4,i);
  80. //         TIM_SetCompare3(TIM4,i);
  81. //         delay_ms(500);
  82. //}

  83. //void bluepwm(void)
  84. //{
  85. //         TIM_SetCompare4(TIM2,i);
  86. //         delay_ms(500);
  87. //}
复制代码


所有代码51hei附件下载:
yuanban.7z (182.78 KB, 下载次数: 43)


评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表