单片机编码BPSK信号
单片机编码BPSK信号前言:  一些终端短距无限通讯的设备,依然选择使用电信号作为信号的载体,比如主动笔和触控屏之间。算然短距但是信号幅度不强又易受到干扰,通常传输中伴随着信号源的运动,比如笔在书写的过程中向屏发送信号等。这就要求我们选择的通讯方式要具有较强的抗干扰能力,从笔端到屏端发送的数据可以以BPSK码作为载波,增强信号传输过程中的抗干扰能力。本文介绍了如何通过单片机将数据转化为BPSK码发送。
1 什么是BPSK信号?  BPSK(Binary phase Shift Keying)即二进制相移键控。在通讯领域通常将基带信号对应上要发送的码元,比如码元为101100时,基带信号为持续1个单位长度的高电平,持续1一个单位长度的低电平,持续2个单位长度的高电平,持续两个单位长度的低电平。将该码元信号作为基带信号,假设载波信号是一个正弦函数,则调相规则为基带信号为高电平时载波信号不变,基带信号为低电平时载波信号进行相位移动,通常移动半个周期即反向。
单片机编码BPSK信号前言: &ems ...
压力曲线
压力曲线前言:  解决的问题:  1.探究了如何去实现压力曲线的转换用于单片机输出相应的频率。  2.介绍了如何考虑使用的传感器压敏特性生成最合适的压力曲线。  3.介绍了一种压力曲线的理论拟合方法,将计算转化过程大大简化。
  1.协议要求的压力曲线(压力等级——频率)是无法直接用于单片机输出的,需要有一个转化关系(单片机无法直接获取压力等级,直接得到的是电压值即采样值。频率的输出是对应定时器的设置值,也需要一个转换关系)。  2.不同的压力传感器有其自己的压敏特性(不能通用,更换压力传感器时需要重新设置曲线),需要将具体使用的压敏特性考虑进曲线中。压敏特性即克重——电压曲线(我们一般用的压力传感器是压力引起电压变化)。  3.单片机的运算性能较差,特别像主动笔这样的低功耗产品,需要考虑使用理论又将理论简化用于单片机运算(避免引入高次方 ...
c代码命名规范
芯片AES加密密钥生成工具前言:  嵌入式单片机开发,为了防止别人将芯片内的代码读取出来通过反编译手段拿到源码,常用的手段是对芯片和烧录文件进行加密。大部分的芯片厂商都会提供一个加密烧录和配置文件的工具。这个工具一般需要你填写一定长度的密钥,如果密钥填写得太有规律比如:123456,或项目名+版本号等,这样的密钥对公司来说极度不安全,如果被对手知道别人很可能直接破解出你的源码,然后抄一下你的板就和你一模一样出货了,别人省去了开发成本何乐不为呢?所以本文介绍一种通过AES加密算法将明文转换为密文的工具制作。AES加密算法目前没有破解办法,据我所知微信小程序就用到了这种加密算法。
1 模块构成  制作这样的工具只需要三个模块即可完成,AES加密算法模块、芯片加密模块、GUI模块。本文使用Pathon3语言开发。
2 AES模块  AES加密是一种常见的对称加密算法,具有较高的安全性。之所以选择用Python3来做这个工具,就是因为其丰富的现成模块支持,没必要重复造轮子,Windows ...
SVN软件开发日志规范
SVN SVN软件开发日志规范前言:  写代码的好习惯除了言简意赅的注释外,还有完善且必要的日志。注释主要是对代码内的模块或功能函数、算法、逻辑框架等进行必要简明的说明,它关注的是”这个“代码里做了什么。而日志需要说明的是这版代码和上一版本改了什么(重点关注代码的升级迭代、用途、风险),和其他代码有啥关系(比如关注是否某些功能模块借鉴或移植于其他项目)。所以日志主要关注的是“这些”代码之间的关系(改动、移植),以及怎么用它,有何风险。所以不要觉得代码里写了足够的注释就不需要写Log了,经验丰富的软件开发们会形成自己完整的一套规范风格。
1 如何写代码日志?  这是我们要回答的第一个问题。通过上面的简介我们大致知道代码Log需要记录哪些信息了,但是这还不够。做软件一个很重要的思维方式就是把问题分类或分块进行细化。一版代码按照开发的进程分,可以分为首次开发和变更开发。按照软件发布的用途分,可以分为临时程序(用于新方案实验、辅助硬件测试、给客户送样等)和受控程序(指正式出货的程序)。按照发布次数可以分为初版发布和变更发布 ...
c代码文件内布局规范
c代码文件内布局规范  从上到下按如下布局代码:
1 *.h文件内代码布局规范
文件头注释。
文件条件编译宏。
头文件包含。
普通宏定义
结构体定义。
联合定义。
枚举定义。
宏定义。
全局变量声明。
全局函数声明。
宏函数定义。
2 *.c文件内代码布局规范
文件头注释。
头文件包含。
变量定义(按类型分类,从占字节少到字节多,然后是结构体、联合、枚举变量)。
函数定义。
c代码命名规范
c代码命名规范前言:  为了兼容不同供应商的芯片驱动库,最好的办法是使用自定义的数据类型等,这样有利于代码的重用性和移植性。
1 变量命名1.1 命名前缀12345678910111213//类型宏定义,为了屏蔽不同芯片库文件的变量类型名称不一致,增强可移植性typedef _Bool Bool; //!< 布尔类型变量,变量命名时前缀加btypedef uint8_t Byte; //!< 1个字节无符号整型,变量命名时前缀加bytypedef uint16_t Word; //!< 2个字节无符号整型,变量命名时前缀加wtypedef uint32_t DWord; //!< 4个字节无法好整形,变量命名时前缀加dw//结构体变量用s ...
c代码Doxygen注释规范
c代码Doxygen注释规范前言:  良好得注释风格利于后期维护和团队协作开发,使得代码逻辑清晰,意图明了。Doxygen是一种能自动提取代码内注释生成版主文档的开源软件,它是跨平台的。非开源项目也许并不需要有这样一份帮助文档,但Doxygen的注释规范也不失为一种好的风格,可以推广遵守。
1 Doxygen注释规范模板1.1 文件注释模板123456789/** * @file 文件名(*.h/*.c) * @brief 该模块功能的简介。 * @details 使用该模块有哪些细节注意等。 * @author 创建该文件的人名。 * @data 该文件的创建日期(2020-03-10)。 * @version 文件或模块版本号(V1.0.0)。 * @copyright 版权所属公司。 */
  若某项无相关的说明,中文写 无 ,英文写 None ,此时末尾不加标点,若有相关的说明,则建议正常使用标点符号,包括句末标点。
1.2 函数注释模板1.2.1 完整格式123456789101112131415161 ...
一阶低通滤波
一阶低通滤波前言:  在使用单片机开发中,常常会用到的外设包括ADC采样。而采样必然会伴随这随机干扰引起的毛刺噪声,对于需要捕捉采样值突变的系统来说尤其需要减小毛刺突变的影响。从硬件电路和软件算法上都能一定程度的减少噪声达到滤波的目的,本文主要讲解软件使用低通滤波算法来滤波ADC采样值的方法。
1 一阶低通滤波(又叫惯性滤波)算法1.1 算法原理  滤波算法公式: Y(n) = a * X(n) + (1 - a) * Y(n - 1)
Y(n):本次滤波结果。a:滤波系数。取值范围为0~1, 值越小越稳定,越大越灵敏。X(n):本次采样值。Y(n - 1):上次滤波结果。
1.2 C代码实现1234567891011//一阶低通滤波#define FO_LOW_PASS_FILTER_SENSITIVE_a 0.8f //一阶低通滤波系数取值范围为(0,1)。值越小越稳定,越大越灵敏,二者难兼顾。#define FO ...
Lua的函数
Lua的函数前言:  最近在学些Lua的函数,之前学的太快导致有些概念性的东西记不住,这次把这些东西梳理下串起来。
1 Lua函数设计到的几个概念  问题:一些Lua书籍会这样介绍Lua中的函数,“Lua中的函数是带有词法定界的第一类值。你可能被里面的名词搞蒙了,我们看下这两个术语到底什么什么意思。
第一类值:我们都知道变量可以存储值,可以作为函数参数输入,可以作为函数返回值输出,可以存放在数组里,我们把这种特性称为第一类值。而Lua把函数也当作一种值来处理,在Lua你可以把函数当作值在变量中赋值传递,函数可以作为其他函数的参数(匿名函数比较喜欢这么用),可以作为函数的返回值输出(Lua实现闭包基础),可以存放在表中(Lua实现对象的基础)。因此我们说Lua的函数是第一类值。
词法定界:Lua函数可以嵌套定义。我们知道Lua的变量有两种,一种是定义在函数外部的全局变量,一种是定义在函数内部的局部变量。函数可以访问全局变量,但函数不能访问其他函数的局部变量,但有一种情况除外,就是内部嵌套定义的函数(注意这里说的是内 ...
模拟PWM波的自适应取阈值算法
模拟PWM波的自适应取阈值算法前言:  单片机开发中,我们常常接触到的波形就是PWM波,一般都是0~3.3V的数字PWM波,很少涉及模拟PWM波。两者有什么不同呢?模拟PWM波不只有高低电平,还有中间的一些变化过程,且波形可能也不是规整的矩形波,再者它的电压可能超过3.3v导致无法直接用单片机IO口识别,PWM无法直接捕获到上升下降沿。  如果你预算充足,开发的设备也不是非常的小型话,可以容纳额外的电路,那么你可以考虑从硬件上增加一些运放电路或整形电路,尽可能将模拟PWM变为数字PWM,如果不行就得考虑串联电阻来分压,然后代码中通过AD采样到数据后进行算法处理。
1 自适应算法1.1 自适应取阈值算法思路:模拟PWM波的自适应取阈值算法前言:  单片机开发中,我们常常接触到的波形就是PWM波,一般都是0~3.3V的数字PWM波,很少涉及模拟PWM波。两者有什么不同呢?模拟PWM波不只有高低电平,还有中间的一些变化过程,且波形可能也不是规整的矩形波,再者它的电压可能超过3.3v导致 ...