首页 > 其他分享 >CH9121_MQTT应用

CH9121_MQTT应用

时间:2024-10-21 14:21:02浏览次数:17  
标签:引脚 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

相关文章

  • 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......