基于mini板子的蓝牙控制舵机程序

it2023-08-31  77

模块介绍

stm32mini板子通过手机蓝牙控制舵机

本文章介绍基于stm32mini板子蓝牙控制舵机的程序


一、HC-05原理图以及工作原理

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201020203303973.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTE5MDMy,size_16,color_FFFFFF,t_70#pic_center)

二、使用步骤

1.初始化蓝牙串口

代码如下:

u8 HC05_Init(void) { u8 retry=10,t; u8 temp=1; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE); //开启时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置传输速率 GPIO_Init(GPIOA, &GPIO_InitStructure); //调用函数初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置速率为50Mhz GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化 GPIO_SetBits(GPIOC,GPIO_Pin_4); USART2_Init(9600); //设置波特率为9600 }

2.设置pwm用来控制舵机

代码如下:

void TIM1_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //使能GPIO外设时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频系数 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //初始化 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 TIM_OC1Init(TIM1, &TIM_OCInitStructure); //初始化 TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //CH1预装载使能 TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器 TIM_Cmd(TIM1, ENABLE); //使能TIM1 }

3.进入主函数编写程序

代码如下:

int main(void) { u8 a; u8 b; u8 reclen=0; delay_init(); TIM1_PWM_Init(199,7199);//不分频,pwm频率===(7200*200)/72000000=0.02=20ms NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(9600); HC05_Init(); while(1) { if(USART2_RX_STA&0X8000) { for(a=0;a<3;a++) { pwm[a]=USART2_RX_BUF[a]; //设置一个数组存放接收到的数字 } reclen=USART2_RX_STA&0X7FFF; //得到数据长度 USART2_RX_BUF[reclen]=0; //加入结束符 angle=(pwm[0]-'0')*100+(pwm[1]-'0')*10+pwm[2]-'0'; //将接收到的数据转换为角度 u2_printf(" angle:%d\r\n",angle); //发送旋转角度 USART2_RX_STA=0; //标志位清零 } b=195-(angle/45)*5; TIM_SetCompare1(TIM1,b); } }

总结

硬件连接舵机接mini板子上5v引脚,pwm脚连接PA8. 这是我的第一次博客,如有错误,请大家多多包涵


最新回复(0)