系列博文:

(1)安卓手机与蓝牙模块联合调试(一)——蓝牙模块的串口通讯

(2)安卓手机与蓝牙模块联合调试(二)—— 单片机蓝牙控制LED灯亮灭(上)

(3)安卓手机与蓝牙模块联合调试(三)—— 单片机蓝牙控制LED灯亮灭(下)


忙里偷闲,承接上一篇文章继续

安卓手机与蓝牙模块联合调试(一)——蓝牙模块的串口通讯 - CSDN博客

本篇将实现两个实例,手头正好有8位的单片机,索性就用来练手了。将会提供两个例子,一个是基于STM8的库函数实例,一个是基于STC89C52的实例。

1.首先了解下单片机串口通讯线的接法。这个比较重要,建议参考文章。

(1)HC-05初探 - 骑着蜗牛逛世界 - 博客园      https://www.cnblogs.com/LittleHann/p/5621937.html

(2)HC-05 蓝牙模块的调试与使用 - CSDN博客      https://blog.csdn.net/txf1984/article/details/46553715

2. 准备工作和单片机原理图。

首先看下我用到的硬件支持,一块STM8S103F2P6最小系统板,一个ST-Link下载器,一个HC-05的模块(暂时先调试HC-5的模块,CC2541单片机端的代码是一样的)

最小系统的原理图如下,大家按照上面两个博文中的接线方法接好单片机,特别注意蓝牙模块的TX/RX与单片机的TX/RX要交叉相接

3. 单片机的代码,使用STM8库函数编写。

首先看下目录结构,本项目使用的是IAR编译器

下面贴出来main函数,注释在代码中已经描述的很清楚了,大家可以自行参考。

/*************
** Author   : 江涛
** Date     :  2018/08/28
** Describe : 蓝牙控制单片机开关灯
**************/
/* Includes -----------*/
#include "stm8s.h"
#include <string.h>/********************************************
**  TestLed        PB5  测试LED
**********************************************//**串口1接收数据标志位**/
unsigned char Usart1_bufStart_or_bufSotp = 0 ;
/**串口1数据,这里10个字节够放命令了,大家可以根据实际需要调整数组长度**/
char Usart1BufData[10];
/**串口数据数目自增量,用来统计数目是否达到数组最大长度**/
char Usart1BufConst;/****以下是定义的命令*****/
char LED_ON[10] = "ON\n";
char LED_OFF[10] = "OFF\n";void Delay(uint16_t nCount)
{/* Decrement nCount value */while (nCount != 0){   nCount--;}
}/*************
* 初始化串口UART1
**************/
void initUart1()
{// 串口设置UART1_DeInit();// 9600波特率,8位数据位,一位停止位,UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);//UART1_MODE_TX_ENABLE);// 使能串口接收中断UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
}/*********
* 端口配置
**************/
void initGPIO(){// LED灯的GPIO口初始化GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);GPIO_WriteHigh(GPIOB , GPIO_PIN_5); // 关测试灯}/*****************
*  程序入口
*******************/
void main(void)
{// 初始化系统时钟,CLK_HSICmd(ENABLE);CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);//内部时钟16M,8分频CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);    initGPIO();initUart1();enableInterrupts(); // 使能中断while (1){    if(Usart1_bufStart_or_bufSotp){Usart1_bufStart_or_bufSotp = 0 ; if(strcmp(Usart1BufData,LED_ON)==0){GPIO_WriteLow(GPIOB , GPIO_PIN_5);         }else if(strcmp(Usart1BufData,LED_OFF)==0){GPIO_WriteHigh(GPIOB , GPIO_PIN_5);}Usart1BufConst = 0 ;memset(Usart1BufData,0,10);//清0数组   }    }
}#ifdef USE_FULL_ASSERT/*** @brief  Reports the name of the source file and the source line number*   where the assert_param error has occurred.* @param file: pointer to the source file name* @param line: assert_param error line source number* @retval : None*/
void assert_failed(u8* file, u32 line)
{ /* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* Infinite loop */while (1){}
}
#endif

项目中还有个it.c文件,内容如下:

/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"/* Private typedef -----------------------------------------------------------*/extern unsigned char Usart1_bufStart_or_bufSotp;
extern char Usart1BufData[10];
extern char Usart1BufConst;/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/* Public functions ----------------------------------------------------------*/#if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S103) || \defined(STM8S003) ||  defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8S903)
/*** @brief UART1 TX Interrupt routine.* @param  None* @retval None*/INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17){/* In order to detect unexpected events during development,it is recommended to set a breakpoint on the following instruction.*/}/*** @brief UART1 RX Interrupt routine.* @param  None* @retval None*/INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18){/* In order to detect unexpected events during development,it is recommended to set a breakpoint on the following instruction.*/  Usart1BufData[Usart1BufConst]=UART1_ReceiveData8();UART1_SendData8(UART1_ReceiveData8()); // 收到了结束符号if(Usart1BufData[Usart1BufConst]==0x0A){Usart1_bufStart_or_bufSotp=1;    }elseUsart1BufConst++;UART1_ClearITPendingBit(UART1_IT_RXNE); // 清除标志位}
#endif /*STM8S208 or STM8S207 or STM8S103 or STM8S903 or STM8AF62Ax or STM8AF52Ax *//******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

主要代码就是这些了,注释中已经写的很清楚了。

4.接好线看下运行的效果 。

过后放上一个视频连接,实在因为gif的效果不明显。

好了,STM8蓝牙控制LED亮灭的功能基本实现了,下一遍将实现蓝牙和STC89单片机的联调。

当这个系列结束之后我会将代码一并上传到Git。博文更新的话,可能因为工作原因会断断续续,希望大家见谅。如果觉得有帮助或者有设么其他好的建议可以在博文下留言,赞赏码没有别的意思,这是个知识付费的时代,可能付费了才会更珍惜学习的不易,当然也是作者创作的动力所在,哈哈。


安卓手机与蓝牙模块联合调试(二)—— 单片机蓝牙控制LED灯亮灭(上)相关推荐

  1. 安卓手机与蓝牙模块联合调试(三)—— 单片机蓝牙控制LED灯亮灭(下)

    源码获取 https://gitcode.net/cjt-bluetooth/android-51mcu 系列博文: (1)安卓手机与蓝牙模块联合调试(一)--蓝牙模块的串口通讯 (2)安卓手机与蓝牙 ...

  2. Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】

    目录 一.前言 二.效果展示 1.APP界面展示 2.C51硬件展示 三.Android Studio APP源代码 1.AndroidManifest.xml 1.请求联网: 2.开放明文传输: 2 ...

  3. 安卓手机与蓝牙模块联合调试(五)-- 编写自己的蓝牙控制界面控制单片

    安卓手机与蓝牙模块联合调试(五)-- 编写自己的蓝牙控制界面控制单片机(上篇,Android 代码实现) 2018年09月18日 00:10:43 涛声依旧Cjt 阅读数:252更多 所属专栏: 安卓 ...

  4. 安卓手机与蓝牙模块联合调试(六)-- 编写自己的蓝牙控制界

    安卓手机与蓝牙模块联合调试(六)-- 编写自己的蓝牙控制界面控制单片机(下篇,STC单片机代码实现) 2018年09月18日 17:07:04 涛声依旧Cjt 阅读数:127 标签: 单片机蓝牙模块安 ...

  5. HC-05蓝牙模块与STM32控制led灯亮详解

    HC-05蓝牙模块与STM32控制led灯亮 一.HC-05蓝牙模块解析 1.简介 2.HC-05原理 3.HC-05实物图 二.使用AT指令进行配置 1.进入命令响应工作模式 2.配置串口 3.进行 ...

  6. stm32f103c8t6控制蓝牙模块实现led灯亮灭

    stm32f103c8t6控制蓝牙模块实现led灯亮灭 之前利用蓝牙模块是用arduino控制板的,现在已经渐渐接触stm32,所以,这次想着用stm32来控制蓝牙模块. 首先的话,需要配置蓝牙模块的 ...

  7. 毕业设计 基于51单片机无线蓝牙APP控LED灯亮灭亮度设计

    基于51单片机无线蓝牙APP控LED灯亮灭亮度设计 1.项目简介 1.1 系统构成 1.2 系统功能 2.部分电路设计 2.1 LED信号指示灯电路设计 2.2 蓝牙模块 3.部分代码展示 3.1 串 ...

  8. Arduino程序设计(二) 按键控制LED灯

    按键控制LED灯程序设计 前言 一.按键控制LED灯--内部上拉(基础) 二.按键控制LED灯--外部上拉(基础) 三.按键控制LED灯(进阶) 总结 参考文献 前言 本文主要介绍三种按键控制LED灯 ...

  9. Arduino+ESP8266手机控制小灯亮灭及常见问题

    最近在接触Arduino和ESP8266模块,比较基础的就是运用Arduino IDE软件.ESP8266模块和一款手机软件来控制8266测试板上的小灯亮灭. 项目软件: Arduino IDE软件 ...

最新文章

  1. 重温Vue-router
  2. 网站提示java已被阻止_Win7系统下打开网页提示应用程序已被JAVA安全阻止
  3. html导航下拉菜单js点击显示不出来,使用JS做下拉菜单,子菜单不显示
  4. SQL Server 2014 Win7 Win10 安装详解 SQL Server 2017 2019 Linux及SQL TSQL ETL实用案例
  5. Winform开发框架中工作流模块之申请单草稿处理
  6. php 窗体移动,窗体处理 - My Labs! PHP - PHP博客
  7. java6 3_2018.3.6 Java web notes:
  8. LRU页面置换算法C语言实现
  9. 拨号720错误解决记.txt
  10. 笔记本无线网口共享网络给以太网口
  11. 使用Windows Sysprep来封装系统
  12. matlab输入二项分布函数,MATLAB如何使用binornd函数生成二项分布随机数
  13. sqlite查询空日期类型_sqlite数据类型(时间 日期 ) timestamp 使用
  14. Waiter,Servant, Attendant的区别
  15. ccf试题1:分蛋糕
  16. ###好好好###异质信息网络分析与应用综述(石川)--阅读
  17. python 爬虫实践 (爬取链家成交房源信息和价格)
  18. 此计算机到未能识别网络连接,Win10未识别的网络无法连接到internet如何解决?操作方法...
  19. Undefined symbols for architecture i386: _OBJC_CLASS_$_JPUSHService
  20. MobaXterm连接虚拟机Ubuntu

热门文章

  1. Vivado hilbert变换的实现
  2. IOS开发常用工具网站
  3. 尼尧的面试日记:面试记录(一)
  4. 极益开源公益平台发布,公益的网站必须酷
  5. MySQL的安装流程
  6. 关于深度学习人工智能模型的探讨(二)(7)
  7. liunx内核配置说明/etc/sysctl.conf
  8. android @nonnull的作用,Android Studio错误的含义:未注释的参数将覆盖@NonNull参数
  9. Lombok @NonNull注解
  10. 双边国家地理距离、制度距离和文化距离