STM32
直播中

陈燕

7年用户 1102经验值
私信 关注
[问答]

如何去实现一种基于stm32的蓝牙控制小舵机自动关灯程序呢

如何去实现一种基于STM32的蓝牙控制小舵机自动关灯程序呢?stm32新手看过来

回帖(1)

陈涛

2021-11-25 09:41:35
stm32新手看过来 分享一个基于stm32的蓝牙控制小舵机自动关灯程序

用的是stm32f103c8t6最小系统板,实现功能是蓝牙控制舵机转动,之后stm32和蓝牙模块进入休眠省电模式
这里采用了软件发送AT指令使得蓝牙模块进入休眠,需要注意的是不同厂家生产的蓝牙模块的AT指令不一样。(我用的是HC08)
这个程序很适合stm32新手练手编写,简单实用,能复习到stm32两大重要功能:脉宽调制和串口通信,另外对熟悉stm32f1系列单片机也有很大帮助
当然最重要的是实用,自己做一个关灯装置,在舍友的惊叹声中实现“魔法关灯”吧哈哈。
这个程序已经是成熟的版本了,两节南孚给蓝牙模块和stm32供电,已经使用了半个月了(之前没有加入蓝牙休眠的时候一晚上就没电了)
其中主函数如下

#include "pwm.h"
#include "system.h"
#include "SysTick.h"
#include "usart.h"


int main()
{
        SysTick_Init(72);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
        TIM2_CH1_PWM_Init(199,7199);
        USART1_Init(9600);
        TIM_SetCompare3(TIM2,185);
        
        while(1)
        {
        sleep();


        servo_control();
        }
}
void servo_control (void)
{undefined


if(r==0x35)
{
        if(flag==1)
        {
                TIM_SetCompare3(TIM2,170);
                delay_ms(1000);
                TIM_SetCompare3(TIM2,185);
                delay_ms(100);
                flag=0;
        PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFE);
        }
}


软件发送蓝牙AT指令,根据蓝牙模块厂家不一,AT指令会不同
delay_ms(1);很重要,实践检验:如果少了这个那么只能发送出第一个字符;

void sleep(void)
{
         if (sleep_flag==0)
         {
                  delay_ms(1000);
            USART_SendData(USART1,0x41);
                  delay_ms(1);
                 
                  USART_SendData(USART1,0x54);
                  delay_ms(1);
                 
                  USART_SendData(USART1,0x2b);
                  delay_ms(1);
                 
                  USART_SendData(USART1,0x4d);
                  delay_ms(1);
                 
                  USART_SendData(USART1,0x4f);
                  delay_ms(1);
                 
                  USART_SendData(USART1,0x44);
                  delay_ms(1);
                 
                  USART_SendData(USART1,0x45);
                  delay_ms(1);
                 
                  USART_SendData(USART1,0x3d);
                  delay_ms(1);
                       
                        USART_SendData(USART1,0x31);
                  delay_ms(1);
                  sleep_flag=1;
         }


}
其他就是一些GPIO的设置以及pwm的配置这些了,篇幅原因在此不多叙述,有问题的可以在下方留言
HC08可以替换为HC05,当然AT指令有所变化,但是邮票式的封装可以不变,要注意HC05需要下拉KET才能输入AT指令。主要是HC05有个好处,它可以和APP inventor写的安卓手机APP进行蓝牙通讯,HC08我试过好像不可以,APP inventor还是比较简单且强大的,可以实现语音控制。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分