开源 | 嵌入式物联网项目开发 - ARM中控扩展模块

为了让ARM-Linux开发板具有2.4GHz和433MHz无线通信功能,微联智控工作室设计了一款通用的ARM中控扩展模块,该模块的实物图片,如下图所示。

这款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电源,模块还自带有红色的电源指示灯用来表示模块的通电情况,如下图所示。

 

USB转串口电路使用沁恒科技的CH340G作为转换芯片,该芯片可以通过3.3V或5V电源供电,对外引出芯片的TTL接口(使用时需要去掉R2和R4电阻),方便开发者扩展,USB转串口电路如下图所示。

 

ARM中控扩展模块采用STM32F030C8T6作为主控芯片,这款MCU芯片是Cortex-M0内核,主频48MHz,芯片自带64KB可编程Flash和8KB RAM,很适合物联网终端设备的控制器开发。模块的MCU控制电路如下图所示。

 

ARM中控扩展模块使用SPI1和SPI2接口跟无线模块进行通信,其中,SPI1接口连接SI4432这款433MHz无线模块,SI4432模块使用焊接方式固定在中控扩展模块上。SPI2接口通过提供接口的方式外引出来,可以用来对接nRF24L01这款2.4GHz无线模块,如下图所示。

以上就是ARM中控扩展模块的原理图描述,各个模块的原理比较简单,具体原理图和PCB的硬件工程可以到GitHub或Gitee上下载。

 

软件设计篇

ARM中控扩展模块的软件框架,是基于任务和事件的OSAL调度器来进行开发,有关OSAL调度器的介绍,可以查看以下文章。

开源 | 嵌入式物联网项目开发 - 基于任务和事件的OSAL调度器

 

ARM中控扩展模块,具有串口通信功能,2.4G和433无线通信功能,看门狗系统监测功能,LED指示灯功能。因此,在软件设计上,把这些功能划分为6个任务,在osal.h中定义好各个任务的ID,并创建各个任务的源代码文件,如下图所示。

在main.c主函数里面,进行OSAL调度器和各个任务事件的初始化,由于有些设备不一定用到所有串口,因此,通过USART1_ON和USART2_ON这两个宏定义作为串口模块的开关,主函数的内容如下图所示。

先来看看串口任务处理,ARM中控扩展模块主要用到了串口1以及DMA通信。所以,需要在工程的宏定义那里定义USART1_ON宏和USART_DMA宏,以使能串口1的DMA通信方式。在源文件usart1_task.c中,对串口任务进行了注册和串口外设初始化,并且同时初始化了两个队列数组,用来缓冲串口的发送数据和接收数据,如下图所示。

在头文件usart1_task.h中,定义串口1任务相关的事件,主要有串口1数据收发和处理,串口任务启动事件,如下图所示。

然后在源文件usart1_task.c的usart1_task()函数中,处理各种串口任务事件,OSAL调度器在收到串口的各种事件后,都会在这个函数里面处理各种事件,如下图所示。

(限于篇幅,这里只列出部分源码)

对于SI4432和nRF24L01这两款无线模块的任务处理,其任务事件的处理框架都是大同小异的,这里以SI4432为例进行说明。

先来看看源文件si4432_task.c里面的任务初始化函数,如下图所示。

在初始化函数si4432_task_init()中,先对si4432芯片的连接引脚和芯片寄存器进行初始化,然后再初始化si4432的数据发送和接收队列,然后再根据系统设置的参数,进行无线通信信道设置。

在头文件si4432_task.h中,定义了各种任务事件,主要有数据发送和接收,超时处理,以及中断事件,如下图所示。

各种任务事件是在si4432_task()这个函数中进行处理的,对于SI4432无线模块接收到的数据,目前都是通过串口透传出去,交给上位机进行处理,各个任务事件的函数内容,如下图所示。

(限于篇幅,这里只列出部分源码)

由硬件原理图可知,不管是SI4432或nRF24L01模块,一旦接收到无线数据,都是通过引脚中断的方式来通知STM32进行处理的,因此,需要在STM32的外部中断引脚处理函数中,取出无线模块接收到的数据,如下图所示。

看门狗任务是用来监测整个系统的运行情况的,一旦发现系统运行异常,看门狗由于喂狗不及时,系统就会进行超时重启。因此,看门狗任务比较简单,主要是初始化STM32的看门狗外设,并设置一个定时喂狗任务,定时进行看门狗计数器复位操作,防止系统复位。与此同时,也可以利用看门狗超时的特性,来定义一个复位任务,方便一些系统重启操作,如下图所示。

指示灯任务是用来指示系统无线网络状态的,当无线网络处于连接成功/连接断开/数据广播等不同状态的时候,指示灯会以不同的频率进行闪烁。网络状态指示灯的任务处理,如下图所示。

为了方便开发者对ARM中控扩展模块进行设置,模块还支持AT指令扩展,开发者可以通过AT指令对模块进行波特率参数,信道,恢复出厂设置,查询软硬件版本信息等操作,也可以根据实际需要,修改源码扩展自己的AT指令集,目前模块支持的AT指令如下图所示。

以上就是ARM中控模块的软件开发内容,编译源码并下载到模块中运行,可以使用串口工具测试模块的AT指令是否工作正常,如下图所示。

 

使用两个ARM中控扩展模块,并同时接到PC电脑上,用串口调试工具可以在这两个模块直接互相透传数据,如下图所示。

 

项目的开源地址:

https://github.com/embediot/Embedded-IoT-Project

https://gitee.com/embediot/Embedded-IoT-Project

 

 

猜你喜欢

转载自blog.csdn.net/wenjs0620/article/details/107528968