自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhbi98 的技术 Blogs

这些文章详细的记录了个人业余时间所学习的内容,以及个人的技术方向所需要使用的技术,希望小伙伴们喜欢。

  • 博客(120)
  • 资源 (3)
  • 收藏
  • 关注

原创 Markdown+Latex数学符号集合

LaTeX(LATEX,音译 “拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

2024-03-20 20:36:55 699

原创 无刷电机驱动详解

有刷电机和无刷电机字面上理解最大的区别就是有无电刷,实际上区别还有换向器,电刷和换向器的作用是什么?电刷负责在旋转部件与静止部件之间传导电流,换向器则利用旋转惯性周期性的改变线圈中电流的方向。所以有刷电机和无刷电机的本质区别是如何改变线圈中电流的方向,所以电刷和换向器实际不是必须的,只是一种改变电流方向的手段,可以采用其他的手段,只要能够快速周期性的改变线圈电流方向即可。所以无刷直流电动机采用半导体开关器件来实现改变线圈电流方向(电子换向),即用电子开关器件代替传统的接触式电刷和换向器。

2024-02-19 20:45:36 855

原创 双因素认证TOTP原理

在上面讲到的设备级认证中除了短信验证方式之外,需要使用额外的认证设备银行卡或 U 盾,但是随时携带额外的不通用的认证设备是不便的,10 个银行使用需要额外携带 10 张额外银行卡,所以手机才是最好的替代品。手机与密码就成了最佳的双因素认证方式。其中短信验证码,这种方式很好理解,就是只有账号绑定的手机号能够收取到验证码,所以能够输入正确验证码的一般就是本人了,除非短信被人获取或伪造。除了短信验证码这种方式,还有一种 TOTP 的概念,下面详细来讲解一下 TOTP 的实现方式。

2024-01-27 16:27:07 1023

原创 MOSFET 驱动设计

(1) 从上述三个例子当中 MOSFET 驱动芯片会提供专用的管脚连接到 MOS 的栅极 G 和 源极 S 上。这是因为 MOS 管的导通需要控制极(G 极),而 G 极的电压是相对于 S 极的电压来控制的,如果 S 极没有接到 MOS 驱动芯片上,那么 G 极的电压就无法控制 MOS 管的导通,从而无法实现对负载的控制。(2) MOS 根据电路设计可以置于电路低侧或高侧,当然不排除低侧和高侧都有,所以要根据实际应用选择高侧或低侧驱动器芯片,或高低侧驱动器芯片同时驱动高侧和低侧开关管。

2023-12-10 21:58:07 1425

原创 详细了解 MOSFET 晶体管

(1) 耗尽型与增强型的主要区别在于耗尽型 MOS 管在栅极 G 不加电压时有导电沟道存在,而增强型 MOS 管只有在开启后,才会出现导电沟道。(2) 两者的控制方式也不一样,耗尽型 MOS 管的栅源电压 VGS 可以用正,零,负电压控制导通,而增强型 MOS 管则固定需要 VGS>VGS(th) 才能导通。(3) MOS 管改变栅源电压 VGS,实际是改变衬底靠近绝缘层处感应电荷的多少,从而控制漏极电流的大小。

2023-12-03 14:46:50 1029

原创 Linux 并发与竞争(二)

协调好 Linux 并发导致的竞争问题,除了可以使用原子操作,自旋锁(含包含读写锁,顺序锁)之外还可以使用信号量,互斥体。有这么多的机制可用,它们各有特点并不是相互取代的关系,这些里面因该没有一种机制是通用的,所以这些机制都要了解(如同学习编程语言,语法都要会,根据逻辑要求使用不同的语法,这就没有学习哪些语法就够了的说法),不用考虑学习哪种机制更好,根据场景结合这些机制的特点去使用这些机制。

2023-11-06 21:46:28 326

原创 Linux并发与竞争(一)

在线程中使用 “spin_lock_irqsave/spin_unlock_irqrestore”,在中断中使用 “spin_lock/spin_unlock”。

2023-10-29 09:43:25 414

原创 Linux驱动设备号分配与自动创建设备节点

对于 Linux 系统,为了识别和管理设备,每个设备便使用一个唯一的编号来标记设备,每个注册到内核的设备都需要一个编号,这个编号就是设备号,为了细分设备号分为主设备号和次设备号。由于 Linux 的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,所以我们查看文件的详细信息就可以看到设备的设备号。可以看到设备文件权限不再像普通文件那样为rwx了,而是变成了crw第一个字符为c的表示字符设备。

2023-10-04 22:01:28 632

原创 Linux驱动__init和__exit的作用

_section__section可以看到了 “__init” 和 “__exit” 是一个宏定义,被定义为了 “__section” 宏定义,这个 “__section” 宏定义使用到了 GCC 编译器提供的 “__attribute__” 指令,这个指令用来设置一些变量或函数的属性,比如这里就是用来设置 section 这个属性。

2023-09-25 13:06:22 215

原创 Linux设备树OF操作函数

在 Linux 内核中用 struct device_node 表示设备树的数据结构,它是一种树形结构,该类型如下。#endif。

2023-09-18 22:33:29 188

原创 LVGL8.3 对象和内存详解

在创建 LVGL 的组件时,对应的创建组件的 create 函数会从 LVGL 的堆栈中分配一块内存去保存描述组件(位置,尺寸,颜色)样式信息的属性,属性的类型为lv_obj_t结构体,该结构体继承了结构体的内容。所以需要声明一个lv_obj_t *的指针指向保存组件样式属性这段内存的首地址,LVGL 的堆栈的大小在lv_conf.h0==048U1024U0==0。

2023-09-05 13:38:15 1731 11

原创 Linux设备树详解

在 Linux 没有设备树之前 ARM 架构的板级芯片硬件细节通过 C 源码的形式编写在 “arch/arm/plat-xxx” 和 “arch/arm/mach-xxx” 形式命名的文件中,不同的硬件对应不同的文件,这些不可复用的文件参杂在 Linux 内核源码目录中。为了从 Linux 内核源码中去除芯片描述代码就引入了设备树,设备树的本质是不再使用 C 源码去描述芯片,而是使用设备树DTS结构化脚本语法去描述各种芯片。

2023-08-14 11:59:04 1278 1

原创 嵌入式Linux应用依赖库打包详解

在嵌入式 linux 中运行过运用程序的小伙伴因该多多少少都遇到过在 Linux 终端启动运用程序时终端输出 “-sh ./xxx: not found” 的问题,这是应用程序依赖的动态库缺失导致的,验证该问题的办法是使用静态编译去编译应用程序(静态编译会将应用程序依赖的库和应用程序本身打包在一起,所以静态编译的应用程序体积很大,所以一般不使用)。Linux 系统缺失依赖库时可以使用静态编译或在 Linux 根文件系统中添加程序依赖的库文件,静态编译只需要给 gcc 添加-static。

2023-07-09 14:29:48 980

原创 Uboot驱动Linux驱动的区别

我们在学习或移植嵌入式 Linux 系统的时候都会接触到 Uboot 驱动移植和 Linux 驱动开发,此时对于嵌入式 Linux 初学者来说不免会有疑问,例如:为什么 Uboot 已经有相关芯片平台以及外部硬件设备的驱动,Linux 系统还要使用使用设备树,还要集成驱动,下面来解释一下。

2023-07-01 09:00:55 614

原创 Makefile规则详解

一个 Makefile 文件中一般会定义多个 “目标”,例如一些 “真目标”,以及一些 “伪目标”。默认情况下执行make命令 Make 默认会构建 Makefile 的第一个 “目标”,然后逐步去构建第一个目标的依赖。如果你想让 Make 构建指定 “目标”,可以在make命令之后跟随要构建的 “目标” 名,例如或make clean,如果目标为 “真目标” 则构建出努比奥对象,如果目标为 “伪目标” 则执行某种操作。

2023-06-18 22:25:50 763

原创 GCC命令与参数详解

使用 GCC 需要对编译的四个阶段(编译过程),以及编译的规则有一定的了解,熟悉使用 GCC 对于编写 Makefile 具有决定性的作用。GCC 的命令使用非常灵活,命令都以 gcc 开头然后配合待编译文件名,编译选项即可(可以说 GCC 就只有一条命令,只是编译选项较多而已)。命令选项可以随意组合,只需要注意选项是否包含参数即可,如果选项包含参数则参数需要紧紧跟随在选项后方。

2023-06-15 12:00:34 5096

原创 Ubuntu鼠标滚轮速度设置

我们在 Ubuntu 中使用文本编辑器通过鼠标滚轮滚动浏览长内容时可以明显感觉到鼠标滚轮滚动翻页缓慢(实际感觉为滚动操作滞后不跟手),类似鼠标滚轮出现问题,然而实际上是由于 Ubuntu 鼠标滚轮速率设置过小导致的。所以需要修改鼠标的滚轮速度,在 Ubuntu 发行版的设置中心中虽然包含鼠标设置,但并不支持鼠标滚轮速度的设置,所以如果要修改鼠标滚轮速度需要安装 imwheel 工具。

2023-06-05 11:57:10 1567 1

原创 Ubuntu关闭窗口动画

我们安装的 Ubuntu Linux 发行版,默认情况下在 GNOME 图形化桌面上最大化或最小化图形窗口时一般都会呈现屏幕底角到屏幕中心的动画。但是与 Windows,MacOS 相比 Linux 图形动画稍显迟顿,操作时大部分时间都浪费在等待动画响应上,所以为了提升图形交互的速度我们可以关闭该动画。

2023-06-05 11:55:46 1127

原创 Kali Linux 环境变量详解

系统级别的配置文件,对 Linux 系统的所有用户生效,用户级别的配置文件,只对当前用户生效。在这些文件中设置的环境变量会被系统或用户的 Shell 所加载,并可供给后续的命令或程序使用。。~/.bashrc。

2023-05-19 08:59:29 1886

原创 Modbus 协议详解

Modbus 属于串行通信协议,是 Modicon (即现在的施耐德)公司于 1979 年为可编程逻辑控制器 PLC 通信而发表,所以现在知道为什么以 Mod 开头了吧,目前不仅 PLC 使用,实际已经成为工业领域通信协议的标准,是现代工业电子设备之间常用的连接方式。Modbus 公开发表且无版权要求,易于部署和维护。下面我们来了解一下 Modbus 协议相关的细节,以及 Modbus 协议的应用方式。并行通信:数据各位同时传送。串行通信:数据一位一位顺序依次传送。(1)

2023-04-17 09:30:50 15054 2

原创 PID控制算法详解

在控制系统中,控制偏差 e 指的是设定值 w 与实际输出值 y 进行比较的结果即ew−ye = w-yew−y所谓 PID 调节器就是按照偏差 e 的比例(P),积分(I),微分(D)运算的线性组合构成控制量的一类调节器如下图所示。前面说过在实际应用中,PID 调节器的结构可以根据被控制对象的特性和控制要求灵活地改变,取其中一部分环节构成控制规律,组成各种不同的控制器。例如比例(P)调节器,比例积分调节器(PI),或比例微分调节器(PD)。

2023-03-09 15:38:49 7463 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 10473 4

原创 STM32串口传输浮点数

现代的计算机系统一般采用 **字节**(Octet, 8 bit Byte)作为逻辑寻址单位,当物理单位的长度大于 1 个字节时,就要区分字节顺序(Byte Order, or Endianness)。字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。字节序也用于描述多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序,常见的字节序有 **大端模式(Big Endian)** 和 **小端模式(Little Endian)** 两种,还有一种不太常见的 **中端模

2023-02-06 09:02:13 5320

原创 Git常用命令集合

Git常用命令集合常规操作:创建分支,删除分支,切换分支,回退版本,关联一个远程库,克隆。功能分类:新建代码库,增加/删除/修改文件,代码提交至本地仓库,远程操作,查看信息。

2023-02-01 09:21:34 155

原创 C++ 的 this 指针详解

编译器会隐式地传递 this 指针,this 指针如同一个句柄,此时方法将根据句柄来确定需要操作哪个对象的属性。调用静态方法时,则不会隐式地传递 this 指针,因为静态函数不与类实例对象相关联,而由所有实例共享。

2023-01-03 15:06:11 2823 2

原创 C++构造函数初始化列表

我们构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量逐个赋值

2022-12-29 16:18:02 684 1

原创 C++ 复制构造函数

在讲解 C++ 的复制构造函数之前这里先明确一个概念,C++ 的复制构造函数的意思并不是字面上的意思复制一个构造函数,而是有一种专门用于复制内容的构造函数被叫做复制构造函数。复制构造函数对于 C++ 来说是非常重要的概念,所以我们必须掌握并牢记它,下面我们就一起来逐步的了解复制构造函数。

2022-12-05 09:15:12 1372

原创 C++ 两种实例化方式

实例化是指在面向对象的编程中,把 用类创建对象的过程 称为实例化。 是将一个抽象的概念类,具体到该类实物的过程。C++ 的类与 C 语言的结构体非常类似,在 C 语言中如果一个结构体内部的成员很多则定义结构体变量需要的内存很大,此时就无法直接在函数内部定义结构体变量,因为定义在函数内部的局部变量在栈中分配内存,这容易导致栈溢出。所以要么使用 malloc() 函数来动态内存分配,或将结构体定义为全局的结构体变量。所以同样的道理,所以如果创建对象需要使用的内存较多,则需要使用 new 来动态分配内存。

2022-12-01 09:07:24 3236

原创 理解编码器M法/T法M\T法转速测量原理

M 法 又叫做频率测量法。这种方法是在一个固定的定时时间内(以秒为单位),统计这段时间内编码器发出的脉冲数量,以此计算速度值。设编码器单圈(旋转一圈)总脉冲数为 C,在时间 T0 内,统计到的编码器脉冲数为 M0,所以 T0 时间段内旋转过的圈数 R 为

2022-11-23 08:57:33 4001

原创 Java 数据类型详解

Java 属于强类型编程语言,每个变量都必须声明其数据类型。Java 的数据类型可分为两类:基本数据类型(primitive data type)和 引用数据类型(reference data type)。当然这两类数据类型还可以进行细分,分别为 8 大基础数据类型和 5 大引用数据类型。

2022-11-14 16:22:14 601

原创 Java import 详解

在编写 Java 程序时,随着程序架构越来越大,类的个数也越来越多,这时就会发现管理程序中维护类名称也是一件很麻烦的事,尤其是一些同名问题的发生。有时,开发人员还可能需要将处理同一方面的问题的类放在同一个目录下,以便于管理。为了解决上述问题,Java 引入了包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突,类文件管理等问题。包允许将类组合成较小的单元(类似文件夹),它基本上隐藏了类,并避免了名称上的冲突。包允许在更广泛的范围内保护类,数据和方法。

2022-11-07 09:34:41 3069

原创 CMake 基础用法

CMake 基于平台分为两个版本,分别为命令行 CLI 版本,图形界面 GUI 版本。CLI 版本一般用于 Linux 系统中,GUI 版本易于在 Windows 系统中使用,当然 GUI 版本在 Windows 系统中同样也可以使用命令行操作。对于 GUI 版本 CMake 来说图形界面图形化操作可以替代 CMake 的控制命令来操作 CMake。

2022-10-24 09:01:55 3383

原创 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 7816

原创 VSCode 和 CMake 搭建嵌入式开发环境

在嵌入式领域能够选择的集成开发环境(IDE)很多,有通用型的,例如Keil,IAR,给他们安装一个相应芯片的描述包即可开发相应芯片的驱动程序。也有专用型的,例如 德州仪器 TI 的CCS,意法半导体 ST 的,国产 RTOS 操作系统的,以及开源 Arduino 的等等。它们各自的使用方式也是五花八门,一般情况下芯片厂商的芯片在不受通用集成开发环境(IDE)的支持下都会选择向开发者提供一个自己特有的集成开发环境比如 TI 的CCS集成开发环境。如果使用的芯片能够被通用集成开发环境例如Keil。

2022-09-13 09:07:50 6571 7

原创 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 861

原创 步进电机驱动详解

说明步进电机的相数,磁对数,步进电机满步,半步,微步驱动原理,步距角分割,以及驱动示意图演示。

2022-07-08 08:46:57 8904 4

原创 Git 推送代码提示 failed to push some refs to ‘xxx.git‘

error: failed to push some refs to 'xxx.git'

2022-06-20 15:44:25 6393 2

原创 步进电机励磁模式

1. 励磁模式步进电机的基本操作模式称为 励磁模式,能够使步进电机工作在全步模式,半步模式和微步模式,其中微步模式能够有效的降低步进电机相电流的噪声,能够改善步进电机固有的噪声震动问题。下面将介绍 3 种励磁模式。2. 全步励磁模式所谓全步模式,就是依据电机固有结构设计固定的步距角工作,一个电脉冲,步进电机前进一个步距角。这个步距角使电机设计结构所决定的,也可以理解为电机以最大的步距角旋转。3. 半步励磁模式半步模式是以电机固有的结构决定的步距角的一半角度进行步进旋转。如下图所示,步进

2022-05-29 09:39:30 3182 1

原创 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 50350 8

原创 sql select 语句

1. 查询单列查询是数据库中最常用的功能。在 SQL 数据库中使用 SELECT 来实现选取数据的查询数据。结果存储在一个临时结果表中,这个表称为结果集。结果集实际上也是一种包含行与列的表,只不过是未持久化的,即临时表。未持久化 表示存储的数据不是永久的。在使用 SELECT 语句检索表数据时,至少需要给出两条信息,要检索的列名 column_name 和被检索内容的表名 table_name。查询单列数据SELECT `column_name` FROM `table_name`;或

2022-05-01 19:54:35 3017

WinDynamicDesktopPortable4.2.0.exe

WinDynamicDesktop Portable主题软件是一款能够让用户在Windows 10系统上也能使用macOS全新动态变化桌面壁纸的工具,Windows里面由WinDynamicDesktop来实现,壁纸全是3K到5K的超高清,并且占用资源极少。

2021-09-20

JLinkSTM32_flash_unlock.exe

产品芯片为了防止片内 flash 固件被读出逆向转译源码,所以一般会将 flash 锁住,这会导致 后续 flash 无法写入,所以可以使用这个工具来解锁 flash 使之可以再次写入。

2021-09-19

STM32F4XX_USART.rar

本驱动程序基于STM32F4XX同时基于STM32F4系列ST官方标准固件库,本程序适用于STM32F401,STM32F407, STM32F427,STM32F429。程序结构清晰,绝对够详细,修改对应的IO口即可使用。

2020-02-28

空空如也

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

TA关注的人

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