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还是比较简单且强大的,可以实现语音控制。
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还是比较简单且强大的,可以实现语音控制。
举报