BM77SPPS3蓝牙模块串口驱动研究(笔记本通过串口软件调试蓝牙模块)

最近接收一个项目,需要使用microchip公司出品的蓝牙模块,该模块自带陶瓷天线,蓝牙通信有效距离达到20米,支持串口、I2C驱动。本人主要是研究串口驱动,因为是第一次接触蓝牙,那么首先需要对一些概念进行熟悉。

该蓝牙模块的技术资料可以从网址下载:http://download.csdn.net/detail/camelbrand/8957967,首选需要了解该模块的硬件连接图,根据前面下载的资料手册《BM77_Data_Sheet_v2.0r》该模块的封装图如下图所示

本人只使用蓝牙模块的透传功能,也就是蓝牙上电之后,从蓝牙无线端接收到数据A,蓝牙通过23引脚TXD转发A出去,从22引脚RXD输入的数据B,蓝牙通过无线端发送B出去,本次测试使用的最小系统的硬件连接是引脚1、2、3、33、32、31接GND,引脚4、5、7接VCC3.3。注意如果使用USB转TTL模块给蓝牙模块供电,可能因为模块驱动能力不足导致蓝牙模块无法正常工作,如果想测试蓝牙模块是否上电工作正常,只需要将上述VCC3.3和GND的引脚全部接到直流稳压电源上(驱动电压为3.3V,注意不要使用5V),然后通过蓝牙手机或者笔记本(笔记本需自带蓝牙)搜索蓝牙模块,默认出厂蓝牙名称是Dual-SPP,显示为一个蓝牙耳机连接图标。本人的安卓手机是华为荣耀4X全网通(华为P7和P8可以连接成功),经测试无法搜索到该模块,iphone手机能够搜索到,但是无法连接,本人最后使用的是联想笔记本G40-70M连接成功,而且刚开始无法搜索到该外设,通过驱动精灵将笔记本蓝牙驱动升级为最新版之后才能搜索到Dual-SPP蓝牙模块。

连接成功后,通过蓝牙的打开设置可以查看蓝牙连接状况

通过查看COM端口,如果有下面的端口列表显示,就可以使用串口调试助手通过COM5与蓝牙模块进行数据通信

注意,默认出厂的BM77SPPS3模块的串口波特率为115200,电脑调试软件使用的配置如下,其中hello1是通过BM77模块的22引脚RXD周期输入的字符数据,字符串数据最后通过蓝牙模块发送到笔记本串口调试助手软件当中。实际使用单片机驱动BM77SPPS3模块不需要任何BM77SPPS3的初始化代码,只需要将单片机对应的与蓝牙模块连接好的串口配置好波特率等基本参数就可以通过该蓝牙模块进行数据收发操作,可见该蓝牙模块默认出厂的透传模式操作非常方便。

蓝牙参数配置

蓝牙烧录配置如果需要修改蓝牙模块的名称,可以通过驱动代码(参考网址,网址2,本人尚未测试验证,有兴趣的朋友可以尝试一下,驱动代码基于STM32平台)修改,也可以通过本文开头提供的资源下载目录http://download.csdn.net/detail/camelbrand/8957967当中的windows配置工具修改,需要注意的是windows软件可以通过串口配置蓝牙模块,注意通过串口修改蓝牙模块参数之前,需要将模块的18引脚P20串接1k或者2K电阻然后接地,先使用"BM77SPP03 UI v301.106.exe"软件配置生成一个txt配置文档XX,然后使用"E2PROM_tool_100913.exe"软件加载txt文档XX,使用串口将配置参数烧录到BM77SPPS3模块当中,如果要继续使用蓝牙模块,需要将18引脚(P20)悬空。

参考网址:

网址1:模块的配套资料手册在如下网址:

http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=600292&extra=page%3D&page=1

网址2:串口驱动BM77SPPS参考驱动代码:

http://www.pudn.com/downloads669/sourcecode/embedded/detail2709075.html

时间: 2024-10-28 23:17:18

BM77SPPS3蓝牙模块串口驱动研究(笔记本通过串口软件调试蓝牙模块)的相关文章

串口驱动程序设计详解---串口初始化(上)

TTY驱动程序架构: 1. TTY概念解析 1.1 /dev/ttySCA0 1.2 /dev/tty1-n 1.3 /dev/console 在linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备. . 串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备.Linux把每个串行端口都看做是一个字符设备.这些串行端口所对应的设备名称是/dev/ttySAC*; .控制台终端(/dev/console) 在Linux系统中,计算机的输出

[国嵌攻略][131][串口驱动分析-接收]

tty数据接收流程 //tty子系统 1.tty_fops中的tty_read响应系统调用 2.tty_read调用tty_ldisc_N_TTY中的n_tty_read n_tty_read 1.设置app的状态 2.如果没有数据可读,让阻塞生效 3.如果有数据可读,从read_buf中读走数据 什么时候串口驱动会把数据送到n_tty_read的read_buf中 当串口接收到数据时会产生接收中断,然后中断处理程序会把数据送到read_buf中. 串口驱动如何收到数据 串口中断处理程序s3c2

【驱动】USB驱动实例·串口驱动·键盘驱动【转】

转自:http://www.cnblogs.com/lcw/p/3159370.html Preface USB体系支持多种类型的设备. 在 Linux内核,所有的USB设备都使用 usb_driver结构描述. 对于不同类型的 USB设备,内核使用传统的设备驱动模型建立设备驱动描述,然后映射到 USB设备驱动,最终完成特定类型的 USB设备驱动 USB驱动·入门:http://infohacker.blog.51cto.com/6751239/1226257 USB串口驱动 USB串口驱动关键

PCI、串口驱动程序设计

一.PCI总线概述 总线是一种传输信号的信道:总线是连接一个或多个导体的电气连线.总线由电气接口和编程接口组成. PCI是peripheral component interconnect(外围设备互联)的简称,是在桌面及更大型的计算机上普遍使用的外设总线. PCI总线具有三个非常显著的优点: 1.在计算机和外设间传输数据时具有更好的性能 2.能够尽量独立于具体的平台 3.可以方便地实现即插即用 从结构上看,PCI总线是一种不依附于某个具体处理器的局部总线,它是在CPU和原来的系统总线之间插入的

Smart210学习记录------linux串口驱动

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27025492&id=327609 一.核心数据结构 串口驱动有3个核心数据结构,它们都定义在<#include linux/serial_core.h> 1.uart_driver uart_driver包含了串口设备名.串口驱动名.主次设备号.串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver). struct

linux串口驱动分析

linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作.UART 使用系统时钟能够支持最高 115.2Kbps 的波特率.每一个 UART 通道对于接收器和发送器包含了 2 个 64 位的 FIFO. 寄存器 名称 地址 在linux中的描写叙述 (2410 和 2440 处理器对内存地址映射关系同样) UART 线性控制寄存器(ULCONn) ULC

串口驱动

一.串口驱动中的数据结构 尽管一个特定的UART设备驱动完全可以按照tty驱动的设计方法来设计,即定义tty_driver并实现tty_operations其中 的成员函数,但是Linux已经在文件serial_core.c中实现了UART设备的通用tty驱动层,称为串口核心层,这样,UART驱动的主要任 务变成了实现serial_core.c中定义的一组uart_xxx接口而非tty_xxx接口. 1.1下图描述了串行系统间的层次结构关系,可以概括为: 用户应用层 --> 线路规划层 -->

从串口驱动的移植看linux2.6内核中的驱动模型 platform device &amp; platform driver【转】

转自:http://blog.csdn.net/bonnshore/article/details/7979705 写在前面的话: 博主新开了个人站点:你也可以在这里看到这篇文章,点击打开链接 本文是博主学习linux驱动移植整整两周后通过查阅资料并结合自己的一些观察所做的一些记录,旨在作为日后温习材料,由于博主尚无太多经验文中内可能会出现一些谬误,希望看到的热心朋友能拍砖指正. 在我前面的日中已经提到了我所做的SC16C550的串口移植,本来是没有什么技术难度,但对于新人来讲了解内核代码的结构

linux串口驱动分析——发送数据

一.应用程序中write函数到底层驱动历程 和前文提到的一样,首先先注册串口,使用uart_register_driver函数,依次分别为tty_register_driver,cdev_init函数,找到使用的file_operations,即应用程序与tty架构的统一接口.步骤不再赘述. static const struct file_operations tty_fops = { .llseek = no_llseek, .read = tty_read, .write = tty_wr