本来半年前就做好的东西了,因为各种各样的原因拖到现在才得闲发出来,算是让大伙久等了
相信大家之前都撸了不少一元pos机吧。
上面有款蓝牙模块tc,因为需要协议栈才能使用,所以困扰了不少人,大家基本的处理方法都是弃之堆灰。
直到论坛大神@yht 给出了初始化和协议转接的方法,见:
stm32驱动蓝牙pos机里面的蓝牙模块 tc:
于是这个芯片得以能玩转。然而因为需要一些编程水平,所以大家的选择还是继续让这个模块继续堆灰。
于是我就有了个想法,做个透传模块,于是有了这个帖子:
不用拆芯片,不用调程序,直接在pos机板上玩TC蓝牙模块|
但是这样离方便使用,可以零基础玩转还有一些距离,为了达到最终完美,于是就有了本贴
首先需要找一款有两个串口的MCU,而且要体积小,成本低,于是选择了efm32tg110这个芯片(具体为什么成本低,楼下细说)
这款芯片的手册截图
arm cortex m3内核 运行在32mhz(强大运算足够处理大数据量下的协议栈)
32k flash+4kram
两个串口(这是最关键的)
有一路12位dac,两路12位adc(麻雀虽小,五脏俱全),方便和蓝牙搭配做便携式小设备
体积小,qfn封装
功耗低
等等
原理图
pcb
pcb的面积很小,就是一个正常蓝牙模块大小+天线+排针占用的面积
30mm*16mm
没有用上的引脚全部引出,其中包括完整的dac和adc,这样的好处是,以后如果有余力开发,可以直接用这个最小蓝牙板做一个无线的测量仪器,或者无线小控制器
打好的pcb
焊接完成的模块正面
焊接完成的模块背面
上电以后,可以在手机或者带蓝牙的电脑上搜搜到蓝牙模块 默认名称是 POSYSTORAGE_TC
设备地址码是唯一的,防止冲突(使用了单片机的唯一uid)
连接成功,正常通讯中
电脑通过串口发送mydigit
手机通过蓝牙发送 posystorage
正常联机的各种状态指示信息
第一行提示当前波特率
第二行提示已经初始化成功啦
第三行提示蓝牙已连接
第四号提示蓝牙已断开
板子正面有个LED
在初始化过程中快速闪烁。当初始化成功后,转为慢闪
当连接后,变成常亮。断开连接则为慢闪
板子有6个排针孔。
vcc和gnd是电源,不多说
rx tx为透传串口
swd和sck为板载mcu调试和程序下载接口。也可做普通io使用
BT指令的详细解释
为了方便使用,实现一键零基础操作,我就搞了个BT指令集(参考市面上的某些无线模块的AT指令集)。这样一些简单的配置,比如模块改名或者更改波特率什么的就不需要程序编译程序,直接BT指令操作就行。
BT指令的使用方法:首先连接串口,给蓝牙模块上电,等待初始化完成(指示灯由快闪变为慢闪为初始化成功,或者串口提示初始化成功)
不用连接蓝牙(即在非连接状态下)
输入BT和BT+xxx指令来实现操作。
注意,所有的指令均不需要换行,不需要加回车
比如说,输入BT
回复BT OK!
表示串口正常,指令正确,工作正常
输入BT_ABOUT 显示关于信息,版本信息,设备mac,固件版本,作者信息
1.0版本的消息
1.1版本的消息
输入BT_LIST
将罗列 BT指令集支持的所有指令
BT_MSG_ON打开提示信息
如果打开了提示信息,会提示初始化状态,是否联机得到信息
BT_MSG_OFF关闭提示信息
所有提示信息均不显示
这样的好处是,如果是外接MCU使用,就可以真正透传消息,而不受提示信息的干扰
BT_RES_FAC 恢复原始出厂状态,没啥好讲的
蓝牙名称恢复TC_POSYSTORAGE
波特率恢复
默认消息提示打开
BT_HELP 帮助信息,提示有些BT指令怎么使用,比如说,怎么设置串口波特率和结束符,奇偶校验什么的
BT_RENAME 更改蓝牙的名称。更改后下次上电生效
BT_UART_BPS 更改波特率。更改后下次上电生效
如果输入了错误指令,会这样提示。比如说输了小写什么的
开始讲述制作心路历程
之前楼上不是说了,一直在苦苦寻觅 “两个串口,而且要体积小,成本低的MCU”
找了一久,突然一日在某论坛商家看见一款拆机的板子,价格便宜(为了避免打广告嫌疑,就不说商家明和价格了)
卖家的图
这个板子,上面有一个似MCU的芯片,没有主丝印,数了下24脚,封装应该是QFN24
然后就开始脑洞了~
以下几个条件判断出了大概80%的概率是efm32的MCU
如图
1、封装是QFN24,能对应上
2、芯片侧面所有脚都是io或者电源,没有gnd脚,说明gnd只有中间大焊盘有
3、电源引脚能对上三,其中两个104的电容颜色是一样的,另外一个是105,不是一个材质(颜色有微差异)
这样确定下来可能有三款芯片
efm32tg110
efm32zg110
和efm32hg110
三款是属于不同的产品系列线,但是引脚和封装都是一样的,看外观无法辨别。
犹豫许久,决定买来碰碰运气
因为便宜嘛,买少了邮费不划算,所以买了一小包
体积很小的pos机(又是pos机,摔~~~~~)
拆开,第一个拆的有点失败哈,太暴力了,不过主要元件没事
各部分拆开对照图
22合一友情上镜~~
后面的电池基本没电了
板子正面
板子背面
小6脚芯片特写。到现在我也不知道这是啥功能
反正不是猪脚,不重要,不管了
右上角有个双运放
注意到板子是4年前的老东西了,怪不得电池都没电了
继续排除走线,发现和efm32吻合度99%,所有电源脚都能对上,切引出来调试接口,就是图上上锡的那两个焊盘
掏出自制jlink(做个小巧漂亮的jlink调试器|
按手册接线开始测试
配套好simplicity和jlink软件
一联机,果然大惊喜,啊hhhhhh
赚翻了赚翻了
果然赌对了
这样看不出来是吧,我圈圈重点
看到没 energy micro
energy micro被silion lab收购
这尼玛不就是efm32 哈哈哈哈哈哈
图上说芯片被锁住了,那就尝试解锁 使用unnlock efm32gxxxx指令
解锁成功 so easy~~
再次联机
看到没有 arm cortex m3内核,这样果断确定是efm32tg110
因为只有他是cortex m3内核,另外两个是cortex m0内核
继续来确定下芯片容量
使用jflash
先选该系列最大容量,尝试能不能读写成功
显然是可以的
没问题~~
最终确定型号EFM32TG110F32
得到整个“赌”芯片中最好的结局,三个系列中配置最好的mcu,通型号中储存空间最大的,哈哈哈~
继续玩,焊接个led上去,尝试成功点灯
吧外壳都拆掉,元件进行分拣,方便保存
这些是不要的垃圾
先说说怎么靠使用Simplicity Studio 来进行快速的,简单的,图形化傻瓜配置的点灯实验,以方便快速测试
首先下载安装并打开Simplicity Studio,新建工程
选择本贴的猪脚efm32tg110f32
选择Simplicity configurator program,图形化配置工程
名字随便写
选择led引脚
配置为推挽
main函数很简单
很简单,是不是
复制代码
#include "em_device.h"
#include "em_chip.h"
int main(void)
{
int i;
CHIP_Init();
enter_DefaultMode_from_RESET();
while (1)
{
for(i = 0; i < ; i++);//做延时作用
GPIO_PinOutToggle(gpioPortC, 15);//翻转LED
}
}
然后,编译下载,就可以看见led开始卖力的闪烁了
好了,说是制作心路历程,现在说的有点跑题了,拉回来哈
拿出之前玩efm32tg剩下的转接板。反正引脚都一样,直接往上怼呗
这里吐槽下垃圾板厂的v割工,都吧丝印割没了你知道么。精度这么差,哎~
拆下芯片
焊接过程略过不表
qfn总体不怎么好焊接,需要耐心和细心
背面全是容阻元件。这MCU电源脚奇多
日常成功点灯
这里放下这个小核心板的原理图和pcb截图
背面用丝印画了个mini小壁虎,结果实物出来,这都啥玩意啊?四不像?
继续哈,拆完芯片的板子不能浪费
来跑下走线,方便在板玩耍
跑走线第一步,日常先上锉刀嘛
最终标注出所有io的走线结果,这里还需要感谢坛友 @shi988
好了,一个破板子研究了半天,终于要步入正题了
开始研究蓝牙透传
初期测试是这样的
调通透传程序以后
画了1.0版本的转接板
打样归来如图
开始焊接蓝牙转接板
拆下芯片+转接板背面
tc模块来自某pos板子
焊接过程略过不表
焊完才发现,疏忽大意阴沟里面翻船了
引脚接错了,只能靠飞线补救了
好吧,修改好再打一版,哎
v1.1来了
这次就不用飞线了嘛,舒服
可以用直排针这样焊,能比弯排针显著减小体积,不过也牺牲了些许牢固程度
因为板子位置有限。部分元件标注了参数值
剩下没标的,都是104电容 100nF
图中红圈圈中
板子上的元件,除了106电容,基本都可以从原芯片的小板子上拆到
为了保护元件,建议套个热缩管
左边的板子是拆完有用元件后的样子~
最后来个大合影
源代码,固件和原理图需至原帖中获取:
谢谢观看!
浏览更多精彩内容请登录数码之家网站
技术交流请联系原作者
作者:
本文来源:数码之家
标签: 蓝牙
②文章观点仅代表原作者本人不代表本站立场,并不完全代表本站赞同其观点和对其真实性负责。
③文章版权归原作者所有,部分转载文章仅为传播更多信息、受益服务用户之目的,如信息标记有误,请联系站长修正。
④本站一律禁止以任何方式发布或转载任何违法违规的相关信息,如发现本站上有涉嫌侵权/违规及任何不妥的内容,请第一时间反馈。发送邮件到 88667178@qq.com,经核实立即修正或删除。