自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 CAN通信原始数据解析

通常使用的CAN通信中,标准帧和扩展中传输的数据为8字节,使用上位机抓包调试数据通信时通常拿到原始数据也是长度为8的单字节数组,然后根据自己程序中的定义再按照位将数据解析出来,此过程如果使用软件工具的或自己手动解析数据、按照Bit数原始数据不仅繁琐还极易出错,本文将介绍一个简易的CAN原始数据解析工具。配置文件整体是一个json object,其中Key为用于解析显示的label, Value就是解析数据的位数,从0开始记最大63。注意如果找不到这个配置文件将会报错,编辑配置文件时务必确保数据不会越界。

2024-06-24 15:49:16 297

原创 串口无精度损失传输float类型数据

在上位机和底层通信时,一般传输的类型是定点整型数,有时会遇到传输浮点数的情况,一般处理方式是将浮点数放大几百几千倍,然后舍去剩余的小数部分,接收端接受到整数后再等比例缩小还原原数据即可。这种做法第一要考虑放大后数据的范围不可以超出定点数的表示区间,另外传输过程中丢失了部分精度,在固定小数位数的场合比较适用,高精度传输的时候就会失效。这种方法不仅可以传输float类型,double类型也是同样的原理,另外用户自定义的struct数据类型也可以借鉴该思路传输和还原。

2024-06-03 16:14:10 309

原创 利用Matlab实现嵌入式控制算法验证

对于一般的控制算法或者仿真模型可以使用传递函数描述,在Matlab中可以直接建立传递函数(tf)或者零极点(ZPK)的S域模型。双击模块,点击设置进入配置界面,在头文件和源文件配置信息中输入编译文件的信息,如果编译涉及的头文件在不同的目录则包含目录中也要给出相应的信息。在simulink中还可以先搭建仿真,再自动生成C代码,这种做法也可以大大提升开发效率,在之后的篇章中会逐步介绍。在simulink库浏览器中搜索ccaller,得到对应的模块,在仿真文件中放置模块。,这一步也可以借住Matlab。

2024-06-03 14:39:45 1074

原创 汇川SV660P调试记录(485通讯)

按照以上帧结构,在伺服控制器上电显示rdy后,发送伺服使能指令(假设电机地址为01),将H31.00寄存器设为1(VDI1为伺服使能),CRC16_L和CRC16_H分别为CRC16校验的低8位和高8位。在H17[虚拟DIDO设置]界面,设置VDI为伺服使能,逻辑选择写0(写入1有效),如此设置之后16位寄存器H17.00的第0位写1就表示将伺服使能,写0表示断使能。注意,完成一次运动之后要将位置指令断使能,此时还出于伺服使能的状态,再发送一次位置指令使能,电机会继续动作。附CRC16计算C代码。

2024-04-28 14:39:30 2178

原创 STM32单片机实现固件在线升级(IAP)

同样的APP与APP备份将剩余的FLASH平分,以上述booloader为例,APP程序及其备份所占区域为:(512-32)/2=240KB,因此编写的APP程序编译后的占用的FLASH空间不得超过240KB,这一点可以通过查验.map文件确认,对于不同FLASH大小的芯片可以类比以上计算方法确认自己的程序大小上限(在此插入一句,改变编译器的优化等级可以改变最后的程序大小,但是高的优化等级对程序编写规范要求更高,因此优化等级应该在一开始设计APP之前就确定好,中途变更会带来不可预测的问题)。

2023-08-15 21:31:37 4421 2

原创 git使用记录

官网下载git,默认安装即可。安装完成之后就可以使用git bash命令行使用git进行版本控制了,在windows下可以使用另外的GUI工具简化命令行操作下载TortoiseGit,同样是默认安装,完成之后在某一文件夹下右键单击会出现TortoiseGit的选项卡,后续的操作都基于TortoiseGit选项卡进行。

2023-07-28 21:33:41 57

原创 正则表达式

首先是语言环境,为了快速开发选择的开发语言是Python,使用Anaconda + Pycharm的组合(之前就装的,并不是为了这个小任务单独装的)。设计正则表达式匹配规则,以下就是匹配字符串”正常(0:00-9:59)“上班,正常******,正常(21:00-23:59)“即9点后下班,因为不想写的太长所以分成两条规则,中间还有一些特殊情况比如正好10:00打卡上班、第二天凌晨之后打卡下班等等都单独设计了匹配规则,这些就不再展开了。之后利用这个信息可以统计,也可以做成明细给老板看了-_-!

2023-07-28 21:32:34 68

原创 STM32移植RT_Thread

我选择的芯片的stm32F407VET6,下载的芯片SDK是0.2.3的,直接编译时串口驱动的函数报错,我的解决方案是吧报错的那一段switch代码屏蔽掉,好像正经的解决方法是使用0.2.2 的SDk或高版本的RT-Thread,总之问题不大。Studio创建的初始工程所有的芯片外设都是默认的,实际项目中我们需要定制芯片资源,因此底层配置可能要自行修改,ST公司提供的芯片配置工具STM32CubeMx可以与RT-Thread Studio联合开发。在新建的文件上右键->更新软件包,再次编译。

2023-07-28 21:31:26 1192

原创 基于C语言的泛类型循环队列

循环队列多用于通信数据缓存中,尤其是在双方设备接收数据与处理数据不同步的情况下,使用循环队列先缓存通信数据,然后按照时间戳数据出队作出相应的处理,是一种比较合适的做法,在嵌入式编程中亦是如此。使用循环队列的数据结构可以实现上述功能,在一些低端的编程平台手写一个循环队列既满足了功能需求又不会开销太多资源。

2023-07-28 21:29:22 82

原创 STM32移植FreeRTOS(手动)

至此移植完成,如果不做步骤5,会报出函数体重定义的错误,如果把FreeRTOSConfig.h中的函数定义删掉,执行任务调度时会报出硬件错误,以上是本人在移植过程中踩过的坑。2.在keil工程中添加上述文件,以及…2.stm32芯片包:Keil.STM32F4xx_DFP.2.16.0/Keil.STM32F1xx_DFP.2.4.0。5.在工程的代码,中断文件中(一般cubemx生成的工程是在stm32fxxx_it.c中)(1)configCPU_CLOCK_HZ是主频的宏定义,一定要与工程配置对应。

2023-07-28 21:25:24 233 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除