电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
开源 | 嵌入式物联网应用开发 - ARM中控扩展模块
分 享
扫描二维码分享
开源 | 嵌入式物联网应用开发 - ARM中控扩展模块
嵌入式Linux
物联网应用开发
开源项目
微联智控工作室
关注
发布时间: 2020-07-24
丨
阅读: 938
为了让ARM-Linux开发板具有2.4GHz和433MHz无线通信功能,微联智控工作室设计了一款通用的ARM中控扩展模块,该模块的实物图片,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/6390b8650f9f3114c9836d5a603ab596.png) 这款ARM中控扩展模块,主要使用了USB-TTL芯片和STM32单片机进行通信,再通过SPI接口外接si4432模块和nRF24L01+PA+LAN模块。使用这种方式,就可以避免移植si4432和nRF24L01的驱动到ARM-Linux开发板,大大降低了开发工作量和开发难度。 在ARM-Linux开发板或者在PC电脑上使用这款模块,只需要简单地在开发板移植或在PC机上安装CH340G的芯片驱动,就可以把这款模块当做串口使用。 **ARM-Linux中控扩展模块具有以下功能:** 1、USB转串口功能,使用CH340G芯片,可以方便对接电脑和嵌入式Linux开发板。 2、引出CH340G的TTL接口,可以用作一个普通的USB转串口模块(去掉R2和R4电阻)。 3、引出单片机的UART2串口,TTL电平,方便用户扩展(提供源码)。 4、板载433MHz无线通信模块,与单片机通过SPI接口进行通信,用户可编程。 5、引出SPI接口,对接市面上大部分SPI接口的2.4GHz通信模块,用户可编程。 6、模块尺寸(不含USB接口):70mm * 25mm ### 硬件设计篇 ARM中控扩展模块使用USB接口进行5V供电,模块自带稳压芯片,5V电源通过LDO稳压电路,为单片机及其他模块提供3.3V电源,模块还自带有红色的电源指示灯用来表示模块的通电情况,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/1086d200318d9d1c05d0cf34d5d8cb0c.png) USB转串口电路使用沁恒科技的CH340G作为转换芯片,该芯片可以通过3.3V或5V电源供电,对外引出芯片的TTL接口(使用时需要去掉R2和R4电阻),方便开发者扩展,USB转串口电路如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/672fe7c16e731da20d4f30742870cb9c.png) ARM中控扩展模块采用STM32F030C8T6作为主控芯片,这款MCU芯片是Cortex-M0内核,主频48MHz,芯片自带64KB可编程Flash和8KB RAM,很适合物联网终端设备的控制器开发。模块的MCU控制电路如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/5ca2caa07023ecfd5d236f1a41fd99c6.png) ARM中控扩展模块使用SPI1和SPI2接口跟无线模块进行通信,其中,SPI1接口连接SI4432这款433MHz无线模块,SI4432模块使用焊接方式固定在中控扩展模块上。SPI2接口通过提供接口的方式外引出来,可以用来对接nRF24L01这款2.4GHz无线模块,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/e410932bcdf07225ea7bd4ab06e616c9.png) 以上就是ARM中控扩展模块的原理图描述,各个模块的原理比较简单,具体原理图和PCB的硬件工程可以到GitHub或Gitee上下载。 ### 软件设计篇 ARM中控扩展模块的软件框架,是基于任务和事件的OSAL调度器来进行开发,有关OSAL调度器的介绍,可以查看以下文章。 [开源 | 嵌入式物联网应用开发 - 基于任务和事件的OSAL调度器](https://www.icxbk.com/article/detail/1536.html "开源 | 嵌入式物联网应用开发 - 基于任务和事件的OSAL调度器") ARM中控扩展模块,具有串口通信功能,2.4G和433无线通信功能,看门狗系统监测功能,LED指示灯功能。因此,在软件设计上,把这些功能划分为6个任务,在osal.h中定义好各个任务的ID,并创建各个任务的源代码文件,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/fb9df3b676e9c9c708e4713a848d6fed.png) 在main.c主函数里面,进行OSAL调度器和各个任务事件的初始化,由于有些设备不一定用到所有串口,因此,通过USART1_ON和USART2_ON这两个宏定义作为串口模块的开关,主函数的内容如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/ff7a402e8651b575c244b598c4096e07.png) 先来看看串口任务处理,ARM中控扩展模块主要用到了串口1以及DMA通信。所以,需要在工程的宏定义那里定义USART1_ON宏和USART_DMA宏,以使能串口1的DMA通信方式。在源文件usart1_task.c中,对串口任务进行了注册和串口外设初始化,并且同时初始化了两个队列数组,用来缓冲串口的发送数据和接收数据,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/875e9b7d966b73f79d3a1c39fc2cfc4d.png) 在头文件usart1_task.h中,定义串口1任务相关的事件,主要有串口1数据收发和处理,串口任务启动事件,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/f69d9afc68509af094476d373d2a5298.png) 然后在源文件usart1_task.c的usart1_task()函数中,处理各种串口任务事件,OSAL调度器在收到串口的各种事件后,都会在这个函数里面处理各种事件,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/376ce50abe011fa76199e62bfb707539.png) (限于篇幅,这里只列出部分源码) 对于SI4432和nRF24L01这两款无线模块的任务处理,其任务事件的处理框架都是大同小异的,这里以SI4432为例进行说明。 先来看看源文件si4432_task.c里面的任务初始化函数,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/bb0c1a8f229db7fc4dea02cc747448b0.png) 在初始化函数si4432_task_init()中,先对si4432芯片的连接引脚和芯片寄存器进行初始化,然后再初始化si4432的数据发送和接收队列,然后再根据系统设置的参数,进行无线通信信道设置。 在头文件si4432_task.h中,定义了各种任务事件,主要有数据发送和接收,超时处理,以及中断事件,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/e68af9981abd8dedfb442c28ec52b1ce.png) 各种任务事件是在si4432_task()这个函数中进行处理的,对于SI4432无线模块接收到的数据,目前都是通过串口透传出去,交给上位机进行处理,各个任务事件的函数内容,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/d92208bce15cf70489f0326fb9dab38b.png) (限于篇幅,这里只列出部分源码) 由硬件原理图可知,不管是SI4432或nRF24L01模块,一旦接收到无线数据,都是通过引脚中断的方式来通知STM32进行处理的,因此,需要在STM32的外部中断引脚处理函数中,取出无线模块接收到的数据,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/988661da516efd45e63fb8adaaf4d0c2.png) 看门狗任务是用来监测整个系统的运行情况的,一旦发现系统运行异常,看门狗由于喂狗不及时,系统就会进行超时重启。因此,看门狗任务比较简单,主要是初始化STM32的看门狗外设,并设置一个定时喂狗任务,定时进行看门狗计数器复位操作,防止系统复位。与此同时,也可以利用看门狗超时的特性,来定义一个复位任务,方便一些系统重启操作,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/51637942696174a8322395d7a188285e.png) 指示灯任务是用来指示系统无线网络状态的,当无线网络处于连接成功/连接断开/数据广播等不同状态的时候,指示灯会以不同的频率进行闪烁。网络状态指示灯的任务处理,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/9a95bcad71cc194cdd7e600247db2f5e.png) 为了方便开发者对ARM中控扩展模块进行设置,模块还支持AT指令扩展,开发者可以通过AT指令对模块进行波特率参数,信道,恢复出厂设置,查询软硬件版本信息等操作,也可以根据实际需要,修改源码扩展自己的AT指令集,目前模块支持的AT指令如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/ff0f60375b5150edfa102431390b84d1.png) 以上就是ARM中控模块的软件开发内容,编译源码并下载到模块中运行,可以使用串口工具测试模块的AT指令是否工作正常,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/d3d5450e2839a598daf8395fb63329d8.png) 使用两个ARM中控扩展模块,并同时接到PC电脑上,用串口调试工具可以在这两个模块直接互相透传数据,如下图所示。 ![](https://cf03.ickimg.com/bbsimages/202007/97acb5b2ee642e14f65c2a2011953ad2.png) 项目的开源地址: [https://github.com/embediot/Embedded-IoT-Project](https://github.com/embediot/Embedded-IoT-Project "https://github.com/embediot/Embedded-IoT-Project") [https://gitee.com/embediot/Embedded-IoT-Project](https://gitee.com/embediot/Embedded-IoT-Project "https://gitee.com/embediot/Embedded-IoT-Project") 感谢阅读! ![](https://cf03.ickimg.com/bbsimages/202007/124b259539d2a9f3176ca2128452411a.png)
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
微联智控工作室
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交