完成了FreeRTOS操作系统移植后,需要在这个操作系统上进行应用程序设计,在进行应用程序设计前,需要对应用软件需求有一个详细的了解。只有对软件的需求进行了详细了解后,才可以对系统的任务进行划分。在本系统中划分了三个任务,分别是LCD显示任务,温度采集任务、主程序执行任务。通过编写这三个任务函数完成系统应用程序的设计,下面几小节详细介绍。
4.3.1 LCD显示任务程序
本系统的显示模块为LCD1602,LCD1602的驱动程序包括LCD初始化、LCD清屏,LCD显示字符显示三个主要函数,LCD初始化函数原型为void LCD_Init(void),主要初始化LCD显示参数,如配置STM32的LCD引脚,显示模式,显示光标及地址增长模式等等参数。其创建一个OSTaskLcdFun显示任务,来更新显示LCD字符。其具体代码和流程如图4-4所示:
图4-4 LCD显示任务
4.3.2 温度采集任务程序
本系统的温度采集为DS18B20,它是单总线器件,它和LCD初始化一样,都需要对器件进行初始化,然后读取DS18B20序号,检测DS18B20是否存在,本设计不需要存储数据,发送跳过RAM命令,直接读取温度数据,然后等待DS18B20进行转换,转换完成后,读取温度数据。完成DS18B20的数据采集,其流程如图4-5所示。该函数float DS18B20_Get_Temp(void)实现。
28
图4-5 DS18B20数据采集流程
由于本系统采用的FreeRTOS操作系统,可以创建一个任务,定时采集DS18B20的数据,其创建一个OSTaskDS18B20Fun采集任务,来实时采集DS18B20温度数据。其任务流程如图4-6所示:
图4-6 DS18B20任务流程
4.3.3 主任务程序
29
完成了各个子程序任务程序后,需要创建一个主程序任务,实时管理和存储温度数据。主任务实时检测两个子任务的运行状态,读取温度任务的数据,其任务之间通信,采用队列进行通信,首先声明一个队列句柄,该句柄完成队列不同的标记,然后创建一个固定大小的队列,其代码如下:MsgQueue = xQueueCreate( 10 , sizeof( int16_t ) );创建队列,开辟了一个20个字节的缓冲队列,通过读取该队列的数据,实时显示和存储温度数据。其主任务流程如图4-7所示。
图4-7 主任务流程
4.4 本章小结
本章为系统的软作系统移植过程,分析了FreeRTOS操作系统源代码的结构,然后详细的介绍了FreeRTOS操作系统的移植过程。最后对操作系统的移植进行了验证。完成了系统移植后,介绍了系统应用程序的编写。包括LCD显示子程序,温度采集子程序和主程序设计。
30
第5章 总结与展望
目前,许多企业对数据采集器都有需求,例如对温度、湿度、压力数据和化工上PH值数据的采集,对数据有了精确的掌握才能有效的控制生产过程,大大的提高了生产质量,加快了生产效率。而由于嵌入式技术具有实时性,使用简便,成本相对较低的优点,该技术成为了当下最热门的硬件开发技术。综上所述,利用嵌入式系统实现对数据的控制,有着非常广阔的市场。
此次设计是以Cortex-M3作为内核,并修改了Freertos实时操作系统的程序,通过移植的方法实现的。选用了STM32这款单片机作为核心,这款处理器性能高,具有很有的性价比。设计过程主要分为如下步骤:
1.了解并熟悉了硬件方面的STM32单片机,对其内核进行研究,学习并能够运用ARM汇编语言。
2.查阅Freertos实时操作系统的相关资料,熟悉其构造。
3.分析并设计数据采集系统,简单介绍了各个模块;实现了嵌入式实时操作系统 FreeRTOS 在 Cortex-M3 上的移植;
4.对系统的底层串口、LCD1602、存储器和通信模块等驱动进行配置。
31