小熊派开发实践丨小熊派 + 合宙 Cat.1 接入云服务器
摘要:使用小熊派开发板,以合宙的AIR724为通信模组(Cat.1),以AT指令方式,通过mqtt协议接入云服务器。
本贴使用小熊派开发板+合宙的Air724(Cat.1模组),接入自己搭建的EMQ服务器
一、实验准备
1.实验环境
一块stm32开发板(推荐使用小熊派),以及数据线
已经安装STM32CubeMX
已经安装KeilMDK,并导入stm32开发板对应的芯片包(小熊派使用的是STM32L431RCT6)
一个Cat.1模块(Uart接口,AT指令)以及杜邦线


2.目标效果
通过CubeMX创建工程并配置参数
通过串口2,以AT指令控制通信模组
Cat.1发送相应的AT指令接入云服务器
通过MQTT协议,完成数据订阅、发布
二、通过CubeMX生产MDK工程
A.芯片选择
打开CubeMX,进入芯片选择:

选择自己的stm32芯片(即STM32L431RCT6):

B.时钟源RCC设置
更改系统时钟源
系统时钟默认使用内部的高速时钟(HSI),选择使用HSE,时钟更精确
设置外部时钟对应的端口

配置时钟树
STM32L431RCT6系统时钟最大可以为80MHz,我们配置到最大即可

C.参数配置(对应端口设置)
1)配置USART1
使用USART,模式为异步,波特率为115200,无硬件流控制

2)配置UART2,连接Cat.1
Cat.1模组烧录有AT固件,当然合宙的也支持Luat开发,我们为了更方便学习,就是要AT指令开发
我们使用小熊派的Uart2,小熊派引出的引脚为PA2->USART_TX,PA3->USART_RX
其他选项,波特率设置为9600,其他默认即可

3)打开Uart2中断,并开启接收DMA
开启中断

打开接收DMA

最后,生成代码就OK了
D.工程设置
一些基础的设置,包括工程名、存储位置、工程环境、工程中各个文件的组成


E.生成代码

三、编写相应代码
1. 串口1输出重定向
我们知道printf是打印函数,原理是根据传入的字符串参数格式化打印输出到stdout中。我们需要让printf打印到串口之中,只需要在usart.c文件中模仿printf写一个输出函数即可
在添加头文件
注意:自己添加的代码,需要在begin和end之间
2.通信的主要代码
我们创建两个文件,分别是Cat1.h和Cat.c
同时,完善串口2的收发功能,加入串口回调函数保证数据的完整
a).串口回调函数
因为在进行发送AT指令后,接受的数据要进行处理;一方处理速度跟不上,因此加入一个串口回调函数
b).串口2空闲中断
当发送或接受完成一组数据后,进入空闲中断
函数如下
C).AT指令通信流程
主要的AT指令如下
四、编译+下载
点击编译后,0 error,0 warning

小熊派连接在电脑上,代码下载到开发板

五、连接硬件
1.将Cat.1的uart1_tx连接小熊派uart2_rx,cat.1的uart1_rx连接小熊派uart2_tx;Gnd连Gnd;
注意:一定要连接GND哦,需要共地的。
2.调试
此时,我们进行最后一次调试;将小熊派串口1用作串口打印,打开串口调试助手,查看运行状态(在每次发送指令后进行printf()打印相应信息)。
附件中包含CubeMX工程、MDK工程
下一步,打算将此设备接入华为云IoTDA,更好的完成设备管理
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/debba7addbbbfa6a14e471998】。文章转载请联系作者。
评论