单片机与4G芯片的串口通信

文章描述了一名工程师在接手基于ST32F103和ucos-II操作系统的项目后,改进4G芯片的http协议,引入mqtt并进行一系列优化的过程。从串口中断处理、任务调度到AT指令的精确使用,经过多次迭代解决了设备联网不稳定的问题,强调了串口配置、任务优先级和指令解析的细节重要性。
摘要由CSDN通过智能技术生成

前言

接手的前任的工作,前任对4G芯片的驱动耗时长,采用的http协议,轮询请求,我接手的时候非常嫌弃,毫不犹豫的打算大刀阔斧的改~~~
这一改,就改了小半年,这其中的辛酸泪。。。

项目简介

基于ST32F103,操作系统 ucos-II,系统起了几个任务,联网任务,打印任务,工作流主任务,定时器,串口等,乍一眼很简单,我只需要更改联网任务就可以,莽夫就是冲~

Round 1

沿用任务内循环执行,修改了AT指令,取消了http的请求,增加了 mqtt 的 联网,订阅,并通过 指令获取联网状态,测试通过,服务器发送的消息能收到,设备能响应,小范围找设备测试,2个月左右,总有反馈说无法开机,需要断电在上电。。。

Round 2

反馈问题后,开始找问题,服务器端增加定时任务,5秒检测一次应开机设备是否正常运行,非正常情况下重复发送指令,直到设备开机成功或者3分钟后。。。

Round 3

重新修改设备联网任务,取消了task 执行,通过串口中断执行,4g芯片一旦应答了立马执行下一个at指令,快是真的快,之前联网要30秒现在只需要3秒。。。

Round 4

问题又来了,串口中断要快速退出,耗时业务尽量减少,避免ucos-II系统 因权重问题无法正常执行任务,再改~~~
采用任务轮训,串口只改变状态,貌似没问题了

Round 5

问题又又来了,反馈设备断电后无法正常联网,卧槽,一听就像是玄学问题,努力泡生产复现问题找bug,因前任的ucos-II任务配置不正确,主任务的延时只有1ms,如果主任务耗时长的话有可能导致其他task 没有时间执行,好嘛,联网task都不执行了,还能上网么= =# 接着改,又不敢大改,把联网逻辑丢主任务中去了~~~ 这下应该好了吧。。。

Round 6

不出所料,周末电话被打爆,又又又不能联网了,还需要断电上电,等于问题没有解决,继续泡生产,找问题。。。
一开始以为是mqtt服务自动订阅的配置冲突,导致设备无法订阅成功,取消了自动订阅,问题还在,排除了服务器配置问题,又继续在嵌入式项目中捉鬼。。。
又把4g芯片的文档读了一遍,发现了!!!
ZQMCON ,mqtt 链接的at指令,会主动上报 STAT,我的逻辑判断 如果是 联网状态,那我就自以为联网成功了。。。

项目中遇到的一些重点勾一勾

  1. 串口中断不要执行太耗时的任务
  2. 字符串查找 strstr 是个比较耗时的,容易导致串口丢包
  3. stm32的串口权重要认真配置
  4. 4G芯片AT指令 有的 OK结束,有的OK开头,还有 \r\n ,每个指令都要认真看文档,避免错误判断
  5. ucos-II 系统中,高优先级任务不要一直跑,用低优先级任务给高优先级任务发信号,让高优先级任务开始执行比较好
  6. 中断8位一接收,判断完整接收的逻辑要足够简单和高效

总结下

这项目陆陆续续的改了肯定比上面的描述得多,能力太差,估计前前后后 20多次调整,目前总算稳定了,挫败感十足,从来没有一个bug改这么久的~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hotter23

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值