搜索
Hi~登录注册
查看: 114|回复: 0

蓝牙控制舵机 STM32源程序

[复制链接]

8

主题

8

帖子

3018

积分

MCU大佬

Rank: 8Rank: 8

积分
3018
发表于 2021-3-7 12:03:00 | 显示全部楼层 |阅读模式

蓝牙控制舵机,使舵机旋转45度,延时一段时间,回转45度,蓝牙发送信号“0”,可以使舵机运转

单片机源程序如下:

  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"

  4. #include "usart3.h"
  5. #include "stm32f10x.h"


  6. void Rcc_init(void)
  7. {
  8.         SystemInit();
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  10.       
  11. }

  12. void GPIO_init(void)
  13. {
  14.         GPIO_InitTypeDef GPIO_InitStructure;
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  18.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  19. }


  20. void delayus(u32 i)
  21. {
  22.         u32 temp;
  23.         SysTick->LOAD=9*i;                 //设置重装数值, 72MHZ时
  24.         SysTick->CTRL=0X01;                 //使能,减到零是无动作,采用外部时钟源
  25.         SysTick->VAL=0;                            //清零计数器
  26.         do
  27.         {
  28.                 temp=SysTick->CTRL;                   //读取当前倒计数值
  29.         }
  30.         while((temp&0x01)&&(!(temp&(1<<16))));         //等待时间到达
  31.         SysTick->CTRL=0;        //关闭计数器
  32.         SysTick->VAL=0;                //清空计数器
  33. }

  34. void delayms(u32 i)
  35. {
  36.         u32 temp;
  37.         SysTick->LOAD=9000*i;          //设置重装数值, 72MHZ时
  38.         SysTick->CTRL=0X01;                //使能,减到零是无动作,采用外部时钟源
  39.         SysTick->VAL=0;                        //清零计数器
  40.         do
  41.         {
  42.                 temp=SysTick->CTRL;           //读取当前倒计数值
  43.         }
  44.         while((temp&0x01)&&(!(temp&(1<<16))));        //等待时间到达
  45.         SysTick->CTRL=0;        //关闭计数器
  46.         SysTick->VAL=0;                //清空计数器
  47. }


  48. void zhuan(u16 speed)
  49. {
  50.         GPIO_SetBits(GPIOB,GPIO_Pin_12);
  51.         delayus(speed);
  52.         GPIO_ResetBits(GPIOB,GPIO_Pin_12);
  53.         delayus(20000-speed);

  54. }


  55. void jiaodu(u16 sec)
  56. {
  57.         u16 i;
  58.         for(i=0;i<sec*10;i++)
  59.         {
  60.       
  61.                 zhuan(1000);
  62.       
  63.         }


  64. }

  65. int main(void)
  66. {      
  67.          int i,a,b;
  68.         Rcc_init();
  69.         GPIO_init();
  70.         delay_init();            //延时函数初始化         
  71.                                  
  72.          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//usart3接收中断优先级2 次优先级2
  73.          usart3_init(9600);//蓝牙的串口初始化 注意手机与单片机的蓝牙连接波特率是要9600
  74.         while(1)
  75.         {
  76.            if(USART3_RX_STA&0x8000)
  77.                  {
  78.                    if(USART3_RX_BUF[0]=='0')
  79.                          {
  80.                           
  81.       
  82.                 for(i=1;i<1250;i+=25)
  83.                 {
  84.                         zhuan(i);
  85.                 }
  86.                         for(a=10000;a>0;a--)
  87.                         for(b=10000;b>0;b--);
  88.                        
  89.                
  90.                 for(i=1250;i>1;i-=25)
  91.                 {
  92.                         zhuan(i);
  93.                         //delayms(10000);
  94.                 }
  95.       
  96.                          }
  97.                          USART3_RX_STA=0;
  98.                  }
  99.         }
  100. }
复制代码


蓝牙控制舵机.rar (339.97 KB, 下载次数: 0)
回复

使用道具 举报

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

QQ|小黑屋|mcuhome-mcu之家

GMT+8, 2021-6-14 04:01 , Processed in 0.070090 second(s), 22 queries .

Powered by Discuz! X3.4

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