首页 > 其他分享 >CH9121_MQTT应用

CH9121_MQTT应用

时间:2024-10-21 14:21:02浏览次数:7  
标签:引脚 MQTT 应用 串口 CH9121 mcu USART2

参考代码程序下载:https://files.cnblogs.com/files/blogs/808422/EXAM_mqtt_912x.zip?t=1729489963&download=true

前言:

(1)很多物联网\嵌入式应用需要将采集的数据上传到MQTT服务器以实现集中实时管理。然而可能前期选型时并未考虑到这一点导致选用的MCU没有网络功能无法实现。并且可能开发人员对于网络部分并不是很了解,项目急学习成本较高。

针对于此类需求,此时推荐看一下沁恒的CH9121\CH9120,这是一款串口转网口的透传芯片,无需代码开发,配套上位机工具,输入相应参数并接上mcu串口,即可将mcu拓展出网口功能。

芯片手册及开发包:搜索 CH9121 - 南京沁恒微电子股份有限公司 (wch.cn)

 

(2)本文测试为:CH32v307+CH9121,搭配EMQX这一款mqtt服务器进行测试。

该款软件的安装方式、mqtt协议介绍以代码中mqtt驱动解析参考此链接:CH395+EMQX实现MQTT应用(Windows系统) - Lqqq123 - 博客园 (cnblogs.com)

 

部分关键代码解析

(1)CH912x.c文件中119行,串口中断函数。

 1 void USART2_IRQHandler(void)
 2 {
 3     u8 sta;
 4 
 5     if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) != RESET)//
 6     {
 7         MyBuffer[rec_len++] = USART_ReceiveData(USART2);
 8     }
 9     else if(USART_GetFlagStatus(USART2, USART_FLAG_IDLE) != RESET)
10     {
11         sta = USART2->STATR;
12         sta = USART2->DATAR;
13         Rec_overFlag = 1;
14     }
15 }

因为CH9121是一款透传芯片,所以网口来了数据直接会从串口透传出来,想要接收完整的一帧数据,要借助到线路空闲(IDLE)这一中断源来判断一帧数据已经全部接受完毕。通过先读状态寄存器再读数据寄存器可以清除此中断。详细参考CH32v307手册,此处不过多赘述。(注:结合实际mcu型号,不同型号mcu可能处理方式不同)

 (2)CH912x.c文件中321行

 1             if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==RESET )//将mcu的pA0引脚和9121的TCPCS1(芯片30脚)连上
 2             {                                                  //通过电平状态检测tcp是否连接上
 3                Rec_startFlag = 1;//tcp连接已建立,开始mqtt应用
 4                MQTT_Connect(username, password);
 5                printf("TCP Connect Success!\r\n");
 6             }
 7             else
 8             {
 9                 printf("TCP Connect-ing!\r\n");
10                 con_flag = 0;
11             }

通过将mcu的PA0引脚接到CH9121的TCPCS1(30脚)引脚上,借此来判断tcp连接是否已经建立成功从而发送MQTT_Connect报文。

此处有两种方式可以判断tcp连接是否建立:

①按照上述方式将tcpcs1引脚引出和mcu的一个gpio脚连起来,判断电平状态。此种方式最直接简单,推荐。

②如果硬件引脚没有引出,可以通过串口指令的方式判断tcp连接状态从而实现功能。

发送串口指令前,要先进入串口配置模式,发完指令后再退出串口配置模式即可。

关于CH9121串口配置模式的说明及代码例程,参考此链接:CH9121串口指令配置参考 - Lqqq123 - 博客园 (cnblogs.com)

 

标签:引脚,MQTT,应用,串口,CH9121,mcu,USART2
From: https://www.cnblogs.com/Lqqq123/p/18489353

相关文章

  • Nuxt.js 应用中的 build:done 事件钩子详解
    title:Nuxt.js应用中的build:done事件钩子详解date:2024/10/21updated:2024/10/21author:cmdragonexcerpt:build:done是Nuxt.js的一个生命周期钩子,它在Nuxt应用的打包构建器完成运行后被调用。这个钩子为开发者提供了一个在构建过程结束后执行特定逻辑的机会,可......
  • 华为鸿蒙Stage模型:让应用更轻量、高效、安全
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、Stage模型:一个轻盈的舞台想象一下,......
  • 华为鸿蒙 ExtensionAbility 组件:扩展应用功能的舞台
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。华为鸿蒙系统的阶段模型为开发者提供了......
  • 华为鸿蒙 Want:应用组件之间信息传递的桥梁
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在华为鸿蒙系统中,应用组件之间的信息传......
  • 多模态机器学习在工业界有哪些应用场景
    多模态机器学习在工业界的应用场景:一、生产线质量检测;二、高精度预测维护;三、机器人技能学习与智能化;四、供应链优化;五、安全与监控。生产线质量检测是制造业不可或缺的一部分,而多模态机器学习技术为其带来了新的突破和机会。一、生产线质量检测传统的质量检测主要依赖单一传......
  • 如何实现Android应用的热修复和动态更新?
    一、引言在移动互联网时代,应用的快速迭代和修复线上bug的需求日益增长。传统的应用更新方式需要用户下载新版本的应用,不仅耗时较长,还可能因为版本不兼容等问题影响用户体验。因此,热修复和动态更新技术应运而生,使得开发者能够在不重启应用的情况下,动态地替换有问题的代码和资......
  • Python 自编码器(Autoencoder)算法详解与应用案例
    目录Python自编码器(Autoencoder)算法详解与应用案例引言一、自编码器的基本原理1.1自编码器的结构1.2自编码器的类型二、Python中自编码器的面向对象实现2.1`Autoencoder`类的实现2.2`Trainer`类的实现2.3`DataLoader`类的实现三、案例分析3.1手写数字去噪自......
  • Python Bagging算法详解与应用案例
    这里写目录标题PythonBagging算法详解与应用案例引言一、Bagging的基本原理1.1Bagging的概念1.2Bagging的步骤1.3Bagging的优势与挑战二、Python中Bagging的面向对象实现2.1`DecisionTree`类的实现2.2`Bagging`类的实现2.3`Trainer`类的实现三、案例分析3.1......
  • 教案应用(人工智能生成)
    教学目标知识与技能:学生能够识别和描述基本的几何图形(如圆形、正方形、三角形等),并理解它们的基本属性。过程与方法:通过观察、操作和讨论,学生能够发展空间观念,学会使用数学语言描述图形。情感、态度与价值观:培养学生对几何图形的兴趣,激发他们的好奇心和探索欲,以及培养合作和交......
  • 基智科技 CEO 张文战:探索火山引擎数据飞轮模式下的大模型应用新机会
    9月下旬,火山引擎数据飞轮研讨会在北京举办,北京基智科技有限公司(以下简称“基智科技”)CEO张文战作为积极探索大模型应用领域的企业代表,围绕“数据飞轮如何转进企业业务流”展开主题分享,并介绍基智科技在大模型领域见证的新变化和为企业提供的新方案。 成立于2014年的基智科技是......