(第一次发文章,如果有问题请轻喷,谢谢!)

本人使用的蓝牙模块是在优信电子购买的HC05蓝牙模块JDY-31,刚开始想要参照正点原子的HC05模块教程去编写,但感觉之前没怎么了解过他家的编写思维,代码看起来很乱,所以就自己写了一个,结果半天发不出去信息,最后发现是自己的串口代码移植过来的时候配置时忘记把串口1改成串口2了.。。。

其实这款蓝牙模块的使用非常简单,只要你会配置串口1的相关函数,把他的函数拿过来,直接把串口1改成串口2就行,该蓝牙模块有VCC,GND,RXD, TXD,STATE, EN六个引脚,EN是浮空的,所以不用接线,state接不接都可以(所以我也不知道他有啥用,直接搞成四个脚不是更节省成本?)

以下是函数,如有问题欢迎指正

HC05相关函数

/***********************************************
*函数名    :usart2_init
*函数功能  :串口1初始化配置函数
*函数参数  :u32 baud
*函数返回值:无
*函数描述  :PA2-------Tx
                        PA3------Rx
************************************************/
void usart2_init(void)
{
    /*IO控制器配置*/
    /*1、端口时钟使能*/
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟
    /*2、创建一个端口配置结构体*/
    GPIO_InitTypeDef GPIO_InitStruct = {0};//清零
    /*3、设置输出的端口*/
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;//配置PA2/3
    /*4、端口模式配置*/
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//配置为复用模式
    /*5、端口输出类型配置*/
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//配置为推挽类型
    /*6、端口上下拉配置*/
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//配置为无上下拉
    /*7、端口输出速度配置*/
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//50M输出速度
    /*8、使用初始化函数配置*/
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    /*9、复用功能配置*/
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
    
    /*串口控制器配置*/
    /*1、串口2时钟使能*/
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    /*2、创建一个端口配置结构体*/
    USART_InitTypeDef USART_InitStruct = {0};//清零
    /*3、设置波特率*/
    USART_InitStruct.USART_BaudRate = 9600;
    /*4、硬件流设置*/
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流
    /*5、模式设置*/
    USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//发送接收
    /*6、奇偶校验设置*/
    USART_InitStruct.USART_Parity = USART_Parity_No;//无奇偶校验
    /*7、停止位设置*/
    USART_InitStruct.USART_StopBits = USART_StopBits_1;//一个停止位
    /*8、字节长度设置*/
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8个字长
    /*9、使用初始化函数配置*/
    USART_Init(USART2, &USART_InitStruct);
    /*10、中断使能*/
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//接收中断使能
    USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);//空闲中断使能
  /*NVIC控制器配置*/
    /*1、优先级分组*/
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//优先级分组
    /*2、创建一个端口配置结构体*/
    NVIC_InitTypeDef NVIC_InitStruct = {0};
    /*3、中断源设置*/
    NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;
    /*4、响应通道使能*/
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    /*5、设置抢占优先级级别值*/
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
    /*6、设置响应优先级级别值*/
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
    /*7、使用初始化函数配置*/
    NVIC_Init(&NVIC_InitStruct);

//串口使能
    USART_Cmd(USART2, ENABLE);
}

/***********************************************
*函数名    :hc05_init
*函数功能  :串口1初始化配置函数
*函数参数  :u32 baud
*函数返回值:无
*函数描述  :PA4——STATE
                        
************************************************/
void hc05_init(void)
{
    usart2_init();
}
/***********************************************
*函数名    :usart2_send_byte
*函数功能  :串口2发送一个字节函数
*函数参数  :u8 data
*函数返回值:无
*函数描述  :
***********************************************/
void usart2_send_byte(u8 data)
{
    //等待上一位发送完成
    while(!USART_GetFlagStatus(USART2, USART_FLAG_TC ));//发送完成标志位为0
    USART_SendData(USART2, data);
}

/***********************************************
*函数名    :usart2_send_str
*函数功能  :串口2发送多字节函数
*函数参数  :u8 *str
*函数返回值:无
*函数描述  :
***********************************************/
void usart2_send_str(u8 *str)
{
    while(*str != '\0')
    {
        usart2_send_byte(*str);
        str++;
    }
}
/*****************************************************
函数功能:hc05接收数据
函数形参:void
函数返回值:void
函数说明:        
*****************************************************/
u8 usart2_rec_buff[20];
void USART2_IRQHandler(void)
{
    static u8 i = 0;
    //判断是接收中断
    if(USART_GetITStatus(USART2, USART_IT_RXNE))
    {
        //清除中断标志位
        USART_GetITStatus(USART2, USART_IT_RXNE);
        //紧急事件
        usart2_rec_buff[i] = USART_ReceiveData(USART2);
        i++;
    }
    //判断是空闲中断
    if(USART_GetITStatus(USART2, USART_IT_IDLE))
    {
        //清除中断标志位
        USART2->SR;
        USART2->DR;
        //紧急事件
        usart2_rec_buff[i] = '\0';
        i = 0;//清零
        printf("接收到的字符串是%s\r\n", usart2_rec_buff);
    }
}

LED灯相关配置函数

/**********************************
*函数名    :led_init
*函数功能  :LED所用IO初始化配置
*函数参数  :无
*函数返回值:无
*函数描述  :PB8——LED_R/LED4
                        P89——LED_G/LED3
**********************************/
void led_init(void)
{
    /*1、端口时钟使能*/
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟
    /*2、创建一个端口配置结构体*/
    GPIO_InitTypeDef GPIO_InitStruct = {0};//清零
    /*3、设置输出的端口*/
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;//配置PC4/5/6/7
    /*4、端口模式配置*/
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//配置为输出模式
    /*5、端口输出类型配置*/
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//配置为推挽输出类型
    /*6、端口上下拉配置*/
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//配置为无上下拉
    /*7、端口输出速度配置*/
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//2M输出速度
    /*8、使用初始化函数配置*/
    GPIO_Init(GPIOC, &GPIO_InitStruct);
    /*9、配置输出数据寄存器*/
    GPIO_SetBits(GPIOC, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//配置为高电平,关灯
}

/********************main函数***********************************/
int main()
{
//    u8 key = 0;
    
    NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2);  //优先级分组
    led_init();//LED初始化
    key_init();//按键初始化
    usart1_init(9600);串口一初始化
    hc05_init();//HC05初始化,其实就是串口2初始化
    
    
    while(1)
    {
        if(strcmp(usart2_rec_buff,"on")==0)//接收的字符串有on就开灯
        {
            LED1_ON;//这个是我自己定义的宏GPIO_ResetBits(GPIOC, GPIO_Pin_4)
        }
        if(strcmp(usart2_rec_buff,"off")==0)//接收的字符串有off就关灯
        {
            LED1_OFF;//这个是我自己定义的宏GPIO_SetBits(GPIOC, GPIO_Pin_4)
        }
    }
}

下载到板子后,下载厂家给你的蓝牙apk到手机上,搜索蓝牙名字连接,就可以收发数据了,发送数据就使用一下串口发送字符串函数就行,在这个基础上添加一些传感器配置,也可以发到手机上

基于蓝牙模块HC05的手机控制灯开关的小项目相关推荐

  1. 20220727使用汇承科技的蓝牙模块HC-05配对手机进行蓝牙串口的演示

    20220727使用汇承科技的蓝牙模块HC-05配对手机进行蓝牙串口的演示 2022/7/27 18:55 Android11:摩托罗拉 motorola edge s 6GB+128GB 骁龙870 ...

  2. 蓝牙模块hc05原理图_使用步进电机和Android App的蓝牙控制迷你升降机

    背景知识视频教程 使用App Inventor创建Android应用​viadean.com Arduino微控制器:学习Arduino制作项目 - 国外课栈​viadean.com Arduino ...

  3. 蓝牙模块HC-05的调试(利用LED灯来检验信号是否能正常传输)

    蓝牙模块HC-05的调试(利用LED灯来检验信号是否能正常传输) by hasyu 我所用到的硬件 BlueTooth HC-05,arduino 2560(uno也行吧) 电脑 手机 硬件的连接 不 ...

  4. 学习记录--蓝牙模块HC05(串口收发)

    主要实现:PC上位机与蓝牙之间的通信(收发) 一,HC05模式等一系列设置 参考博客: (11条消息) stm32之蓝牙模块HC-05使用_一剃解千愁的博客-CSDN博客_stm32蓝牙模块的使用 ( ...

  5. 基于蓝牙与Android设备的控制系统设计

    Android操作系统是Google基于开源的Linux操作系统开发的移动操作平台,由操作系统.中间件.用户界面和应用软件组成,是专门为移动终端打造的开放和完整的移动操作系统.Android软件平台包 ...

  6. STM32系列——手把手教你蓝牙模块HC05、HC06的使用,重在“用起来”(HAL库)

    前言 不论是HC05还是HC06,我们用到的都是蓝牙模块的透传功能,只需要用到4个引脚:RXD.TXD.VCC(5V).GND. HC-05的使用 1.HC-05有6个引脚,但是我们只用到4个. 2. ...

  7. 基于蓝牙模块ROK101 007/1的小区监控系统设计

    基于蓝牙模块ROK101 007/1的小区监控系统设计 引言 蓝牙是一种正在发展中的短距离无线时分多址通信技术(也叫个域网技术),这是一种直接面对个人和商务的无线应用连接技术,并以其低成本.低功耗.高 ...

  8. android studio 课程表,基于课程表的安卓Android手机控制APP设计(AndroidStudio,SQLite)(含录像)...

    基于课程表的安卓Android手机控制APP设计(AndroidStudio,SQLite)(含录像)(毕业论文12000字,程序代码) 摘 要 随着IT技术的发展,以前老套的课程表内容查询管理方式已 ...

  9. 20220728使用电脑上的蓝牙和汇承科技的蓝牙模块HC-05配对蓝牙串口传输

    20220728使用电脑上的蓝牙和汇承科技的蓝牙模块HC-05配对蓝牙串口传输 2022/7/28 11:27 电脑:DELL Vostro 3888,WIN10系统 五.蓝牙模块如何与电脑连接(从模 ...

最新文章

  1. springboot中controller单例模式多线程安全的简单理解
  2. JZOJ 3947 . 【省常中JSOI模拟】收历史作业
  3. 5个常用的Python功能代码
  4. BigDecimal类的使用
  5. 【案例】ZigBee无线模块在城市智能照明上的应用
  6. ROBOTS.TXT屏蔽笔记、代码、示例大全
  7. 玩转CocoaPods
  8. 2_C语言中的数据类型 (二)进制
  9. Bailian2944 单词替换【字符串流】
  10. CSDN发布博文时出错的截图
  11. vba手机号码归属_Android中手机号码归属地查询实现
  12. 金蝶移动bos开发教程_移动BOS开发 -- 移动表单
  13. 图像加密标准测试图库
  14. IDEA GitToolBox插件安装教程
  15. python爬虫基础详解
  16. 【网站】八大极品桌面壁纸网站,惊艳
  17. 如何快速知道哪些中文期刊是中文核心期刊
  18. 神经网络前向传播和反向传播算法(作业4)
  19. 胡润研究院发布《2018胡润区块链富豪榜》
  20. 干支纪年法简便算法_高中化学分类学法指导!附高考化学必记知识点及规律

热门文章

  1. ARM Cortex-M底层技术(1)—单片机的内存RAM和FLASH的理解
  2. 【UDS】基于CAN FD的UDS传输层 重要理解
  3. MySQL视图_刘锋的博客
  4. springboot整合pdfobject 预览pdf文件 出现 Not allowed to load local resource : file:///c:/xxxx.pdf 报错的问题解决
  5. uniapp 窗口小工具、桌面小部件、微件 Ba-AppWidget
  6. 利用在线工具weblogo3画图,有些问题想寻求大家帮助!
  7. pyside6的QTextEdit 自动移动光标到末尾
  8. RTK和GPS的区别 有哪些产品和服务
  9. ubuntu ufw 配置
  10. 应用程序的组件中发生了无法处理的异常。如果单击继续,应用程序将忽略次错误并尝试继续