OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8283|回复: 12

使用蓝牙例程如何利用手机控制单片机进而控制灯的亮灭?

[复制链接]

4

主题

11

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-16
在线时间
5 小时
发表于 2016-2-17 13:25:53 | 显示全部楼层 |阅读模式
1金钱
各位,我使用的是miniSTM32的蓝牙拓展例程,按照官方PDF和视频的连接方式连接了蓝牙模块,我用的是HC-06。
下载例程之后发现手机能和上位机通信,但是不能控制板子上的DS1亮灭。
因为感觉没有通过单片机,我尝试了板子上面RXTX连接(没有通过单片机)还有PA9PA10的连接,发现都控制不了板子上的灯。
求助,我还因该做什么修改呢?

最佳答案

查看完整内容[请看2#楼]

先要把你的串口2调试好啊,能收能发,另外我用的测试软件是安卓手机的蓝牙SPP,还不行的话,加我扣扣2253638163
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2014-12-13
在线时间
89 小时
发表于 2016-2-17 13:25:54 | 显示全部楼层
先要把你的串口2调试好啊,能收能发,另外我用的测试软件是安卓手机的蓝牙SPP,还不行的话,加我扣扣2253638163
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-16
在线时间
5 小时
 楼主| 发表于 2016-2-17 13:30:19 | 显示全部楼层
这是蓝牙的连接图片,个人不是很清楚HC06和HC05的区别,是这个例程不能适用吗?

这是蓝牙的连接图

这是蓝牙的连接图
回复

使用道具 举报

70

主题

6698

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12695
金钱
12695
注册时间
2012-11-26
在线时间
3711 小时
发表于 2016-2-17 13:56:22 | 显示全部楼层
自己debug看看吧,
回复

使用道具 举报

0

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2014-12-13
在线时间
89 小时
发表于 2016-2-17 14:54:36 | 显示全部楼层
HC06只要串口程序就够了
UART3_Send_Str("AT+VERSION");                //发送AT指令
//        LED0=LED1=LED2=0;
        while(1)
        {               
                KEY_Scan(0);
                key=keydown_data;
                               
               
                       
                if(USART3_RX_STA&0X8000)                        //接收到一次数据
                {
                        LCD_Fill(30,200,240,250,YELLOW);        //清除显示
                        reclen=USART3_RX_STA&0X7FFF;        //得到数据长度
                  USART3_RX_BUF[reclen]=0;                 //加入结束符
                        if(reclen==9||reclen==8)                 //??DS1??
                        {
                                if(strcmp((const char*)USART3_RX_BUF,"+LED0 ON")==0)LED0=0;        //点亮LED0
                                if(strcmp((const char*)USART3_RX_BUF,"+LED0 OFF")==0)LED0=1;//熄灭LED0
                               
                                if(strcmp((const char*)USART3_RX_BUF,"+LED1 ON")==0)LED1=0;        //点亮LED1
                                if(strcmp((const char*)USART3_RX_BUF,"+LED1 OFF")==0)LED1=1;//熄灭LED1
                               
                                if(strcmp((const char*)USART3_RX_BUF,"+LED2 ON")==0)LED2=0;        //点亮LED2
                                if(strcmp((const char*)USART3_RX_BUF,"+LED2 OFF")==0)LED2=1;//熄灭LED2
                        }
                        LCD_ShowString(30,200,209,119,16,USART3_RX_BUF);//显示接收到的数据
                        printf("%s\r\n",USART3_RX_BUF);
                        USART3_RX_STA=0;         
                }                                                                                                                                                                        
                       
        }                                                               
HC06只是个从模块,只可以接收,没有连接时是AT模式,连接上就是透传模式
回复

使用道具 举报

3

主题

177

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1603
金钱
1603
注册时间
2016-1-28
在线时间
265 小时
发表于 2016-2-17 15:02:53 | 显示全部楼层
帮顶。。。。。。。
宠辱不惊看庭前花开花落去留无意望天上云卷云舒。
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-16
在线时间
5 小时
 楼主| 发表于 2016-2-17 15:38:52 | 显示全部楼层
迷恋烟花的瞬间 发表于 2016-2-17 14:54
HC06只要串口程序就够了
UART3_Send_Str("AT+VERSION");                //发送AT指令
//        LED0=LED1=LED2=0;

这是主函数里面的吗?还有就是硬件连接没有 特别的要求吗
回复

使用道具 举报

0

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2014-12-13
在线时间
89 小时
发表于 2016-2-17 15:51:21 | 显示全部楼层
是的,这个是main函数里的,HC06模块只用4根引脚VCC GND RXD TXD
回复

使用道具 举报

0

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
金钱
380
注册时间
2014-12-13
在线时间
89 小时
发表于 2016-2-17 15:56:14 | 显示全部楼层
获取AT 指令版本命令:AT+VERSION,写这句主要是检测一下模块是否正常,进入main函数发送AT指令,串口就会接收到蓝牙的版本号,如果确认正常了,这句都可以不写,都是用默认的就可以了
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-16
在线时间
5 小时
 楼主| 发表于 2016-2-17 16:54:14 | 显示全部楼层
迷恋烟花的瞬间 发表于 2016-2-17 15:51
是的,这个是main函数里的,HC06模块只用4根引脚VCC GND RXD TXD

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "hc05.h"
#include "usart2.h"                                  
#include "string.h"         
#include "key.h"
                  
int main(void)
{         
        u8 t;
        u8 key;
        u8 sendmask=0;
        u8 sendcnt=0;
        u8 sendbuf[20];          
        u8 reclen=0;  
        delay_init();                     //延时函数初始化          
        NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(9600);                 //串口初始化为9600
        USART2_Init(9600);
        LED_Init();                                //初始化与LED连接的硬件接口
   

          
//        LED0=LED1=LED2=0;
        while(1)
        {               
                                
               
                        
                if(USART2_RX_STA&0X8000)                        //接收到一次数据
                {
                        LCD_Fill(30,200,240,250,YELLOW);        //清除显示
                        reclen=USART2_RX_STA&0X7FFF;        //得到数据长度
                  USART2_RX_BUF[reclen]=0;                 //加入结束符
                        if(reclen==9||reclen==8)                 //??DS1??
                        {
                                if(strcmp((const char*)USART2_RX_BUF,"+LED0 ON")==0)LED0=0;        //点亮LED0
                                if(strcmp((const char*)USART2_RX_BUF,"+LED0 OFF")==0)LED0=1;//熄灭LED0
                                
                                if(strcmp((const char*)USART2_RX_BUF,"+LED1 ON")==0)LED1=0;        //点亮LED1
                                if(strcmp((const char*)USART2_RX_BUF,"+LED1 OFF")==0)LED1=1;//熄灭LED1
                                
                        }
        //                                                                                                        LED0=0; //LED0输出低
        //                                                                                                        LED1=1;//LED1输出高

                        USART2_RX_STA=0;         
                }                                                                                                                                                                        
                        
        }                    
}

请问这个简单程序还有什么BUG吗,为什么就是控制不了灯啊。。我把灯直接点亮都不行,这个程序哪里配置不正确呢?我是小白,求教万分谢谢
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-2-16
在线时间
5 小时
 楼主| 发表于 2016-2-17 21:17:55 | 显示全部楼层
迷恋烟花的瞬间 发表于 2016-2-17 18:34
先要把你的串口2调试好啊,能收能发,另外我用的测试软件是安卓手机的蓝牙SPP,还不行的话,加我扣扣2253638 ...

成功了谢谢,问题出在我把串口引脚接错了。以前没用过STM32,以后要好好学习了
回复

使用道具 举报

0

主题

8

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
金钱
1016
注册时间
2016-2-26
在线时间
76 小时
发表于 2016-3-2 11:39:50 | 显示全部楼层
帮顶。。。。。。。
回复

使用道具 举报

10

主题

45

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-3-31
在线时间
265 小时
发表于 2016-5-19 09:45:05 | 显示全部楼层
a932604257 发表于 2016-2-17 21:17
成功了谢谢,问题出在我把串口引脚接错了。以前没用过STM32,以后要好好学习了

楼主 你这个历程其他都没改吗
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 19:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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