找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2963|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

STM32藍(lán)牙遙控小車帶三個(gè)舵機(jī)源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:892737 發(fā)表于 2021-9-20 16:22 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如題,使用stm32f103rct6,控制四個(gè)輪子的電機(jī)正反轉(zhuǎn)分別為PC0-PC8,四個(gè)輪子的使能端為PA0,PA1,PA2,PA3(定時(shí)器2)(左前,左后,右前,右后),三個(gè)舵機(jī)在PB6,PB7,PB9(定時(shí)器4),使用范圍在5-25之間,藍(lán)牙接PC10,PC11,使用串口4,波特率為9600.
圖片太大,發(fā)不上來。

單片機(jī)源程序如下:
  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();//電機(jī)引腳
  19.         GENERAL_TIM_Init();//電機(jī)PWM初始化
  20.         blueToothInit();//藍(lán)牙初始化
  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.                 //如果藍(lán)牙斷開,小車會(huì)一直在剎車狀態(tài)
  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. }
復(fù)制代碼

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


  3. void TIM4_PWM_Init(u16 arr,u16 psc)
  4. {  
  5.         //**結(jié)構(gòu)體聲明**//
  6.         GPIO_InitTypeDef GPIO_InitStructure;            //聲明GPIO
  7.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure; //聲明定時(shí)器
  8.         TIM_OCInitTypeDef  TIM_OCInitStructure;         //聲明PWM通道
  9.        
  10.         //**時(shí)鐘使能**//
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);        //使能定時(shí)器TIM4時(shí)鐘
  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能PB端口時(shí)鐘
  13.        
  14.         //****//
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                                 //LED0-->PB.6 端口配置
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //復(fù)用推挽輸出
  17.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  18.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根據(jù)設(shè)定參數(shù)初始化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;                  //復(fù)用推挽輸出
  23.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  24.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根據(jù)設(shè)定參數(shù)初始化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;                  //復(fù)用推挽輸出
  29.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根據(jù)設(shè)定參數(shù)初始化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;                  //復(fù)用推挽輸出
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  36.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根據(jù)設(shè)定參數(shù)初始化GPIOB.7
  37.         GPIO_SetBits(GPIOB,GPIO_Pin_9);

  38.   //初始化TIM3
  39.         TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值
  40.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值
  41.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
  42.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計(jì)數(shù)模式
  43.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位

  44.         //初始化TIM3 Channel1 PWM模式         
  45.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  46.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  47.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  48.         TIM_OC1Init(TIM4, &TIM_OCInitStructure);  //根據(jù)T指定的參數(shù)初始化外設(shè)TIM3 OC1
  49.        
  50.         //初始化TIM3 Channel2 PWM模式         
  51.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  52.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  53.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  54.         TIM_OC2Init(TIM4, &TIM_OCInitStructure);  //根據(jù)T指定的參數(shù)初始化外設(shè)TIM3 OC2
  55.        
  56.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  57.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  58.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  59.         TIM_OC3Init(TIM4, &TIM_OCInitStructure);  //根據(jù)T指定的參數(shù)初始化外設(shè)TIM3 OC3
  60.        
  61.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
  62.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  63.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  64.         TIM_OC4Init(TIM4, &TIM_OCInitStructure);  //根據(jù)T指定的參數(shù)初始化外設(shè)TIM3 OC4

  65.         TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4_CH1預(yù)裝載寄存器
  66.         TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4_CH2預(yù)裝載寄存器
  67.         TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4_CH3預(yù)裝載寄存器
  68.         TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4_CH4預(yù)裝載寄存器
  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. //}
復(fù)制代碼


所有代碼51hei附件下載:
yuanban.7z (182.78 KB, 下載次數(shù): 52)


評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1114752 發(fā)表于 2024-4-5 20:34 | 只看該作者
樓主,想問問您的藍(lán)牙型號(hào)
回復(fù)

使用道具 舉報(bào)

板凳
ID:892737 發(fā)表于 2024-12-4 20:27 | 只看該作者
YSY521 發(fā)表于 2024-4-5 20:34
樓主,想問問您的藍(lán)牙型號(hào)

你好,HC06
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表