本发明专利技术涉及一种基于stm32f450处理器的实时数据录取方法,通过构建数据接收任务;构建消息队列;构建存储管理任务的自守时功能;构建存储管理任务;构建实时数据的录取流程,利用处理器自带的高速串口从导航解算单元接收原始测量信息和各种辅助信息,将其实时存储到板载SD卡存储器中。同时软件中使用了开源的FreeRTOS操作系统进行多任务调度和临界资源管理。管理。管理。
【技术实现步骤摘要】
一种基于stm32f450处理器的实时数据录取方法
[0001]本专利技术属于嵌入式计算机应用软件
,尤其是一种基于stm32f450处理器的实时数据录取方法。
技术介绍
[0002]惯性导航是依据牛顿惯性原理,利用惯性元件(加速度计)来测量运载体本身的加速度,经过积分和运算得到速度和位置,从而达到对运载体导航定位的目的。
[0003]但是惯导设备安装于水下载具,试验过程全程在水下进行,无法通过外接显控设备实时观测试验数据和分析试验问题,因而提出了存储相关试验信息进行事后仿真和问题追溯的用户需求。由于水下载具对惯导设备的尺寸、功耗、噪音等均有限制,现有技术方案已不满足项目需求。
技术实现思路
[0004]本专利技术的目的在于克服现有技术的不足,提出一种基于stm32f450处理器的实时数据录取方法,利用处理器自带的高速串口从导航解算单元接收原始测量信息和各种辅助信息,将其实时存储到板载SD卡存储器中。
[0005]本专利技术解决其技术问题是采取以下技术方案实现的:
[0006]一种基于stm32f450处理器的实时数据录取方法,包括以下步骤:
[0007]步骤1、构建数据接收任务;
[0008]步骤2、构建消息队列;
[0009]步骤3、构建存储管理任务的自守时功能;
[0010]步骤4、构建存储管理任务;
[0011]步骤5、设置任务调度和临界资源管理,根据步骤1至步骤4进行实时数据录取。
[0012]而且,所述步骤1的具体实现方法为:数据接收任务的串口接收采用双缓冲DMA机制,并且每个运行周期查询DMA传输完成标志,若传输完成,则清除传输完成标志,切换DMA至空闲缓冲区,同时将当前缓冲区中的数据读出,经过数据解析后,将符合要求的报文写入消息队列;若传输未完成,则中止当前数据传输,切换DMA至空闲缓冲区后再重新使能DMA传输,同时将当前缓冲区中的数据读出,经过数据解析后,将符合要求的报文写入消息队列。
[0013]而且,所述步骤2包括以下步骤:
[0014]步骤2.1、构建信息队列结构;
[0015]定义:MSQ的结构,使用Uint8type用于区分不同的消息,使用Uint8 buf[BUFSIZE][DATA_LEN]表示环形缓冲区,使用Uint64pWrite表示写入报文计数,使用Uint64pRead表示读取报文计数;
[0016]其中DATA_LEN为数据报文包含的字节数,BUFSIZE为缓冲区中存储的最大报文数,同时需要为每种报文创建一个消息队列;pWrite和pRead对BUFSIZE求余后,作为环形缓冲区的读写指针,buf[pWrite%BUFSIZE]为可写入的空闲报文缓冲区首地址;buf[pRead%
BUFSIZE]为待读取的报文缓冲区首地址;
[0017]步骤2.2、根据步骤2.1构建的信息队列结构,构建消息队列写操作;
[0018]初始状态,消息队列为空,pWrite和pRead均初始化为0,每个运行周期执行以下步骤:
[0019]步骤2.2.1、检查当前周期是否收到串口数据报文,若有进行步骤2.2.2,否则进行步骤2.2.4;
[0020]步骤2.2.2、检查(pWrite
‑
pRead)是否小于BUFSIZE,小于则进行步骤2.2.3,否则进行步骤2.2.4;
[0021]步骤2.2.3、将当前接收到的串口报文写入缓冲区,pWrite加1;
[0022]步骤2.2.4、结束;
[0023]步骤2.3、根据步骤2.1构建的信息队列结构,构建消息队列读操作;
[0024]初始状态,消息队列为空,pWrite和pRead均初始化为0,每个运行周期执行以下步骤:
[0025]步骤2.3.1、检查(pWrite
‑
pRead)是否大于0,大于0转入2.3.2,否则转入2.3.3;
[0026]步骤2.3.2、从消息队列读取一帧报文,pRead加1,返回2.3.1;
[0027]步骤2.3.3、结束。
[0028]而且,所述步骤3包括以下步骤:
[0029]步骤3.1、构建DATETIME数据结构;Uint8valid_flag为有效标志;Uint16year为年;Uint16month为月;Uint16day为日;Uint16hour为时;Uint16minute为分;Uint16second为秒;Uint16dot_sec为点秒,Uint64counter为0.1ms计数值;
[0030]其中,dot_sec为UTC时间中小数点之后的部分,取值范围[0,9999];
[0031]Counter=hour*36000000+minute*600000+second*10000+dotsec
[0032]步骤3.2、构建日期时间更新;
[0033]步骤3.2.1、利用stm32f450的通用定时器Timer3进行时间计数,计数周期0.1ms;
[0034]步骤3.2.2、利用1000Hz系统中断,每隔1ms将Timer3的计数增量累加至counter中;
[0035]步骤3.2.3、每隔10ms,利用Counter=hour*36000000+minute*600000+second*10000+dotsec反算更新DATETIME结构体中的hour字段、minute字段、second字段、dot_sec字段,当counter计数值超过24小时后,则依次对day字段、month字段、year字段进行更新;
[0036]步骤3.3、日期时间校正;
[0037]步骤3.3.1、开机后valid_flag初始化为无效状态;
[0038]步骤3.3.2、当通过串口接收到UTC时间信息后,利用UTC时间依次校正year字段、month字段、day字段、hour字段、minute字段、second字段、dot_sec字段,同时利用Counter
[0039]=hour*36000000+minute*600000+second*10000+dotsec更新counter计数值;
[0040]步骤3.3.3、只要进行过一次校正,则将valid_flag置为有效状态,此后利用timer3的定时更新机制进行守时。
[0041]而且,所述步骤4包括以下步骤:
[0042]步骤4.1、创建目录和文件;
[0043]步骤4.1.1、判断是否收到开始录取命令,是则进行步骤4.1.2,否则进行步骤
4.1.4;
[0044]步骤4.1.2、检查DATETIME结构体的valid_flag字段是否有效,是则进行步骤4.1.3,否则进行步骤4.1.4;
[0045]步骤4.1.3、利用year字段、month字段、day字段、hour字段、minute字段、second字本文档来自技高网...
【技术保护点】
【技术特征摘要】
second为秒;Uint16 dot_sec为点秒,Uint64 counter为0.1ms计数值;其中,dot_sec为UTC时间中小数点之后的部分,取值范围[0,9999];Counter=hour*36000000+minute*600000+second*10000+dotsec步骤3.2、构建日期时间更新;步骤3.2.1、利用stm32f450的通用定时器Timer3进行时间计数,计数周期0.1ms;步骤3.2.2、利用1000Hz系统中断,每隔1ms将Timer3的计数增量累加至counter中;步骤3.2.3、每隔10ms,利用Counter=hour*36000000+minute*600000+second*10000+dotsec反算更新DATETIME结构体中的hour字段、minute字段、second字段、dot_sec字段,当counter计数值超过24小时后,则依次对day字段、month字段、year字段进行更新;步骤3.3、日期时间校正;步骤3.3.1、开机后valid_flag初始化为无效状态;步骤3.3.2、当通过串口接收到UTC时间信息后,利用UTC时间依次校正year字段、month字段、day字段、hour字段、minute字段、second字段、dot_sec字段,同时利用Counter=hour*36000000+minute*600000+second*10000+dotsec更新counter计数值;步骤3.3.3、只要进行过一次校正,则将valid_flag置为有效状态,此后利用timer3的定时更新机制进行守时。5.根据权利要求1所述的一种基于stm32f450处理器的实时数据录取方法,其特征在于:所述步骤4包括以下步骤:步骤4.1、创建目录和文件;步骤4.1.1、判断是否收到开始录取命令,是则进行步骤4.1.2,否则进行步骤4.1.4;步骤4.1.2、检查DATETIME结构体的valid_flag字段是否有效,是则进行步骤4.1.3...
【专利技术属性】
技术研发人员:李越,肖永刚,钱红,
申请(专利权)人:中国船舶重工集团公司第七零七研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。