- 博客(139)
- 资源 (3)
- 收藏
- 关注
原创 RS485通信总线详解
RS-485 是美国电子工业协会(EIA)在 1983 年批准了一个新的平衡传输标准(Balanced Transmission Standard)也称作差分,EIA 刚开始将 RS(Recommended Standard)做为标准的前缀,不过后来为了便于识别标准的来源,将 RS 改为 EIA/TIA,所以目前该标准的名称为 TIA-485,但目前工程师们依旧习惯继续沿用 RS-485 作为该总线标准的名称。
2023-02-21 10:06:43
15870
4
原创 STM32串口传输浮点数
现代的计算机系统一般采用 **字节**(Octet, 8 bit Byte)作为逻辑寻址单位,当物理单位的长度大于 1 个字节时,就要区分字节顺序(Byte Order, or Endianness)。字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。字节序也用于描述多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序,常见的字节序有 **大端模式(Big Endian)** 和 **小端模式(Little Endian)** 两种,还有一种不太常见的 **中端模
2023-02-06 09:02:13
9050
原创 Git常用命令集合
Git常用命令集合常规操作:创建分支,删除分支,切换分支,回退版本,关联一个远程库,克隆。功能分类:新建代码库,增加/删除/修改文件,代码提交至本地仓库,远程操作,查看信息。
2023-02-01 09:21:34
218
原创 C++ 的 this 指针详解
编译器会隐式地传递 this 指针,this 指针如同一个句柄,此时方法将根据句柄来确定需要操作哪个对象的属性。调用静态方法时,则不会隐式地传递 this 指针,因为静态函数不与类实例对象相关联,而由所有实例共享。
2023-01-03 15:06:11
3403
2
原创 C++ 复制构造函数
在讲解 C++ 的复制构造函数之前这里先明确一个概念,C++ 的复制构造函数的意思并不是字面上的意思复制一个构造函数,而是有一种专门用于复制内容的构造函数被叫做复制构造函数。复制构造函数对于 C++ 来说是非常重要的概念,所以我们必须掌握并牢记它,下面我们就一起来逐步的了解复制构造函数。
2022-12-05 09:15:12
1683
原创 C++ 两种实例化方式
实例化是指在面向对象的编程中,把 用类创建对象的过程 称为实例化。 是将一个抽象的概念类,具体到该类实物的过程。C++ 的类与 C 语言的结构体非常类似,在 C 语言中如果一个结构体内部的成员很多则定义结构体变量需要的内存很大,此时就无法直接在函数内部定义结构体变量,因为定义在函数内部的局部变量在栈中分配内存,这容易导致栈溢出。所以要么使用 malloc() 函数来动态内存分配,或将结构体定义为全局的结构体变量。所以同样的道理,所以如果创建对象需要使用的内存较多,则需要使用 new 来动态分配内存。
2022-12-01 09:07:24
3955
原创 理解编码器M法/T法M\T法转速测量原理
M 法 又叫做频率测量法。这种方法是在一个固定的定时时间内(以秒为单位),统计这段时间内编码器发出的脉冲数量,以此计算速度值。设编码器单圈(旋转一圈)总脉冲数为 C,在时间 T0 内,统计到的编码器脉冲数为 M0,所以 T0 时间段内旋转过的圈数 R 为
2022-11-23 08:57:33
8199
原创 Java 数据类型详解
Java 属于强类型编程语言,每个变量都必须声明其数据类型。Java 的数据类型可分为两类:基本数据类型(primitive data type)和 引用数据类型(reference data type)。当然这两类数据类型还可以进行细分,分别为 8 大基础数据类型和 5 大引用数据类型。
2022-11-14 16:22:14
778
原创 Java import 详解
在编写 Java 程序时,随着程序架构越来越大,类的个数也越来越多,这时就会发现管理程序中维护类名称也是一件很麻烦的事,尤其是一些同名问题的发生。有时,开发人员还可能需要将处理同一方面的问题的类放在同一个目录下,以便于管理。为了解决上述问题,Java 引入了包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突,类文件管理等问题。包允许将类组合成较小的单元(类似文件夹),它基本上隐藏了类,并避免了名称上的冲突。包允许在更广泛的范围内保护类,数据和方法。
2022-11-07 09:34:41
4366
原创 CMake 基础用法
CMake 基于平台分为两个版本,分别为命令行 CLI 版本,图形界面 GUI 版本。CLI 版本一般用于 Linux 系统中,GUI 版本易于在 Windows 系统中使用,当然 GUI 版本在 Windows 系统中同样也可以使用命令行操作。对于 GUI 版本 CMake 来说图形界面图形化操作可以替代 CMake 的控制命令来操作 CMake。
2022-10-24 09:01:55
3731
原创 ARM 编译工具链详解
GNU Arm Embedded Toolchain 是用于 C/C++ 和汇编编程的即用型开源工具套件。GNU Arm 嵌入式开发工具链适用于 32 位 Arm Cortex-A,Arm Cortex-R 和 Arm Cortex-M 处理器系列。GNU Arm 嵌入式工具链包括 GNU 编译器 (GCC),可直接从 Arm 官方免费获得,用于在 Windows,Linux 和 Mac OS X 操作系统上进行嵌入式软件开发。
2022-10-11 08:55:58
10638
原创 VSCode 和 CMake 搭建嵌入式开发环境
在嵌入式领域能够选择的集成开发环境(IDE)很多,有通用型的,例如Keil,IAR,给他们安装一个相应芯片的描述包即可开发相应芯片的驱动程序。也有专用型的,例如 德州仪器 TI 的CCS,意法半导体 ST 的,国产 RTOS 操作系统的,以及开源 Arduino 的等等。它们各自的使用方式也是五花八门,一般情况下芯片厂商的芯片在不受通用集成开发环境(IDE)的支持下都会选择向开发者提供一个自己特有的集成开发环境比如 TI 的CCS集成开发环境。如果使用的芯片能够被通用集成开发环境例如Keil。
2022-09-13 09:07:50
12230
21
原创 CMake了解
CMake(英文 Cross platform Make 的缩写)它不是构建系统,而是构建系统生成器,属于一个跨平台构建工具,在 Linux 平台生成构建系统 make 的 Makefile 文件,在 Windows 平台生成 Visual Studio 或 MSVC 的工程等。所以具体的构建工作还是需要交给例如 Make,Ninja,MSVC 等这些构建系统去执行。对于使用 CMake 我们需要学习两部分内容,分别为 CMake 的控制命令 以及 CMakeLists.txt 的编写语法。
2022-09-02 13:41:43
970
原创 Git 推送代码提示 failed to push some refs to ‘xxx.git‘
error: failed to push some refs to 'xxx.git'
2022-06-20 15:44:25
6594
2
原创 步进电机励磁模式
1. 励磁模式步进电机的基本操作模式称为 励磁模式,能够使步进电机工作在全步模式,半步模式和微步模式,其中微步模式能够有效的降低步进电机相电流的噪声,能够改善步进电机固有的噪声震动问题。下面将介绍 3 种励磁模式。2. 全步励磁模式所谓全步模式,就是依据电机固有结构设计固定的步距角工作,一个电脉冲,步进电机前进一个步距角。这个步距角使电机设计结构所决定的,也可以理解为电机以最大的步距角旋转。3. 半步励磁模式半步模式是以电机固有的结构决定的步距角的一半角度进行步进旋转。如下图所示,步进
2022-05-29 09:39:30
4673
2
原创 USB Type C 接口引脚详解
1. Type C 接口特点Type C 是一组对称的连接器,在使用的过程中不需要如同使用 USBA,MinUSB,MicroUSB 那样来辨别接口方向。其次能够承受较高的功率所以可以支持高达 100W 的功率,所以使用该接口可以更好的支持快速充电,以及支持更高的数据吞吐量,普通规格也达到 10 Gb/s 的数据带宽,可用于高清视频的传输。对于同时满足以上的要求 USBA,MinUSB,MicroUSB 接口无法达到的。2. Type C 接口定义USB Type C 母口USB Type
2022-05-05 13:09:21
64972
11
原创 sql select 语句
1. 查询单列查询是数据库中最常用的功能。在 SQL 数据库中使用 SELECT 来实现选取数据的查询数据。结果存储在一个临时结果表中,这个表称为结果集。结果集实际上也是一种包含行与列的表,只不过是未持久化的,即临时表。未持久化 表示存储的数据不是永久的。在使用 SELECT 语句检索表数据时,至少需要给出两条信息,要检索的列名 column_name 和被检索内容的表名 table_name。查询单列数据SELECT `column_name` FROM `table_name`;或
2022-05-01 19:54:35
3176
原创 shell sed 和 gawk 编辑器使用
1. sed 编辑器sed 编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。sed 编辑器的执行流程(1) 一次从输入中读取一行数据。(2) 根据所提供的编辑器命令匹配数据。(3) 按照命令修改
2022-04-21 09:07:34
234
原创 VirtualBox 解决不能为虚拟电脑打开一个新任务问题
1. 问题详情使用 VirtualBox 打开之前新建的虚拟电脑不能用了,使用 VMWare 发现也不可以。其中 virtualbox 报错如下:明细:VT-x is not available (VERR_VMX_NO_VMX). 返回 代码: E_FAIL (0x80004005) 组件: ConsoleWrap 界面: IConsole {872da645-4a9b-1727-bee2-5585105b9eed}2. 问题原因这是由于windows10系统自带的虚拟机(
2022-04-16 10:39:55
18530
25
原创 maltego 账户注册验证码 reCaptcha 问题
1. 问题详情2.问题原因这是因为 maltego 的官网使用的是 Google 的 reCaptcha 验证码服务,但是对于国内的用户来说并没有办法直接访问谷歌,所以就无法验证 reCaptcha 验证码了,所以相应的无论是 maltego 还是其他的网站,只要是使用了谷歌的验证码服务就无法被直接访问和验证这个验证码。所以我们需要使用一个可以访问 reCaptcha 的插件才能进行验证。3. 安装 redirector 插件火狐浏览器的 redirector 插件可以解决这个问题,所以
2022-04-15 15:05:56
2396
原创 VirtualBox 新建虚拟机
1. 新建虚拟机2. 选择系统类型3. 分配虚拟电脑内存4. 创建虚拟硬盘4.1. 选择虚拟硬盘文件类型4.2. 选择虚拟硬盘文件类型4.3. 选择虚拟硬盘存储模式4.3. 选择虚拟硬盘空间大小5. 虚拟电脑设置5.1. 选择虚拟电脑系统映像.ISO文件5.2. 虚拟电脑网络连接设置6. 进入虚拟电脑系统安装[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fcJIqL95-1649896571629
2022-04-14 08:44:11
5788
原创 android studio 连接夜神模拟器
1. 常用安卓模拟器和连接端口mumu模拟器:adb connect 127.0.0.1:7555海马玩模拟器:adb connect 127.0.0.1:26944逍遥安卓模拟器:adb connect 127.0.0.1:21503夜神玩模拟器:adb connect 127.0.0.1:62001天天模拟器:adb connect 127.0.0.1:65552. 安装安卓模拟器这里我们以上面所给出的第三方安卓模拟器,夜神安卓模拟器为例子点击应用程序安装,选择自定义安装,记住
2022-04-13 11:52:07
3827
原创 360极速浏览器代理设置无效问题
1. 360极速浏览器代理设置无效问题360极速浏览器版本:12.0.1412.0360极速浏览器版本:13.0.2206.0本地监听1080的socks5代理,发现360极速浏览器不生效,原因是代理协议版本协商通讯时产生问题,经测试后,发现360很奇怪,我填了如下设置,按照socks标准协议来执行,仅仅第二行是有效的,其余问题有无法连接网络,或关闭服务器依旧可以连接网络加载网页内容。127.0.0.1:1080127.0.0.1:1080@socks127.0.0.1:1080@s
2022-04-12 08:31:43
3340
原创 java 闭包( lambda表达式)使用
1. lambda表达式简介闭包也被称为 lambda 表达式,让您能够使用运箭头算符“->”来创建只有一个方法的类的对象,它是推动 Java 8 发布的最重要新特性,使用 Lambda 表达式可以使代码变的更加简洁紧凑,典型的应用是JavaFX的事件响应函数lambda表达式格式:(形式参数) -> {代码块}例如最简单的lambda表达式:Runnable runner = () -> { System.out.println("Hello,World!"); };即:
2022-04-11 08:55:03
870
原创 java 匿名内部类
1. 匿名内部类介绍使用 Java 编程时,常常需要创建不会被再次使用的对象。在这种情况下,非常适合使用一种特殊的内部类:匿名内部类。这种类没有名称,是在同一条语句中声明和创建的。要使用匿名内部类,可将引用对象的代码替换为关键字 new、对构造函数的调用以及用大括号({和})括起的类定义。既然是匿名类,所以你无法在别的地方实例化和使用这个类。匿名内部类也可用于接口(interface)的实现特点匿名对象:没有名字的对象。new ClassName().run();非匿名对象:含有名
2022-04-10 09:07:54
20276
2
原创 java 异常处理
1. java所有异常分类Exception│├─ RuntimeException│ ││ ├─ NullPointerException│ ││ ├─ IndexOutOfBoundsException│ ││ ├─ SecurityException│ ││ └─ IllegalArgumentException│ ││ └─ NumberFormatException│├─ IOException│ ││ ├─ Unsupport
2022-04-09 08:29:33
354
原创 java 注解
1. 什么是注解注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”,类似于下方代码这样:类或方法的定义之前都含有一条@开头的语句,例如@Resource(“hello”),@Inject,@PostConstruct,@Override这些都是注解。@Resource("hello")public class Hello { @Inject int n; @PostConstruct public void hello(@Param String
2022-04-08 08:53:37
792
原创 java 反射
1. 什么是反射操作通过Class实例获取class信息的方法称为反射(Reflection),**反射的目的是为了获得某个实例的信息,**JVM为每个加载的class创建了对应的Class实例,并在实例中保存了该class的所有信息,包括类名、包名、父类、实现的接口、所有方法、字段等,因此,如果获取了某个Class实例,我们就可以通过这个Class实例获取到该实例对应的class的所有信息。2. Class类我们要怎么才能够获取一个class的Class实例呢,这里有三个方法2.1. 直接
2022-04-07 08:36:34
230
原创 lvgl8.2 img 图片显示
1. lvgl 图片显示源为了提供良好的图片显示灵活性,所以显示图像的来源可以是以下三种代码中的一个变量(一个带有像素颜色数据的 C 数组)。存储在外部的文件(比如 SD 卡)。带有符号的文本。2. 内部图片对于源码内部图片(将图片转换为图片数组)想要将 PNG,JPG 或 BMP 格式的图像生成像素颜色数据数组,这需要使用专门的图片转换工具,刚好 lvgl 官方也为我们提供了这样的工具,该工具为网页版本,所以需要联网在线使用。具体样式和使用方法如下图所示。具体链接:https
2022-04-06 08:27:07
28572
32
原创 java 泛型通配符和边界
1. 通配符泛型中常用的通配符:我们在定义泛型类,泛型方法,泛型接口的时候经常会碰见很多不同的通配符,比如 T,E,K,V ,?等等,这些通配符又都是什么意思呢?? 表示不确定的 java 类型T (type) 表示具体的一个java类型K V (key value) 分别代表java键值中的Key ValueE (element) 代表Element比如在不确定泛型参数的具体类型时,可以使用?代替,比如下方的例子:比如public void set(List<?>
2022-03-27 09:39:24
945
3
原创 lvgl8.2 自定义符号
1. 符号(symbol)符号即图标(在 lvgl 中称作 symbol)嵌入式设备使用的芯片存储空间有限,使用字库图标能极大的丰富界面,使得图形界面更加生动形象和易于理解,又能控制 ROM 的占用,lvgl 官方自带了 20 几个 symbol,在实际的使用过程中,已有的 symbol 一般无法满足所有的项目场景,此时就需要自己添加一些 symbol,下面将来说明如何在 lvgl 中使用我们自己设计或使用互联网上别人制作分享的 symbol。2. lvgl 官方 symbol3. 自定义符
2022-03-25 11:19:28
7924
11
原创 java 泛型
1. 泛型的优点在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一个安全隐患。那么泛型的好处就是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的。使用泛型的例子:使用泛型指定数据类型和强制转换的比较,如下代码public class Generic<T>
2022-03-22 21:33:29
789
原创 lvgl8.2 自定义字库
1. 官方在线字体转换工具lvgl 自带拥有一定数量的不同字号常用的 ASCII 字符字库,但是 lvgl 自带的字库一般无法适应我们所有的使用场景,比如我们需要的最大字号超出了已有字库的字号范围,我们需要使用中文字体等情况下我们就需要自定义字库(自制字库),基于这样的情况 lvgl 官方也为我们提供了字库的生成工具,该工具是网页版本需要在线使用。具体样式和使用方法如下图。转换工具链接:https://lvgl.io/tools/fontconverter2. 字库内容分析2.1 字库内容/
2022-03-19 13:43:57
4752
3
原创 lvgl8.2 log 组件对接串口
1. 启用 loglvgl 内置有日志模块,并使用 MCU 的串口实时输出用户库中正在发生的事情。要启用 lvgl 日志记录,需要用户在 配置文件 lv_conf.h 中将 LV_USE_LOG 条件编译宏定义设置为 1,这样就启用了 lvgl 的日志功能程序模块。但是仅仅配置该宏定义并无法输出日志。2. 实现串口字符串输出函数前面提到 lvgl 要能够输出信息需要依赖于 MCU 的串口,所以这一步我们需要编写实现 MCU 的串口驱动,但对于不同的串口驱动编写具有一定的差别这取决于具体使用的 M
2022-03-15 12:37:36
3393
原创 lvgl8.2 组件布局方式
1. 弹性布局1.1 弹性布局简介弹性布局可以将组件按行或按列排列,处理环绕调整项目和轨道之间的间距,处理 增长以使组件填充相对于 最小/最大宽度 和 高度 的剩余空间。 这种布局方式类似 java 图形界面框架 javaFX 的 HBox 和 VBox 布局方式。javaFX 的 HBox 和 VBox 布局方式如下图所示:但是相比 javaFX 的 HBox 和 VBox 布局 lvgl 的弹性布局不仅支持水平排列同时支持垂直纵向排列,所以严格意义来说 lvgl 的弹性布局与 jav
2022-03-10 14:46:29
8837
原创 lvgl8.2 分析画面刷新
1. 刷新疑问前面在将 lvgl 对接到屏幕驱动时可以知道 lvgl 可以支持局部刷新,所谓的局部刷新就是比如屏幕中显示了多个组件,比如有按钮,有标签,还有进度条,这时如果仅仅标签的内容发生变化那么 lvgl 只会将标签所在的屏幕位置内容重新刷新,所谓重新刷新就是将更新后的显存内容(内容即颜色数据)通过屏幕数据线重新传递给屏幕进行显示。这时就会产生疑问,lvgl 并没有给用户提供通知刷新的函数接口,lvgl 又是怎么知道标签的内容被改变了呢,lvgl 又怎么知道需要刷新位置具体的坐标呢2. l
2022-03-05 14:50:08
13916
6
原创 示波器带宽
所有示波器都具有以较高频率展示的低通频率响应,如下图所示。大多数带宽规格为 1 GHz 以及更低的示波器通常具有高斯频率响应。示波器高斯频率响应近似于单极点低通滤波器,即您可能已在某些电路课程中学过而且可能绘制为波特图的一些内容。带宽是示波器的基本指标,和放大器带宽的定义一样,是所谓的3dB点,即在示波器的输入端加入正弦波,幅度衰减为实际幅度的70.7%时的频率点称为带宽。也就是说使用100MHz带宽的示波器测量1V,100MHz的正弦波,最终通过示波器观察得到的幅度只有0.707V。
2022-03-01 08:21:45
8855
2
原创 lvgl8.x 屏幕分层
1. lvgl 图层分层顶层 [top layer],lv_layer_top 。用户层 [user layer],lv_scr_act。系统层 [system layer],lv_layer_sys。2. lvgl 图层分层描述顶层:类似于 window 系统中任务栏处于顶层,任务栏不会被任何软件的窗口所遮盖,但可以被系统层图层所遮盖。用户层:类似于 window 系统中软件窗口所在的图层,用户层可被顶层和系统层图层所遮盖。系统层:类似于 window 系统中鼠标箭头所在的图层,鼠标箭
2022-02-25 17:06:11
2274
WinDynamicDesktopPortable4.2.0.exe
2021-09-20
JLinkSTM32_flash_unlock.exe
2021-09-19
STM32F4XX_USART.rar
2020-02-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅