实验任务:开机检测 HC05 蓝牙模块是否存在,如果检测不成功,则报错。检测成功之后,显示模块的主从状态,并显示模块是否处于连接状态, DS0 闪烁,提示程序运行正常。按 KEY0 按键,可以开启/关闭自动发送数据(通过蓝牙模块发送);按 KEY1 按键可以切换模块的主从状态。蓝牙模块接收到的数据,将直接显示在 LCD 上(仅支持 ASCII 字符显示)。

HC05模块

图中是正点原子的hc05的引脚连接,普通某宝上掏的hc05 key---en   led----state相连接(相关资料自己找)

main.c

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
//#include "usmart.h"
#include "usart3.h"
#include "hc05.h"
#include "string.h"
//主从
void HC05_Role_Show(void)
{if(HC05_Get_Role()==1)LCD_ShowString(30,140,200,16,16,"ROLE:Master");  else LCD_ShowString(30,140,200,16,16,"ROLE:Slave ");
}
//连接
void HC05_Sta_Show(void)
{                                                if(HC05_LED)LCD_ShowString(120,140,120,16,16,"STA:Connected ");          //连接成功else LCD_ShowString(120,140,120,16,16,"STA:Disconnect");                //未连接
}   int main(void)
{u8 t;u8 key;u8 sendmask=0;u8 sendcnt=0;u8 sendbuf[20];     u8 reclen=0;     delay_init();             NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   uart_init(115200);      LED_Init();             KEY_Init();             LCD_Init();             POINT_COLOR=RED;LCD_ShowString(30,30,200,16,16,"ALIENTEK STM32F1 ^_^");  LCD_ShowString(30,50,200,16,16,"HC05 BLUETOOTH COM TEST");    LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK");delay_ms(1000);  while(HC05_Init()){LCD_ShowString(30,90,200,16,16,"ATK-HC05 Error!"); delay_ms(500);LCD_ShowString(30,90,200,16,16,"Please Check!!!"); delay_ms(100);}LCD_ShowString(30,90,210,16,16,"KEY1:ROLE KEY0:SEND/STOP");    LCD_ShowString(30,160,200,16,16,"Send:");  LCD_ShowString(30,180,200,16,16,"Receive:"); POINT_COLOR=BLUE;HC05_Role_Show();delay_ms(100);USART3_RX_STA=0;while(1){key=KEY_Scan(0);if(key==KEY1_PRES)//按下key1{key=HC05_Get_Role();if(key!=0xff){key=!key;                      //状态取反     if(key==0)HC05_Set_Cmd("AT+ROLE=0");else HC05_Set_Cmd("AT+ROLE=1");HC05_Role_Show();HC05_Set_Cmd("AT+RESET");   //复位ATK-HC05模块delay_ms(200);}}else if(key==KEY0_PRES) //按下key0{sendmask=!sendmask;               //发送/停止发送    if(sendmask==0)LCD_Fill(30+40,160,240,160+16,WHITE);}else delay_ms(10);if(t==50){if(sendmask){sprintf((char*)sendbuf,"ALIENTEK HC05 %d\r\n",sendcnt);LCD_ShowString(30+40,160,200,16,16,sendbuf);u3_printf("ALIENTEK HC05 %d\r\n",sendcnt); sendcnt++;if(sendcnt<99)sendcnt=0;}HC05_Sta_Show();t=0;LED0=!LED0;}//接收数据if(USART3_RX_STA&0x8000){LCD_Fill(30,200,240,320,WHITE);   reclen=USART3_RX_STA&0x7fff;USART3_RX_BUF[reclen]=0;      //加入结束符if(reclen==9||reclen==8)         //控制DS1检测{//这两句控制led1关和亮if(strcmp((const char*)USART3_RX_BUF,"+LED1 ON")==0)LED1=0;   //打开LED1if(strcmp((const char*)USART3_RX_BUF,"+LED1 OFF")==0)LED1=1;//关闭LED1}LCD_ShowString(30,200,209,119,16,USART3_RX_BUF);//显示接收到的数据USART3_RX_STA=0;   }      t++;}
}

main中while循环判断key0和key1,实现相关功能,

sprintf((char*)sendbuf,"ALIENTEK HC05 %d\r\n",sendcnt);这句话中sprint的语法和printf很像,printf是讲结果送到屏幕,sprintf是将结果送到字符串。与printf相比,sprintf多了一个需要传送到的字符串的变量的名称。

举一个例子如下:

#include<stdio.h>main() {char strA[20];printf("This is a string.\n");sprintf(strA,"This is a string.\n");printf("%s",strA);
}

程序最后加入如检测ds1的代码,手机助手连接蓝牙后进行手机输入,单片机进行反馈。

hc05.h的代码简单说一下查询当前主从状态的代码HC05_Get_Role

//查角色
u8 HC05_Get_Role(void)
{   u8 retry=0x0a;u8 temp,t;while(retry--){HC05_KEY=1;delay_ms(5);u3_printf("AT+ROLE?\r\n");for(t=0;t<15;t++)//次循环用于等待hc05相应{delay_ms(10);if(USART3_RX_STA&0X8000)break;}    HC05_KEY=0;if(USART3_RX_STA&0x8000){temp=USART3_RX_STA&0x7fff;USART3_RX_STA=0;if(temp==13&&USART3_RX_BUF[0]=='+')//接收到正确的应答了{temp=USART3_RX_BUF[6]-'0';break;}}}if(retry==0)temp=0xff;return temp;
}

拉高拉低key进入退出at模式if判断串口三的数据将数据的存在buf里面,将数据的大小放在STA里面,正长回应是

+ ROLE:<Param>/r/n
OK/r/n

加上回车换行是13个,temp判断是否是13长度,并判断第一个是啥字符

我们得到的是ASCII,必须减掉‘0’的ASCII值才能得到数字。

hc05初始化中    GPIO_SetBits()函数

  • 实现功能:控制某个GPIO引脚的输出电平(拉高 / 拉低)
  • GPIO_SetBits   拉高引脚输出电平
  • GPIO_ResetBits 拉低引脚输出电平

(STM32笔记2)基于hc05的蓝牙实验相关推荐

  1. ROS实验笔记之——基于Prometheus的无人机运动规划

    本博文基于Prometheus项目来学习无人机的运动规划.关于该项目的配置可以参考<ROS实验笔记之--基于Prometheus自主无人机开源项目的学习与仿真> Demo演示 基于2D-L ...

  2. STM32+HC05串口蓝牙设计简易的蓝牙音箱

    一.环境介绍 MCU:  STM32F103C8T6 蓝牙模块:  HC05 (串口蓝牙) 音频解码模块:  VS1053B OLED显示屏:  0.96寸SPI接口OLED 开发软件: Keil5 ...

  3. 《ZigBee开发笔记》第四部分 提高篇-第9章 CC2530基于GenericApp无线收发实验

    实验设备 硬件:PC 机一台:ZB2530(底板.核心板.仿真器.USB 线) 两套 软件:win7 系统,IAR 8.20 集成开发环境 本实验是基于GenericApp无线收发,编者在第2讲也有讲 ...

  4. STM32笔记之 NVIC(嵌套向量中断控制器)

    写在前面: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. 目录 一.NVIC简单解释 二.抢占优先级 ...

  5. 学习笔记之——基于深度学习的图像超分辨率重建

    最近开展图像超分辨率( Image Super Resolution)方面的研究,做了一些列的调研,并结合本人的理解总结成本博文~(本博文仅用于本人的学习笔记,不做商业用途) 本博文涉及的paper已 ...

  6. 【STM32笔记】低功耗模式配置及避坑汇总

    [STM32笔记]低功耗模式配置及配置汇总 文章总结:(后续更新以相关文章为准) [STM32笔记]低功耗模式.WFI命令等进入不了休眠的可能原因(系统定时器SysTick一直产生中断) [STM32 ...

  7. 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案)

    [STM32笔记]HAL库低功耗模式配置(ADC唤醒无法使用.低功耗模式无法烧录解决方案) [STM32笔记]低功耗模式配置及避坑汇总 一.低功耗模式简介 系统提供了多个低功耗模式,可在 CPU 不需 ...

  8. 基于IIC的温度传感器实验

    基于IIC的温度传感器实验 一.IIC简介 二.硬件IIC与软件IIC的区别 三.实现I2CAHT20温湿度传感器的温度采集 1.AHT20简介 2.配置函数库,编写函数 1:下载驱动函数 2:修改相 ...

  9. (STM32笔记)一、STM32特点

    我用的是正点的STM32F767来进行学习.之后的这个系列笔记开头未标明的话,用的也是这个板子. STM32笔记 一.`STM32` 特点 1.什么是`stm32` (1)特点 (2)优势 2.`Co ...

  10. (实验4)单片机,STM32F4学习笔记,代码讲解【串口实验】【正点原子】【原创】

    文章目录 其它文章链接,独家吐血整理 实验现象 主程序 串口中断程序 代码讲解 其它文章链接,独家吐血整理 (实验3)单片机,STM32F4学习笔记,代码讲解[按键输入实验][正点原子][原创] (实 ...

最新文章

  1. 「分布式」艺术创作:20分钟+1080显卡,这个AI就能创造复杂作品 | 开源
  2. (022)java后台开发之HttpServletRequest
  3. 滑动窗口最大值--单调队列
  4. SQL Server 2008 R2如何生成带数据的数据库脚本
  5. check-lxdialog.sh: line 3: $'\r': command not found
  6. java在捕获异常并弹窗_Java捕获异常的问题
  7. Spring-tx-TransactionDefinition/TransactionAttribute
  8. mysql 模糊查询之特殊字符下划线 _
  9. Linux对I/O端口资源的管理(5)
  10. 在.NET上执行多线程操作要考虑的两大因素
  11. mce: [Hardware Error]: Machine check events logged
  12. HearthBuddy 调试肯瑞托法师寒冰屏障的配合
  13. Java 调用阿里云小蜜示例代码
  14. 闲逸游戏态度决定胜负,安全决定未来!
  15. MFC应用程序关闭时,提示兼容性助手。
  16. 分布式期货行情交易系统-行情及交易模块分析
  17. 建行与爱赏合作推出建行爱赏卡 刷卡消费“抢红包”
  18. 《操作系统设计原理》第一章习题
  19. [Jexus系列] 一、安装并运行 Jexus
  20. 使用layer弹出层组件绑定页面按钮

热门文章

  1. SVM支持向量机原理详解
  2. Delphi中@,^,#,$特殊符号意义
  3. linux编译gdal geos,GDAL编译支持GEOS
  4. 软件设计与体系结构实验——图书馆管理系统
  5. PPT流程图这样画,感动老板第一步!
  6. 安装西门子博图一直重启_博途V15.1安装及无限重启和.net3.5SP1错误处理解决方法...
  7. polyval matlab 怎么用,matlab polyfit polyval
  8. 大华海康萤石云摄像头Http接口云台控制开发
  9. 支付宝转账银行卡/隐藏卡号
  10. mysql一个表的省市县级联_mySQL 实现省市县联动查询