stm32 蓝牙_stm32蓝牙控制 - CSDN
精华内容
参与话题
  • Stm32 基于蓝牙的串口通信 详细篇

    万次阅读 多人点赞 2019-07-19 21:16:58
    stm 32 串口通信 蓝牙篇 1. HC-05蓝牙 1.1蓝牙模块使用介绍 蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口用。当建立...

    stm 32 串口通信 蓝牙篇

    1. HC-05蓝牙

    在这里插入图片描述

    1.1蓝牙模块使用介绍

    蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口用。当建立连接,两设备共同使用一通道也就是同一个串口,一个设备发送数据到通道中,另外一个设备便可以接收通道中的数据。

    1.2蓝牙模块使用注意

    hc-05支持从4800bps~1382400bps间的标准波特率,使用时波特率一定要匹配,vcc接3.3 或者 5V GND 接GND TX接单片机上的RX RX接TX。

    2.Stm32F1串口通信

    2.1串口通信介绍

    STM32F103ZET6 最多可提供 5 路串口,

    2.2串口通信算法思路

    1. 串口时钟使能,GPIO 时钟使能
    2. 串口复位
    3. GPIO 端口模式设置
    4. 串口参数初始化
    5. 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
    6. 使能串口
    7. 编写中断处理函数

    2.3步骤详解

    1.串口时钟使能,使用哪个串口查手册使能哪个时钟,还有IO口时钟使能
    2.串口复位。当外设出现异常的时候可以通过复位设置,实现该外设的复位,然后重新配置 这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。
    复位的是在函数 USART_DeInit()中完成:

    void USART_DeInit(USART_TypeDef* USARTx);//串口复位 
    

    复位很重要,根据情况选择
    3.GPIO 端口模式设置 。在这可能很多人不知道,在中文手册110页有,对应着来就行
    在这里插入图片描述

    4.串口参数初始化
    波特率,字长,停止位,奇偶校验位, 硬件数据流控制,模式(收,发)。我们可以根据需要设置这些参数,这里需要是你在串口助手或者说用别的设备通信时让两者保持一致就行。
    5 .开启中断并且初始化 NVIC
    这里推荐使用中断,使用中断好处是可以控制串口通信在代码中的优先级。
    5.1 NVIC 中断使用
    1.STM32 将中断分为 5 个组,组 0~4。
    2.0 111 0: 4 0 位抢占优先级, 4 位响应优先级
    1 110 1: 3 1 位抢占优先级, 3 位响应优先级
    2 101 2: 2 2 位抢占优先级, 2 位响应优先级
    3 100 3: 1 3 位抢占优先级, 1 位响应优先级
    4 011 4: 0 4 位抢占优先级, 0 位响应优先级
    3. 数值越小所代表的优先级就越高。
    4.:第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
    第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
    6.使能串口
    这个没啥说的,不使能你死活用不了。
    7.开启串口中断
    比如在接收到数据的时候(RXNE 读数据寄存器非空),我们要产生中断,那么我 们开启中断的方法是:
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断,
    我们在发送数据结束的时候(TC,发送完成)要产生中断,那么方法是: USART_ITConfig(USART1,USART_IT_TC,ENABLE);
    8.获取相应中断状态。
    当我们使能了某个中断的时候,当该中断发生了,就会设置状态寄 存器中的某个标志位。
    比如我们使能了串口发送完成中断,那么当中断发生了, 我们便可以在中断处理函数中调用这 个函数来判断到底是否是串口发送完成中断,方法是:
    USART_GetITStatus(USART1, USART_IT_TC)
    ((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) ||
    ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) ||
    返回值是 SET,说明是串口发送完成,中断发生。
    7.编写中断函数
    !!!!这个很重要,一点一点慢慢讲
    中断函数一般格式是
    void USART1_IRQHandler(void)
    使用串口一就要写成T1,2就是T2。
    发送
    STM32 库函数操作 USART_DR 寄存器发送数据的函数是:
    void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
    通过该函数向串口寄存器 USART_DR 写入一个数据。
    读取
    STM32 库函数操作 USART_DR 寄存器读取串口接收到的数据的函数是:
    uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
    通过该函数可以读取串口接受到的数据

    		Res=USART_ReceiveData(USART1);//接受数据Res=对用串口发送的数据
    			b=Res;
    		USART_SendData(USART1,b);//发送数据,发送数据b
    

    发送和读取都要建立在判别串口状态的基础上
    这里介绍下串口状态
    RXNE(读数据寄存器非空),当该位被置 1 的时候,就是提示已经有数据被接收到了,并 且可以读出来了。
    TC(发送完成),当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。

    例如我们要判断读寄存器是否非空(RXNE),操作库函数的方法是: USART_GetFlagStatus(USART1, USART_FLAG_RXNE);
    我们要判断发送是否完成(TC),
    操作库函数的方法是:
    USART_GetFlagStatus(USART1, USART_FLAG_TC);
    判定他们是否为零来确定串口状态。

    总结

    1.参考正点原子的教程
    2.讲解的不好,配置有一个可用的用蓝牙控制跑马灯的基础调试代码
    !!!!

    补充

    手机蓝牙发送 a 模式非Hex
    实际上是0x61 ‘a’
    经过调试发现,有时候发送的是乱码,把模式调成非Hex就好了
    在这里插入图片描述

    发送的是1 收到0x31 我把代码传上去供有需要的朋友下载
    。。。。
    本人比较懒,最近会一直更新些32的使用,,,至于之前没写完的,,,以后有时间补充,32写完打算再写个树莓派舵机控制的飞思卡尔小车

    不知道为啥。。。。F4就不会乱码,,,这个我也很纳闷。。。
    F4代码请看我之前的蓝牙篇

    欢迎各位一起来讨论

    展开全文
  • 我用的是,CC2541低功率蓝牙模块4.0 BLE 串口 带底板直排针 无线蓝牙模块蓝牙是无线短距离传输的一种,有79个频段,工作频段范围是2402~2480MHz,通常传输距离为10米,经过10多年的快速发展,蓝牙技术已经非常成熟,...

    蓝牙是现在智能生态下运用的最多的,比如智能手环,智能手表,智能家居也离不开它的身影。

    我用的是,CC2541低功率蓝牙模块4.0 BLE 串口 带底板直排针 无线蓝牙模块

    蓝牙是无线短距离传输的一种,有79个频段,工作频段范围是2402~2480MHz,通常传输距离为10米,经过10多年的快速发展,蓝牙技术已经非常成熟,广泛的应用在各类产品,特别是数码类产品。主要运用在手机,电脑,蓝牙耳机蓝牙音响,蓝牙手环,智能家驹等等。

    蓝牙优点:

    与蓝牙通讯技术工作频段类似的WiFi无线网络技术相比,蓝牙通讯技术应用于各种设备上有省电,低功耗,传输稳定,小巧,安全方面等优势。




    二、蓝牙模块有两种通信模式

    1、AT指令模式




    2、数据透传模式



    三、AT指令程序设计

    1、设置模块的名字

    //发送字符串
    void usart3_send_str(uint8_t *pbuf)
    {
    	while(*pbuf)
    	{
    		//发送数据
    		USART_SendData(USART3,*pbuf++);
    		
    		//一直检查发送缓冲区是否为空,若为空,则为SET;不为空,则为RESET,也代表说数据还没有发送完成,在发送过程当中
    		while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET);
    	
    	}
    }
    
    void ble_set_config(void)
    {
    	//设置好模块的名字
    	
    	usart3_send_str((uint8_t *)"AT+NAMEStudent.Lin\r\n");
    	
    	delay_ms(500);
    	
    	
    	//获取模块的地址信息,因为通过手机搜索的时候,有些时候无法显示到模块的名字,只能显示到模块的地址信息
    
    	usart3_send_str((uint8_t *)"AT+LADDR\r\n");
    	
    	delay_ms(500);
    }
    //每触发一次中断,都隔1.04ms
    void USART3_IRQHandler(void)
    {
    	uint8_t d;
    	
    	OSIntEnter();    
    	//检查是否接收到串口数据
    	if(USART_GetITStatus(USART3,USART_IT_RXNE)==SET)
    	{
    		//添加用户代码
    		d = (uint8_t)USART_ReceiveData(USART3);
    		Ble_Buff[count++] = d;
    		//通过串口1且波特率为115200bps的观察,发送一个字节80us
    		printf("%c",d);
    		if(Ble_Buff[count-1] == '\n')
    		{
    			count = 0;
    			Ble_Flag = 1;
    		}
    		//告诉CPU,这里已经完成一次接收数据中断,可以进行下一次的数据接收
    		USART_ClearITPendingBit(USART3,USART_IT_RXNE);
    	}
    	OSIntExit(); 
    }


    展开全文
  • STM32两个蓝牙互连进行收发通信

    千次阅读 2019-04-17 11:24:17
    HC05是主从一体化蓝牙模块,可以通过将两个蓝牙配置成一主一从的方式, 主蓝牙开机后会自动去寻找从蓝牙设备,并自动连接。 两个蓝牙模块通信,首先要让两个蓝牙模块进入命令响应工作模式即AT模式(EN接上USB转TTL...

    HC05是主从一体化蓝牙模块,可以通过将两个蓝牙配置成一主一从的方式,

    主蓝牙开机后会自动去寻找从蓝牙设备,并自动连接。

    两个蓝牙模块通信,首先要让两个蓝牙模块进入命令响应工作模式即AT模式(EN接上USB转TTL的VCC或者3.3V,上电,再长按蓝牙模块上的按键,红灯慢闪即表示进入了AT模式)

    配置流程

    主蓝牙:

    1.设置配对码:  AT+PINXXXX  (XXXX为四位数字,并与从蓝牙的配对码保持一致)

    2.设置蓝牙为主机: AT+ROLE=1 (0为从机,1为主机,2为回环角色)

    3.设置蓝牙连接模式: AT+CMODE=0 (0是指定蓝牙地址连接模式,设置为0才能自动的连接绑定的地址)

    4.设置蓝牙连接地址:AT+LINK=98d3:34:90c097(这里的地址是我事先在从蓝牙上查询到的地址,看别的博客是BIND命令,但是我不太清楚这两个命令有什么区别)

    具体代码:

    
    
    	HC05_KEY=1;					//KEY置高,进入AT模式
    	delay_ms(10);
            u2_printf("AT+PIN9999\r\n");
    	u2_printf("AT+ROLE=1\r\n");
    	u2_printf("AT+CMODE=0\r\n");
    	u2_printf("AT+LINK=98d3:34:90c097\r\n");
    	delay_ms(10);
    	HC05_KEY=0;

    从蓝牙:

    1.设置配对码:  AT+PINXXXX  (XXXX为四位数字,并与主蓝牙的配对码保持一致)

    2.设置蓝牙为主机: AT+ROLE=0 (0为从机,1为主机,2为回环角色)

    3.设置蓝牙连接模式: AT+CMODE=0 (0是指定蓝牙地址连接模式,设置为0才能自动的连接绑定的地址)

    具体代码:

            HC05_KEY=1;					//KEY置高,进入AT模式
    	delay_ms(10);
            u2_printf("AT+PIN9999\r\n");
    	u2_printf("AT+ROLE=0\r\n");
    	u2_printf("AT+CMODE=0\r\n");
    	delay_ms(10);
    	HC05_KEY=0;

    蓝牙在连接好之后,即可通过USART2串口进行收发,通过u2_printf()函数发送数据。

    接收到的数据存放在USART2_RX_BUF缓冲区内。

    展开全文
  • 基于stm32蓝牙开关

    2019-11-07 14:01:24
    本设计为原创DIY作品,2019.10.18日打好PCB样板,代码调试了近10天,出了V1.0版本,还有待改进的地方,比如功耗问题,V1.0版本功耗在58毫安左右,经改进V2.0功耗在2毫安左右(主要是舵机的待机功耗,在2.5毫安左右),...

    本设计为原创DIY作品,2019.10.18日打好PCB样板,代码调试了近10天,出了V1.0版本,还有待改进的地方,比如功耗问题,V1.0版本功耗在58毫安左右,经改进V2.0功耗在2毫安左右(主要是舵机的待机功耗,在2.5毫安左右),2.0的板子还没打好,这里先贴出V1.0的板子设计和代码,设计上或者代码上有问题的还望大家指正。如需转载,请注明出处,QQ:1907913345,Author:Vence

    Q1:此电路中主芯片的VCC和GND之间没有加耦合电容,在电压不稳定的情况下,容易烧坏主芯片,一般情况不会烧坏

    Q2:此电路中的按键GND脚设置错误,需要的请自行修改板子

    Q3:所使用的蓝牙模块为信驰达的主从一体4.0

    Q4:V1.0的电路图中我把蓝牙模块的P05和P04接到BLUE和RED上了,本来希望来用来判断是否连接成功,发现这样设计的话,没法将P05拉低,就不能利用蓝牙进行停机唤醒。

    Q5:AMS1117可以不使用,本来想用5V的电源来驱动马达的,但是发现马达转速太快,关不了灯,后来换成了舵机,就不需要AMS1117和HR9110的马达驱动芯片了

    原理图:

    PCB:

     

    实物:

     

     

    操作方式:

    V1.0版本:蓝牙APP发送0x01,舵机转动到-45°,发送0x02,舵机转动到-90°,发送0x11,舵机转动到45°,发送0x12,舵机转动到90°,发送0x00,舵机转动到0°。

    主函数代码:

    //本设计利用信驰达进行蓝牙通信,通过串口1控制电动马达的转动,stm32的PB1控制蓝牙模块的使能,蓝牙模块的工作电压范围在1.8-3.3V,具有低功耗
    //2019年10月22号21点44分,作者Vence
    #include "stm32f10x.h"
    #include "usart1.h"
    #include "bluetooth.h"
    #include "key.h"
    #include "led.h"
    #include "motor.h"
    #include "runmodel.h"
    
    u8 motor_mode = 0;       	//电机运动模式
    u8 send_flag = 0;
    
    int main(void)
    {	
    		NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);		         //中断控制器分组设置
    		Key_Init();										                            //初始化按键
    		EXTI_Configuration();
    		Usart1_Init(115200);					                           //设置串口1的波特率为115200bit
    		LedInit();									                            //初始化led
    		Delay_Init();									                         //初始化延迟函数
    		BlueTooth_Init();							                        //初始化蓝牙模块
    		USART_Cmd(USART1, ENABLE);													 //除能串口
    		GPIO_ResetBits(GPIOB,EN);
    		Motor_Init();																				//舵机初始化
    		Lo_Signal;
    		while(1)
    		{
    			if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == Bit_RESET)
    			{
    				DelayMs(100);
    				if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == Bit_RESET)
    				{
    					send_flag++;
    					if(send_flag == 2)
    						send_flag = 0;
    					if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2) == Bit_RESET)
    						GPIO_SetBits(GPIOA,GPIO_Pin_2);	
    					else
    						GPIO_ResetBits(GPIOA,GPIO_Pin_2);	
    					
    					if(send_flag == 1)
    					{
    						Motor_Mode(Reverse_45);
    					}
    					
    					if(send_flag == 0)
    					{
    						Motor_Mode(Forward_45);
    					}
    				}
    			}
    			
    		}
    }
    
    

     

    展开全文
  • HC-05蓝牙串口通信模块应该是使用最广泛的一种蓝牙模块之一了。为什么呢? 因为HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手。说白了,只是个蓝牙转串口的设备,你...
  • STM32开发 -- 蓝牙开发详解(1)

    千次阅读 2020-03-18 11:01:38
    本来想着现将ADC、CAN、I2C、PMIC、FLASH等等讲完了,晚些时候再讲蓝牙的。 emmmm,现在老是遇到一些蓝牙类的问题。看来有必要先讲了。 资料都有看过一遍,如果只是简单的了解蓝牙用法,很简单的。 多的不说了,...
  • STM32实现蓝牙HC-06通信

    千次阅读 2019-04-16 21:01:33
    蓝牙模块上有一个LED,LED 指示蓝牙连接状态, 闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口 在未建立蓝牙连接时支持通过 AT 指令设置波特率、名称、配对密码, 设置的参数掉电保存 AT指令 1)测试通讯 ...
  • 安卓和STM32蓝牙连接的例程。安卓作为上位机,STM32作为下位机传输数据
  • STM32循迹+蓝牙小车

    千次阅读 多人点赞 2016-11-27 16:51:30
    stm32智能循迹小车+蓝牙控制+代码
  • stm32F103的板子、HC-05的蓝牙、USB-TTL的插头、stlink。 整个过程是常用的控制系统的闭合回路,设计通信的收发,嵌入式动作的响应等。 开发过程的顺序: 作者在进行了很多次的类似开发,每次在蓝牙的通信方面...
  • 基于STM32的WiFi模块EMW3165/3162/3238EMW3238以STM32F4为主控MCU,内置512KB Flash+128KB SRAM,高度集成WLAN MAC/BB/RF,蓝牙4.1,3.3V单电源供电,邮票孔SMT封装。 EMW3238运行于MiCO物联网操作系统,用户...
  • 基于stm32的烟雾报警系统(可与APP进行数据传输)

    万次阅读 多人点赞 2020-10-07 22:24:53
    这是之前做的一个项目,完成之后开源给大家,有需要得可以进行下载,下位机开发是基于STM32,APP用易安卓开发得,二者通过手机蓝牙和单片机上蓝牙转串口模块进行通信。需要现成得代码得话可以去我上传的资源目录下...
  • 1.1目的 这是我在学习了STM32以后第... 1.2系统组成 本设计使用的单片机型号为STM32F103C8T6(网上买的小型开发板),蜂汇蓝牙4.0模块(选它是因为它可以在微信上用小程序直接连接),12V直流电机,限位开关 1.3...
  • STM小车蓝牙

    千次阅读 2018-11-26 20:20:28
    这节让我们牛逼轰轰的开始蓝牙遥控吧!!! 你需要先自学蓝牙模块相关知识,使用方法等 我们采用的是hc-05 TX:接STM开发板”RX”引脚//PB7 RX:接STM开发板”TX”引脚//PB6 GND:接STM开发板”GND”引脚 VCC:...
  • 基于STM32F407+蓝牙模块(HC-05)与电脑蓝牙通信(含代码) 在许多基于STM32控制方面,很多时候需要我们获得许多数据,而这些数据很多时候不能有线传输,要进行必要的无限传输,在无限传输方面蓝牙有着许多的优点,...
  • stm32串口通过蓝牙透传接收到数据,解析,完成相应的函数功能(如小车的前进后退,亮灯、舵机控制); 蓝牙apk发送点击按钮后的数据,发送到单片机蓝牙端;   蓝牙apk界面 蓝牙源码  ...
  • 使用STM32F103C8T6的板子,usart1,PA9.PA10的管脚,蓝牙模块接线正确。 使用串口调试助手只能够在板子一上电,蓝牙刚刚连接上的瞬间接收到一部分数据,此后USB转串口的那个模块的灯就一直红着,处于别的蓝牙连接不...
  • 基于STM32的无线通信模块使用——HC_05蓝牙串口

    万次阅读 多人点赞 2018-03-05 19:12:55
    STM32串口配置模块 串口通信 小结 一、模块介绍 1、供电电压3.3V~3.6V; 2、支持AT指令集配置模块; 3、采用CSR主流蓝牙芯片,蓝牙V2.0协议标准; 4、波特率最高为1382400bps; 5、配对以后当全双工串口使用...
  • STM32开发 -- 蓝牙开发详解(2)

    千次阅读 2020-03-18 11:01:18
    如需转载请注明出处: 接着 STM32开发 – 蓝牙开发详解(1) 这一篇接着讲。 如需转载请注明出处:
  • 基于蓝牙的APP控制STM32板LED小灯

    千次阅读 多人点赞 2018-11-08 10:01:00
    硬件:蓝牙模块、STM32F103战舰(或其他单片机)、手机一部 软件:AppInventor(网上下载,不能放在有中文的文件夹中,否则报错) 二、功能实现 蓝牙模块:连接HC-05 VCC GND TX(接单片机RXD) RX(TXD)打开...
1 2 3 4 5 ... 20
收藏数 2,899
精华内容 1,159
关键字:

stm32 蓝牙