周末了还得加班打个deb包麻烦 

一、传感器的数据处理算法

在传感器使用中,我们常常需要对传感器数据进行各种整理,让应用获得更好的效果,以下介绍几种常用的简单处理方法:

  • 加权平滑:平滑和均衡传感器数据,减小偶然数据突变的影响。
  • 抽取突变:去除静态和缓慢变化的数据背景,强调瞬间变化。
  • 简单移动平均线:保留数据流最近的K个数据,取平均值。

    下面,具体介绍一下这3种处理方法。

加权平滑

    使用算法如下:

    (新值) = (旧值)*(1 - a) + X * a其中a为设置的权值,X为最新数据,程序实现如下:

嵌入式分享合集35_数据

 

抽取突变

    此算法采用上面加权平滑的逆算法实现代码如下:

嵌入式分享合集35_红外_02

 

简单移动平均线

    这个算法,保留传感器数据流中最近的K个数据,返回它们的平均值。k表示平均“窗口”的大小,实现代码如下:

嵌入式分享合集35_嵌入式硬件_03

 

嵌入式分享合集35_红外遥控_04

 

二、UART、SPI、 I2C等串行通信的底层原理

UART、SPI、 I2C等串行通信是嵌入式开发中非常常见的通信方式,这些通信的最底层通信原理其实不难,但很多初学者却学不会。

    本文分享一些常见通信的底层数据传输原理。

UART串口

Universal Asynchronous Receiver/Transmitter,通用异步收发传输器。

    UART串口是最常见的一种串口通信,下面是串口连接上位机电脑,以及RS232应用的动画。

嵌入式分享合集35_数据_05

    如上图,PC 上通过UART来调试MCU。

嵌入式分享合集35_嵌入式硬件_06

    上图,RS-232通过电平转换芯片与MCU通讯。

SPI串行通信

    Serial Peripheral Interface,串行外设接口。

    SPI是一种常见的串行同步通信协议,其应用也非常广泛。

    下面是SPI数据传输的时序图:

嵌入式分享合集35_红外遥控_07

 

    上图,SPI 数据传输(1)。

嵌入式分享合集35_嵌入式硬件_08

   

     上图,SPI数据传输(2)。

嵌入式分享合集35_红外遥控_09

    上图,SPI时序信号。

I²C通信

     I²C:Inter-Integrated Circuit,字面意思是集成电路之间,是I²C Bus简称。

    I²C主要是通过地址来区分识别从机,其通信原理相对较简单。

嵌入式分享合集35_红外遥控_10

    上图,I2C总线以及寻址方式。

红外遥控

    红外遥控在我们现实生活中比较常见,家庭各种遥控器大部分都是红外遥控。

    红外遥控是通过控制脉宽(高低电平的时间)来实现通信的,只是它是通过红外无线信号建立通信链路(红外遮挡了就不行,但可反射)。

嵌入式分享合集35_红外_11

    如上图,红外控制信号也是一个串行通讯信号。

嵌入式分享合集35_数据_12

    上图,红外信号接收与放大整形电路。

嵌入式分享合集35_数据_13

    上图,一个使用红外接收光电管控制继电器进行鱼食投喂电路。

串并转换电路

    串并转换,就是串行数据转成并口数据,通过时钟控制串行数据一位一位传输,凑整(8位)就是一个并行数据了。

    这种转换器有很多现成的芯片,原理很简单。

嵌入式分享合集35_嵌入式硬件_14

    上图,串入、并出移位寄存器。

嵌入式分享合集35_数据_15

    上图,由八个D寄存器组成的移位寄存器。

嵌入式分享合集35_红外_16

    上图,串行传输示意图。

其他

    这里再分享一些其他串行传输的原理(波形):

嵌入式分享合集35_数据_17

    上图,波形调制。

嵌入式分享合集35_红外遥控_18

    上图,PWM控制LED亮度。

嵌入式分享合集35_数据_19

    调幅与调频信号,如上图。

嵌入式分享合集35_红外_20

    相位调制信号,如上图。

嵌入式分享合集35_红外遥控_21

    方波边沿抖动波形,如上图。

三、STM32CubeMx,开发FreeRTOS的demo

CubeMX的基础使用方法。

环境

  • STM32CubeMX
  • KEIL5
  • STM32F103

开始试验

新建工程

    打开CubeMx软件,点击File->NewProject。

    选择使用的控制器型号。

嵌入式分享合集35_嵌入式硬件_22

选择系统时钟源

嵌入式分享合集35_红外遥控_23

设置时钟

    如下图,在右边红框处输入72,直接按回车键即可,CubeMX会帮你配置好。

嵌入式分享合集35_数据_24

选择调试环境

    这里要选择Serial wire,否则程序只能下载一次。

嵌入式分享合集35_数据_25

设置管脚

嵌入式分享合集35_嵌入式硬件_26

使能FreeRTOS

嵌入式分享合集35_数据_27

添加任务

    点击“Tasks and Queues”,添加Task1和Task2两个任务。

嵌入式分享合集35_数据_28

配置工程

嵌入式分享合集35_红外遥控_29

生成并打开工程

嵌入式分享合集35_嵌入式硬件_30

在源码“Task”字样处添加任务功能代码 

嵌入式分享合集35_嵌入式硬件_31

编译工程

嵌入式分享合集35_嵌入式硬件_32

    编译无错误,下载程序到开发板,看到LED开始闪烁。