
嵌入式软件
盐厂的伙计
工控自动化从业者,从事伺服相关的功能开发
展开
-
C语言状态机编程进阶
状态机的一般实现一般的状态机实现如下,定义几个不同的状态,通过switch...case...语句实现不同状态的执行。一般小型状态机使用上述方式实现,该方法的缺点,一是如果系统稍微复杂一些,将需要定义很多状态,同时增加case的数量。二是swich...case...将变得很复杂臃肿。状态机的高级实现一个新的实现方法是使用函数本身作为执行的状态和保存当前的状态到函数指针。使用函数名作为状态,这种方式的循环调用函数 state_machine_run(void * p...翻译 2020-10-21 21:57:06 · 1200 阅读 · 3 评论 -
关于数组元素地址的计算
最近发现一个奇怪的现象,关于数组地址的计算,这是什么原因呢?原创 2020-07-31 08:47:49 · 919 阅读 · 2 评论 -
EtherCAT分布式时钟同步过程的理解
分布式时钟(Distributed Clock,DC)可以使所有EtherCAT设备使用相同的系统时间,从而控制各个设备任务的同步执行。从站可以根据同步的系统时间产生同步信号,用于中断控制或触发数字量输入/输出。支持分布式时钟的从站称为DC从站。时钟术语的描述Local system time 即本地系统时间,每个DC从站的本地时钟经过补偿和同步之后,都产生本地系统时间,分布时钟同步机制就是使各个从站的本地系统时间保持一致。参考时钟与本地系统时钟对应。 参考时钟和从时钟 EtherCAT...原创 2020-05-24 11:56:46 · 17048 阅读 · 7 评论 -
FLASH模拟EEPROM的方法
工业中经常使用EEPROM(电可擦除可编程存储器)来存储更新数据,为降低成本,可以使用FLASH代替。EEPROM 仿真可以通过多种方式实现,但要注意 Flash 限制和产品要求。下面详述的方法要求为非易失性数据分配至少两个相同大小的 Flash 扇区:一个在开始时擦除,支持逐字编程;另一个在需要对前一扇区执行垃圾回收时接管工作。占用每扇区前半个字(16 位)的头字段指示扇区的状态。在本...原创 2020-04-08 22:28:25 · 9348 阅读 · 5 评论 -
卡尔曼滤波C语言实现
卡尔曼5条基本公式,参考https://wenku.baidu.com/view/8523cb6eaf1ffc4ffe47ac24.html#include "stdio.h"#include "stdlib.h"#include "math.h"#define kal_Q 0.001 /*过程噪声协方差,Q增大,动态响应变快,收敛稳定性变坏*/#define kal_R 0....原创 2020-01-17 11:03:21 · 3500 阅读 · 1 评论 -
使用Github创建私有仓库实现联合开发
本文主要讲解使用Github创建私有仓库实现联合开发的详细过程。转载 2020-01-15 13:45:27 · 869 阅读 · 0 评论 -
一种基于STM32F1 MCU的增量型编码器测速的方法
遇到的问题1. 编码器信号,用来计量长度,如果需要同时测量当前实时速度,在不增加接口的情况下,实现较为准确实时的测速2. 简单的M法速度,对于低速信号,测量精度较差,实时性也不高。测速方法之前的文章提到,测速的三种方法:(1)在规定时间内测量所产生的脉冲个数来获得被测速度,称为M法测速;(2)测量相邻两个脉冲的时间来测量速度,称为T法测速;(3)同时测量检测时间和在此时...原创 2019-11-12 09:38:04 · 5411 阅读 · 9 评论 -
SBUS使用
第一次接触S-BUS协议,踩了好多坑,在此记录一下。本人用的是stm32F429 + 普通航模遥控器(某宝上一大堆),用来遥控继电器,管脚自定义。S-BUS协议S-BUS其实是一种串口通信协议,采用100000的波特率,数据位点8bits,停止位点2bits,偶效验,即8E2的串口通信。但是S-BUS采用的是反向电平传输,也就是说,在S-BUS的发送端高低电平是反向的,协议中的所有高电平都...转载 2019-09-25 15:30:07 · 8348 阅读 · 3 评论 -
STM32 输入捕获测量脉冲周期/频率
STM32捕获模式连续测量脉冲周期/频率,使用类似中断的方式,使用STM32内部的硬件滤波器,脉冲周期量程很大(固定时间脉冲计数的方式,量程有限)。硬件: STM32F103R8T6 TIM2 CH1通道程序配置如下:/*TIM2初始化*/void MX_TIM2_Init(void){ TIM_MasterConfigTypeDef sMasterConfig ...原创 2019-08-19 11:16:53 · 12692 阅读 · 0 评论 -
M/T测速实现
实际应用中,单片机根据脉冲计数来测量转速的方法有以下三种:(1)在规定时间内测量所产生的脉冲个数来获得被测速度,称为M法测速;(2)测量相邻两个脉冲的时间来测量速度,称为T法测速;(3)同时测量检测时间和在此时间内脉冲发生器发出的脉冲个数来测量速度,称为M/T法测速。以上三中测速方法中,M法适合于测量较高的速度,能获得较高分辨率(最容易想到);T法适合于测量较低的...翻译 2019-05-07 23:56:46 · 9752 阅读 · 4 评论 -
pahoMQTT+SIM800C+STM32 移植和使用
1. 介绍随着物联网的全面普及,作为终端的单片机也需要联网,本文讲述的是一种低成本的物联网方案,硬件使用GPRS模块和STM32单片机,网络基于MQTT报文协议,相比于WIFI局域网,GPRS(最新LTE)具有更大的适用性。同时MQTT协议具有使用方便,资源消耗少和成本低的优点,非常适合物联网设备使用。硬件:STM32F103RBT6 SIM800C软件:stm32_hal Ke...原创 2019-04-10 20:45:23 · 13483 阅读 · 55 评论 -
实时系统的设备驱动实现
首先为什么要谈这个话题呢?第一是笔者看到了关于RTOS驱动开发介绍的文章,作者的特点是从系统的层次上分析问题(为大家铺路),好东西大家一起用(博大的胸襟);第二是笔者能够看懂一些,分享一下,争取做到准确... 笔者一位低一年级的同学参加过嵌入式软件的培训,告诉我他学过ARM板上写Linux驱动,我很羡慕,因为写驱动是比较难的事情,这里笔者思考的是UCOS的驱动设计 ,笔者至今不懂翻译 2018-06-22 09:49:10 · 936 阅读 · 0 评论 -
嵌入式工程师基础面试题
工作好几年了,C语言功底有些都生疏了,罗列一些C语言基础,也是常见的面试考点。1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2) 懂得预处理器将为你计算...转载 2018-06-24 11:17:12 · 335 阅读 · 0 评论 -
stm32f0xx 的HAL 库 HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart) 函数异常
最近使用stm32f030c8t6串口,使用DMA的方式接收和发送数据。DMA使用IDLE中断接收不定长数据void HAL_UART_IDLEHandler(UART_HandleTypeDef * huartx){ uint32_t tmp_flag = 0; uint32_t temp; tmp_flag = __HAL_UART_GET_IT(huartx,UART_IT_IDL...原创 2018-06-16 20:14:14 · 6457 阅读 · 0 评论 -
STM32 ST-LINK 下载后不明原因的无法启动
更换ST-LINK 后,下载程序无法启动,程序下载正常,就是无法启动,换了一块不同的板子还是这个现象纠结于:1. 晶振没有正常起震2. ST-LINK 驱动问题3. 程序出错4.... 一万个草泥马飘过搜索度娘的方法,都没有效果,用MDK在线调试,显示启动后莫名复位,有一种程序跑飞的感觉后来偶然发现有网友提到 WDG_SWst-link utility 文档上...原创 2018-09-30 01:15:35 · 6337 阅读 · 0 评论 -
C语言三剑客--一个简单的命令解释器
这是C语言三剑客书(三本书,不记得是哪一个了)的一个简单的C语言实现的的命令解释器,加在单片机软件工程里,用来调试,还是比较灵活方便的。自制命令如下1. 返回芯片 的ID值&GetID123452. 设置比例调节器的值为 12& 12 SetP......实现如下:1. 创建栈,数值栈 和 字符栈static int stack[STKSI...原创 2018-11-10 08:41:03 · 1841 阅读 · 0 评论 -
STM32F103 数字滤波的编码器测速
工作中经常遇到需要连续测速的应用,担心编码器“抖动”,导致速度测不准一. 简单原理 编码器计数 ----> 数值取样 ----> 差分 ----> FIR滤波 ----> 比例计算实际速度二. 硬件接口 三. 差分计算 #define MAXCOUNT1 20000 //最大计数值 per 0.1s#d...原创 2018-11-29 09:42:31 · 7754 阅读 · 2 评论 -
非线性跟踪-微分器 仿真应用
非线性微分跟踪器的Matlab仿真非线性跟踪微分器非线性跟踪微分器的一般形式MATLAB仿真离散微分跟踪器的MATLAB仿真仿真 r = 50 T=0.01仿真 r = 10 T=0.01仿真 r = 100 T=0.01 对阶跃信号 10u(t-5)的仿真简单结论非线性跟踪微分器实际工程问题中,测量信号经常不连续或者带随机噪声,需要提取连续信号和微分信号。比如PID调节中,需要由不连续的参考...原创 2018-12-22 11:03:10 · 8248 阅读 · 16 评论 -
2018感想
2018个人感想和不足大学毕业做单片机开发整整四年半了,一些做软件,网络,大数据的同学我感觉望尘莫及,我指的是薪资,又到年底了,感觉遇到了瓶颈,也思虑着公司的发展以及个人的发展。PLA归来,一直呆在靠家这边的小公司里,中途换过一家,一直做单片机应用的开发,从51到目前的STM32。补充一下,这是一个不折不扣的四五线小县城,长江三角圈外围,不然也找不到这方面的工作。曾经年轻气盛过,感觉自...原创 2019-01-25 16:35:51 · 651 阅读 · 1 评论 -
stm32f103 串口 DMA收发
1、stm32串口发送占用的时间 做嵌入式以来,一直自认为在两个MCU之间的串口通信很占用时间,让我感觉很是不爽。为了远程数据传输,波特率较低,假设bps = 9600,传输20个字节大概需要20ms。如果使用HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Time...原创 2018-05-29 13:54:54 · 4229 阅读 · 0 评论