迅维网

查看: 1607|回复: 0
打印 上一主题 下一主题

【NUCLEO-F412ZG试用体验】蓝牙串口(

[复制链接]
跳转到指定楼层
1#
发表于 2016-12-26 10:10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 山东青岛 来自 山东青岛

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
在玩STM32时用的最多的就是串口了,之前学了一段安卓应用开发,稍微玩了一下蓝牙SPP通信,只不过是SOCKET通信,也知道STM32可以外接蓝牙串口模块,碍于手上没有模块一直没有玩起来,在工作中也有接触蓝牙模块,只不过能力有限,蓝牙协议相关的东西太多了,没有深入了解。这次玩这个也就是通过串口进行数据传输,并没有深入蓝牙的相关协议。下面是关于STM32和蓝牙模块之前的通信模型。

                               
登录/注册后看高清大图

蓝牙模块的应用主要是通过串口和STM32进行连接,通过PC同时连接蓝牙模块和STM32连接。PC和蓝牙模块之间是通过蓝牙无线连接,而STM32和PC之间是通过串口进行通信。目前只做了单方向通信。就是通过蓝牙向STM32发送数据,暂时没有通过STM32控制蓝牙模块,执行一些蓝牙模块的指令,这个也很容易做到,只需要在接收到PC发来的数据后进行重组,通过串口发送给蓝牙模块就可以。

                               
登录/注册后看高清大图

效果图如上,上部的终端连接的是F412的串口,而下面的终端连接的是蓝牙串行通信链路,目前可以单方向的进行数据传输。关于蓝牙模块的使用的一点感想,就是蓝牙模块有两种状态,一种是命令状态,一种是数据传输状态。当在命令状态时,通过F412向蓝牙模块发数据,如果是AT命令,则蓝牙模块会做相应的处理,但是连接上蓝牙后,发送的就不再是命令了。所以实际开发的过程中应该区分这两种状态。但是如果蓝牙串口和电脑之间断开连接,STM32并不能区分这种状态,虽然可以通过字符串查询,但是不能保证应用的过程中也包括状态信息一样的字符串,能想到的也就是尽量避免使用AT命令状态返回的字符串。
同时这次修复了一处错误,就是对printf进行的封装,如下
  • int os_print(const char *fmt, ...)
  • {
  •     int res = -1;
  •     com_get_sem();
  •     va_list args;   //定义va_list类型变量,用来存储单个参数
  •     va_start(args, fmt);    //使用args指向可变参数的第一个参数
  • //注意,下面不是printf,如果是printf则无法打印格式化的字符串。

[color=rgb(51, 102, 153) !important]复制代码

spp的源文件如下,
spp.c是核心部分,
spp_interface.c是作为接口供外部处理数据,这里仅仅是打印了蓝牙模块接收到的数据。
spp_transport.c应该是处理蓝牙模块的收发函数,这里没有做好,接收部分没有放到这个文件。

                               
登录/注册后看高清大图

所要作的工作就是把spp的接收函数映射到STM32的串口,当遇到“\r\n”时处理这一帧数据。
待有时间再把双向收发这一部分做一下,同时也要对数据和命令两种模式进行区分。

NUCLEO_F412.zip

2.84 MB, 下载次数: 1, 下载积分: 下载分 -2 分, 下载 1 次


您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图


芯片搜索

快速回复