一种基于stm32的串行数据接收方法及系统

文档序号:1798514 发布日期:2021-11-05 浏览:17次 >En<

阅读说明:本技术 一种基于stm32的串行数据接收方法及系统 (STM 32-based serial data receiving method and system ) 是由 贺传敏 粱业兴 于 2021-09-29 设计创作,主要内容包括:本申请涉及一种基于STM32的串行数据接收方法及系统;所述方法包括:通过板载的无线通信芯片接收OOK射频信号,解调出有缺陷的曼切斯特数据信号;STM32自带的ADC模块接收有缺陷的曼切斯特数据信号,将曼切斯特数据信号转换成与波形相对应的一系列ADC数据,并通过DMA接收的方式将ADC数据缓存在第一数组中;调用ADC数据处理函数将ADC数据转换成对应的曼切斯特编码数据;通过曼切斯特解码函数解码第二数组保存的曼切斯特编码数据,并缓存在第三数组中;根据数据包协议预先定义一个C语言结构体指针,然后将缓存在第三数组的具体数据和内容读出来。本发明能够直接接收串行数据,降低了硬件电路的成本和功耗。(The application relates to a serial data receiving method and system based on STM 32; the method comprises the following steps: receiving an OOK radio frequency signal through an onboard wireless communication chip, and demodulating a defective Manchester data signal; the STM32 receives a defective Manchester data signal from an ADC module, converts the Manchester data signal into a series of ADC data corresponding to waveforms, and buffers the ADC data in a first array in a DMA receiving mode; calling an ADC data processing function to convert ADC data into corresponding Manchester coded data; decoding the Manchester coded data stored in the second array through a Manchester decoding function, and caching the Manchester coded data in a third array; and a C language structure body pointer is predefined according to a data packet protocol, and then specific data and contents cached in the third array are read out. The invention can directly receive serial data, and reduces the cost and power consumption of hardware circuits.)

一种基于STM32的串行数据接收方法及系统

技术领域

本申请涉及串行数据处理技术领域,特别是涉及一种基于STM32的串行数据接收方法及系统。

背景技术

植入于体内的芯片其回传的是一种串行、固定波特率的数据,该数据不符合串口通讯(Serial Communication)协议。在单片机或者其它SOC上都没有这种直接能用的串行通信外围设备。如果需要接收植入于体内的芯片回传的数据,一般都是采用外挂FPGA的方式来实现,虽然外挂FPGA的方式简单直接、效率比较高,但是却增加了硬件电路的成本,同时由于外挂FPGA消耗了功耗,尤其是视网膜假体体外设备采用锂电池的方式供电,其对功耗比较敏感。

发明内容

基于此,有必要针对需要通过外挂FPGA的方式才能接收植入体芯片回传的数据,且由于增加了外挂电路导致增加了成本及消耗了功耗,提供一种基于STM32的串行数据接收方法及系统。

为了实现上述目的,本申请实施例提供了一种基于STM32的串行数据接收方法,包括如下步骤:

通过板载的无线通信芯片接收OOK射频信号,解调出有缺陷的曼切斯特数据信号;

STM32自带的ADC模块接收有缺陷的曼切斯特数据信号,将曼切斯特数据信号转换成与波形相对应的一系列ADC数据,并通过DMA接收的方式将ADC数据保存在第一数组缓存区中;

调用ADC数据处理函数将ADC数据转换成对应的曼切斯特编码数据,并在第二数组缓存区中保存下来;

通过曼切斯特解码函数解码第二数组保存的曼切斯特编码数据,并在第三数组缓存区中保存下来;

根据数据包协议预先定义一个C语言结构体指针,C语言结构体指针指向前一个缓存数组,然后将前一个缓存数组的具体数据和内容读出来。

优选地,所述第一数组为1023长度的数组,所述ADC模块的采样频率为4MHZ。

优选地,所述调用ADC数据处理函数将ADC数据转换成对应的曼切斯特编码数据,并在第二数组缓存区中保存下来具体包括如下步骤:

按照预设的波形规则处理接收到的ADC数据;

判断是否存在前导10bit连续的0或1;

如果不存在,则跳出处理过程并丢弃掉此次接收到的波形数据,同时将错误计数值加1;

如果找到了前导10bit连续的0或1,则判断接下来是否还存在1个同样的前导波形,并记录下前导波形数据的bit位置作为下一次解析的起始位置。

优选地,所述如果找到了前导10bit连续的0或1,则判断接下来是否还存在1个同样的前导波形,并记录下前导波形数据的bit位置作为下一次解析的起始位置之后还包括如下步骤;

判断当前波形数据中是否存在连续2个以上的0、1变化不居的脉冲,脉冲宽度在3至5之间的波形脉冲;

如果当前波形数据中的脉冲宽度在3至5之间的波形脉冲数量小于2,则跳出处理过程并丢弃掉此次接收到的波形数据,同时将错误计数值加1;

如果当前波形数据中存在连续2个以上的0、1变化不居的脉冲,脉冲宽度在3至5之间的波形脉冲,则按照曼切斯特码的规律,每个波形脉冲转换成相对应的数字信号数据,并采用平均值滤波法进行滤波,滤除掉异常的数据;

将转换后的数字信号数据依次按bit处理,存储到曼切斯特编码数组缓存区中,等待下一步处理。

优选地,所述按照预设的波形规则为通过示波器观察得出来的波形规则。

优选地,所述通过曼切斯特解码函数解码第二数组保存的曼切斯特编码数据,并在第三数组缓存区中保存下来具体包括如下步骤:

寻找16bit的曼切斯特编码数据的包头;

如果没有找到包头,则跳出处理过程并丢弃掉这次接收到的数据,同时将错误计数值加1;

如果找到了包头,则记录下当前的bit位置,作为曼切斯特解码数据的起始位置。

优选地,所述如果找到了包头,则记录下当前的bit位置,作为曼切斯特解码数据的起始位置之后还包括如下步骤:

如果解码过程中出现2bit 曼切斯特编码的数字信号数据是 2’ b11或者2’ b00,则接收出错,跳出处理过程并丢弃掉这次接收到的数据,同时将错误计数值加1;

如果解码过程中没有出现2bit 曼切斯特编码数据是 2’ b11或者2’ b00,则按照曼切斯特编码2bit对应解码数据1bit的规则,每2bit 曼切斯特编码转换出1bit解码数据,并将解码后的数据在解码数据数组的缓存区中按bit依次存储。

优选地,所述寻找16bit的曼切斯特编码数据的包头具体包括如下步骤:

将8bit包头数据处理成相对应的曼切斯特编码后16bit的数据;

将16bit的曼切斯特编码数据与第二数组保存的曼切斯特编码数据依次按bit移位对比,做寻找包头处理。

优选地,当错误计数值达到极限值时,说明接收的回传信号存在异常,发出线圈脱落报警声。

本发明还提供了一种基于STM32的串行数据接收系统,上述所述的基于STM32的串行数据接收方法通过基于STM32的串行数据接收系统实现。

上述技术方案中的一个技术方案具有如下优点和有益效果:

由于在单片机没有外扩FPGA电路的情况下,能够实现直接接收串行数据,有效的降低了硬件电路的成本和功耗,尤其是应用在采用锂电池供电的视网膜假体体外设备上,用于接收植入体芯片回传的数据;

能够高速、高效的接收处理存在缺陷的串行数据,广泛应用于各种数据处理过程中。

附图说明

图1为本申请基于STM32的串行数据接收方法较佳实施例的流程示意图;

图2为图1中步骤S300的具体流程示意图;

图3为图1中步骤S400的具体流程示意图;

图4为通过本申请基于STM32的串行数据接收方法接收到的数据曲线图。

图5为图4的曲线数据所对应的曲线图。

具体实施方式

为了便于理解本申请,下面将参照相关附图对本申请进行更全面的描述。附图中给出了本申请的首选实施例。但是,本申请可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本申请的公开内容更加透彻全面。

需要说明的是,当一个元件被认为是“连接”另一个元件,它可以是直接连接到另一个元件并与之结合为一体,或者可能同时存在居中元件。本文所使用的术语“安装”以及类似的表述只是为了说明的目的。

除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。

在一个实施例中,如图1所示,提供了一种基于STM32的串行数据接收方法,包括如下步骤:

S100、通过板载的无线通信芯片接收OOK射频信号,解调出有缺陷的曼切斯特数据信号;

S200、STM32自带的ADC模块接收有缺陷的曼切斯特数据信号,将曼切斯特数据信号转换成与波形相对应的一系列ADC数据,并通过DMA接收的方式将ADC数据保存在第一数组缓存区中;

S300、调用ADC数据处理函数将ADC数据转换成对应的曼切斯特编码数据,并在第二数组缓存区中保存下来;

S400、通过曼切斯特解码函数解码第二数组保存的曼切斯特编码数据,并在第三数组缓存区中保存下来;

S500、根据数据包协议预先定义一个C语言结构体指针,C语言结构体指针指向前一个缓存数组,然后将前一个缓存数组的具体数据和内容读出来。

发明利用STM32(具体为STM32H7)上自带的高速ADC模块来实现接收植入体芯片回传的串行数据,首先通过板载的Trf7970芯片(无线通信芯片)将回传的OOK射频信号数据,解调出具有缺陷的manchester(曼切斯特)编码的数字信号;然后将这个数字信号送入到STM32H7 ADC对应的输入管脚,ADC模块将信号转换成与波形相对应的一系列ADC数据,并通过DMA的方式读取保存在一个数组当中;接下来调用ADC数据处理函数,按照回传数据包的内容,匹配这些数据,当数据接收出错时,比如接收到回传的射频信号比较弱的情况下,直接跳出接下来的数据处理过程;如果匹配没有出错,则继续按照设想的数据波形情况处理ADC数据,然后再将ADC数据转换成对应的manchester编码数据,并在另外一个数组缓存区中保存下来。最后,执行manchester解码处理函数,按照具体的回传数据包协议,比如包头+数据+包尾,解码处理缓存的manchester编码数据,并在另外又一个新的缓存数组中将数据保存,最后一步根据数据包协议预先定义一个C语言结构体指针,指针指向前一个缓存数组,最后将具体的数据和内容读出来即可,这样就实现了植入体芯片回传的串行数据的接收。

具体实施时,由于植入体芯片回传的信号只有在回传的时候才有,其它时间管脚电平都是0,因此STM32H7采用外部上升沿触发ADC转换的方式,这样就大大的节省了ADC转换的数据量以及数据处理的难度,使得能够通过ADC转换解析数字信号。这里回传的整个数据包内容加起来有100个bit,采用曼切斯特编码后就是200个bit。通过示波器观察,回传数据包头前面固定有10个bit左右的前导连续0或者连续1。因此这里设置ADC一次接收的数据量是1023 Bytes,即每次通过上升沿触发转换接收1023个数据。又因为设置好ADC的采样频率为4MHZ,能满足我们这里的通信速度要求,而经过编码后的回传数据的波特率固定是1Mbit/s,根据nyquist采样定理,采样速度2MHZ即可。即这里每4个ADC数据对应1个manchester码数据bit。因此4*200+4*10=840bytes < 1023 bytes,明显可以覆盖到整个回传数据包了,这里也就是第一数组为1023长度的数组。

具体实施时,如图2所示,所述S300、调用ADC数据处理函数将ADC数据转换成对应的曼切斯特编码数据,并在第二数组缓存区中保存下来具体包括如下步骤:

按照预设的波形规则处理接收到的ADC数据;

判断是否存在前导10bit连续的0或1;

如果不存在,则跳出处理过程并丢弃掉此次接收到的波形数据,同时将错误计数值加1;

如果找到了前导10bit连续的0或1,则判断接下来是否还存在1个同样的前导波形,并记录下前导波形数据的bit位置作为下一次解析的起始位置。

具体实施时,如图2所示,所述如果找到了前导10bit连续的0或1,则判断接下来是否还存在1个同样的前导波形,并记录下前导波形数据的bit位置作为下一次解析的起始位置之后还包括如下步骤。

判断当前波形数据中是否连续存在2个以上的高低电平宽度在3至5之间的波形脉冲;

反之,如果当前波形数据中的高低电平宽度在3至5之间的波形脉冲数量小于2,则跳出处理过程并丢弃掉此次接收到的波形数据,同时将错误计数值加1;

如果当前波形数据中连续存在2个以上的脉冲宽度在3至5之间之间的波形脉冲,则按照曼切斯特码的规律,每个波形脉冲转换成相对应的数字信号数据,并采用平均值滤波法进行滤波,滤除掉异常的数据;

将转换后的数字信号数据依次按bit处理,存储到曼切斯特编码数组缓存区中,等待下一步处理。

具体实施时, ADC数据接收完成后,按照预设的波形规则(这个主要是通过示波器观察得出来的波形规则),处理接收到的ADC数据。首先,判断是否存在前导10bit连续0或1,如果不存在,则波形不对,跳出处理过程并丢弃掉此次接收到的波形数据。如果找到了前导10bit连续的0或1,则判断接下来是否还存在这样1个前导波形,并记录下波形数据的bit位置作为下一次解析的起始位置。接下来对整个波形数据做一次粗略的统计,预期是4个采样数据bits对应1个解码后的bit,因此统计波形高低电平宽度连续在3~5的波形脉冲个数。当这个波形脉冲个数小于2的情况下,说明波形明显不对,同样的跳出处理过程并丢弃掉此次接收到的波形数据。接下来按照manchester编码的规律,每个脉冲对应4个转换数据,并简单地使用平均值滤波法,滤除掉异常的数据。将接收到的转换数据依次按bit处理,存储到manchester编码缓存数组(第二数组)当中,等待下一步处理。

具体实施时,如图3所示,所述通过曼切斯特解码函数解码第二数组保存的曼切斯特编码数据,并在第三数组缓存区中保存下来具体包括如下步骤:

寻找16bit的曼切斯特编码数据的包头;

如果没有找到包头,则跳出处理过程并丢弃掉这次接收到的数据,同时将错误计数值加1;

如果找到了包头,则记录下当前的bit位置,作为曼切斯特解码数据的起始位置。

具体实施时,如图3所示,所述如果找到了包头,则记录下当前的bit位置,作为曼切斯特解码数据的起始位置之后还包括如下步骤:

反之,如果解码过程中出现2bit 曼切斯特编码的数字信号数据是 2’ b11或者2’b00,则接收出错,跳出处理过程并丢弃掉这次接收到的数据,同时将错误计数值加1;

如果解码过程中没有出现2bit 曼切斯特编码数据是 2’ b11或者2’ b00,则按照曼切斯特编码2bit对应解码数据1bit的规则,每2bit 曼切斯特编码转换出1bit解码数据,并将解码后的数据在解码数据数组的缓存区中按bit依次存储。

具体实施时,所述寻找16bit的曼切斯特编码数据的包头具体包括如下步骤:

将8bit包头数据处理成相对应的曼切斯特编码后16bit的数据;

将16bit的曼切斯特编码数据与第二数组保存的曼切斯特编码数据依次按bit移位对比,做寻找包头处理。

具体实施时,曼切斯特解码函数解码的过程为,首先将8bit包头处理成相对应的manchester编码后16bit的数据,与缓存数组(第二数组)中的曼切斯特编码数据依次按bit移位对比,做寻找包头处理。如果包头找到,记录下当前的bit位置,作为下一步manchester解码数据的起始位置。否则,跳出处理过程并丢弃掉这次接收到的数据。然后按照manchester码2bit对应数据1bit的规则,每2bit解码转换出1bit数据,并将数据在解码数据缓存数组(第三数组)中按bit依次存储处理。如果处理过程中发现manchester码中的2bit出现2’b11或者2’b00非manchester码数据,则接收出错,同样的跳出处理过程并丢弃掉这次接收到的数据。这里的8bit包头数据是指植入体芯片回传的数据包头。

这里注意在每一次出错的时候,需要将错误计数值加1,错误计数到某个限值的时候,我们认为此次接收的回传信号有问题,这时候设置线圈脱落报警标志,并随后做报警处理。

本发明已经在视网膜假体体外VPU设备上运行并验证通过,图4和图5所示。图4为ADC模块接收到的数据通过图形的方式显示出来的波形(放大后显示出来的数据)。图5中的每个脉冲尖对应图4中的数据,1个脉冲尖包含1023Bytes的数据。

本发明还提供了一种基于STM32的串行数据接收系统,上述所述的基于STM32的串行数据接收方法通过基于STM32的串行数据接收系统实现。

综上,本申请提供的一种基于STM32的串行数据接收方法及系统;所述方法包括如下步骤:通过板载的无线通信芯片接收OOK射频信号,解调出有缺陷的曼切斯特数据信号;STM32自带的ADC模块接收有缺陷的曼切斯特数据信号,将曼切斯特数据信号转换成与波形相对应的一系列ADC数据,并通过DMA接收的方式将ADC数据保存在第一数组缓存区中;调用ADC数据处理函数将ADC数据转换成对应的曼切斯特编码数据,并在第二数组缓存区中保存下来;通过曼切斯特解码函数解码第二数组保存的曼切斯特编码数据,并在第三数组缓存区中保存下来;根据数据包协议预先定义一个C语言结构体指针,C语言结构体指针指向前一个缓存数组,然后将前一个缓存数组的具体数据和内容读出来,使得能够实现直接接收串行数据,有效的降低了硬件电路的成本和功耗,尤其是应用在采用锂电池供电的视网膜假体体外设备上,用于接收植入体芯片回传的数据;同时,能够高速、高效的接收处理存在缺陷的串行数据,广泛应用于各种数据处理过程中。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种数据传输方法及系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!