- 博客(164)
- 收藏
- 关注
原创 解决stm32引脚如果选择输入模式
引脚直接连接到ADC(模数转换器)或比较器输入,不经过施密特触发器。配置为模拟输入时,GPIO的其他功能(如复用功能)自动失效。引脚内部不连接上拉或下拉电阻,完全由外部电路决定电平状态。若引脚悬空(无外部驱动),电平可能不稳定(易受噪声干扰)。引脚内部通过上拉电阻(约20kΩ~50kΩ)连接到VDD。引脚内部通过下拉电阻(约20kΩ~50kΩ)连接到GND。:用于模拟信号输入,直接连接到ADC,不进行数字信号处理。默认电平由内部电阻决定,可简化电路设计(省去外部电阻)。
2025-03-21 20:44:20
1010
原创 PWM控制电机转速的原理及相关寄存器值计算
(高电平时间与周期的比值)来改变电机的平均电压,从而实现转速控制。:决定占空比(高电平时间),捕获/比较寄存器)则设置占空比,因为当计数器达到CCR值时,输出电平会翻转,从而改变高电平的时间。fTIM:定时器时钟频率(STM32通常为72MHz、48MHz等)。常见范围:1kHz ~ 20kHz(根据电机类型调整)。:(自动重装载寄存器)决定PWM的周期(最大值)。频率过高:开关损耗增加(但电机响应更平滑)。:(预分频器)分频定时器时钟,调整计数速度。,ARR越大分辨率越高,但频率会降低。
2025-03-20 17:28:25
617
1
原创 论枚举和结构体以及共用体的使用
数据类型使用条件优点缺点枚举需要一组有意义的命名常量增强代码可读性本质仍是整型,类型不安全结构体需要组合多个不同类型数据数据组织清晰,支持复杂结构内存占用较大共用体需要内存复用或类型转换节省内存,灵活解析数据数据覆盖风险高。
2025-03-20 11:36:09
401
原创 论冒泡和快排
就像一群人按身高排队,从左到右两两比较,高的往后站。每一轮结束,最高的人就站到了最后。下一轮不用管最后的人,继续从头开始比,直到所有人排好。就像整理书架,先随便挑一本书当“分界线”,把比它薄的书放左边,厚的放右边。然后左右两堆书各自再按同样方法整理,直到所有书排好顺序。快速排序像“聪明人拆解问题”,冒泡排序像“老实人一步步来”。:像“煮开水冒泡”一样把最大的数推到末尾。每轮结束后,最大的数会“沉”到最后。把比基准值小的扔左边,大的扔右边。5和3比 → 交换 →。8和4比 → 交换 →。
2025-03-19 16:41:09
402
原创 论数据结构
(Algorithms + Data Structures = Programs),并凭借其摘得图灵奖,该公式之后也成为计算机领域人尽皆知的名言。1984 年获得图灵奖,1992 年当选瑞士工程院院士,1994 年当选美国国家工程院外籍院士,1999 年 4 月退休。队列(Queue):也是操作受限的线性表,限制为仅允许在表的一端进行插入(` (FILO,First In Last Out)的线性表。组成,每个结点包含一个数据元素和一个指向下一个结点的。,不管何种语言,最先被调用的一定最后返回。
2025-03-19 14:56:14
548
原创 C语言论指针
需要注意的是,指针相减的结果会自动转化为整形,这是因为指针算术运算的结果类型是整数。具体来说,如果指针p指向数组a[i],指针q指向数组a[j],那么p-q的结果就等于i-j,即两个元素之间的索引差。指针之间可以进行比较运算,如 ==、<、 <= 、 >、 >=,比较的是各自指向的内存地址的大小,返回值是 int 类型整数 1 (true)或 0 (false)。低位地址减去高位地址,返回的是负值。符号 * 用于通知系统,这里定义的是一个指针变量,通常跟在类型关键字的后面,表示指针指向的是什么类型的值。
2025-03-18 23:02:53
592
原创 C语言 常用系统函数
相比于 printf(),多了一个参数,第一个参数是要写入的字符串,后面参数与 printf() 一致。sscanf(),用于从一个字符串中按照指定的格式提取数据。相比于 scanf(),多了一个参数,第一个参数是要提取数据的字符串,后面参数与 scanf() 一致。time_t 是C语言中用于表示时间值的数据类型,它通常是一个整数类型(int 或 long 或 long long),用于存储时间戳。返回两个时间值的差,返回值是 double 类型,时间值需是 time_t 类型。将str2中的字符串。
2025-03-18 20:21:15
457
原创 C语言论递归函数及其本质
它强制递归函数先解决最小的问题,再逐层回溯解决更大的问题。这种机制虽然直观,但需要警惕栈溢出的风险(例如无终止条件的递归)。:递归就是“把大象装进冰箱,但冰箱里还有一个冰箱,直到遇到一个空冰箱”——关键在于找到终止条件,否则永远装不完!:每次数一张,然后把剩下的钞票交给“另一个人”用同样的方法数(实际上还是你自己数,但问题规模变小了)。如果递归太深(比如没有终止条件),栈会被塞满,导致程序崩溃(Stack Overflow)。一个函数在函数体内又调用了本身,我们称为递归调用,这样的函数就是递归函数。
2025-03-18 20:05:03
157
原创 C语言 论static和extern关键字
使用 static 关键字修饰的全局变量称为静态全局变量。普通全局变量对整个工程可见,其他文件中,使用extern外部声明后,可以直接使用。静态全局变量仅对当前文件可见,其他文件不可访问,其他文件中可以定义与其同名的变量,两者互不影响。静态全局变量对于需要编译多个源代码文件的程序,能够有效地降低源文件之间的耦合,避免不同文件同名变量的冲突。
2025-03-18 19:44:14
190
原创 C语言 循环控制语句
(1)do...while循环是先执行循环体语句,然后再进行循环条件判断,但只有第一次循环语句的执行没有经过判断,以后的每一次仍然先经过判断。不确定循环直到循环表达式不成立之前,不确定循环次数,不需要循环变量。do_while循环至少执行一次,while循环有可能一次都不执行。当循环条件成立时执行循环体语句,直到循环条件不满足时退出循环。实现需求:输入5位数密码,直到密码匹配成功结束循环。实现需求:输入5位数密码,直到密码匹配成功结束循环。
2025-03-18 15:47:28
220
原创 C语言获取数据存储大小
使用sizeof 可以获取数据类型或变量字面量的存储大小,单位是字节。sizeof返回一个size_t类型的无符号整数值,格式占位符是%zu。size_t 通常是 unsigned int 或 unsigned long 的别名,具体是哪个类型的别名,由系统和编译器决定。
2025-03-18 15:21:36
184
原创 解决window和虚拟机linux,剪切板没有办法共享问题
这三个命令的目的是彻底卸载旧版工具、重新安装核心功能,并补充图形化支持,最终确保虚拟机与宿主机的高效交互。是 apt 的一个参数,用于移除因安装其他软件而自动安装、但当前不再需要的依赖包。在虚拟机中执行下面这三条命令,如果怕卸载不干净,看注意事项中,更加安全的操作。),则会卸载该包并尝试自动移除其关联的依赖(如果它们没有被其他软件使用)。依赖图形界面组件(如 X11),因此仅在桌面版 Linux 中需要安装。在虚拟机中安装基础集成工具,确保虚拟机的基本功能正常运行。文件,避免与新安装的版本冲突。
2025-03-18 11:55:43
1067
原创 C语言的进制
十进制:%d(严格十进制)或%i(自动检测进制)十六进制:%x或%X,或者用%i并输入0x前缀。%#x :显示前缀 0x 的十六进制整数。%#X :显示前缀 0X 的十六进制整数。八进制:%o 或使用%i并输入前导0。二进制:没有直接支持,需手动处理。%x :十六进制整数。%d :十进制整数。
2025-03-18 11:44:02
246
原创 #define定义常量和const定义常量的区别
define常量名常量值下面的代码定义了一个名为 PI 的常量:c99新增标准const数据类型常量名常量值;#define 与 const 这两种方式都可以用来定义常量,选择哪种方式取决于具体的需求和编程习惯。通常情况下,建议使用 const 关键字来定义常量,因为它具有类型检查和作用域的优势,而 #define 仅进行简单的文本替换,可能会导致一些意外的问题。
2025-03-18 11:24:18
219
原创 解决git init 命令不显示.git
输入git init 之后自己的项目没有.git文件,有可能是因为.git文件隐藏了,下面是解决办法。首先在自己的项目代码右击 打开git bash here。
2025-03-17 13:55:09
303
原创 Git 的使用上传下载和更新
项目目录名> 是指为克隆的项目在本地新建的目录名称,可以不填,默认是GitHub的项目名。git config --global user.email 邮箱。git config --global user.email 邮箱。git clone <远端地址> <新项目目录名>git pull <远端代号> <远端分支名>。git remote add <远端代号> <远端地址><远端分支名>是指远端的分支名称,如master。git push <远端代号> <本地分支名称>
2025-03-17 10:35:56
1038
原创 LinuX---Shell正则表达式
由于所有特殊字符都有其特定匹配模式,当我们想匹配某一特殊字符本身时(例如,我想找出所有包含 '$' 的行),就会碰到困难。* 不单独使用,他和上一个字符连用,表示匹配上一个字符0次或多次,+例如。[a-c, e-f]-匹配a-c或者e-f之间的任意字符。[a-z]* ------匹配任意长度的字母字符串。[0-9]*------匹配任意长度的数字字符串。[a-z]------匹配一个a-z之间的字符。[0-9]------匹配一个0-9的数字。[6,8]------匹配6或者8。会匹配出所有以a开头的行。
2025-03-15 08:29:40
445
原创 Linux---Shell工具
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。cut [选项参数] filename说明:默认分隔符是制表符选项参数 功能-f 列号,提取第几列-d 分隔符,按照指定分隔符分割列,默认是制表符“\t”(只能是一个字符)(1)数据准备(2)(3)(4)(5)(6)切割ifconfig 后打印的IP地址。
2025-03-14 20:28:15
322
原创 LinuX---Shell---read命令
t:指定读取值时等待的时间(秒)如果-t不加表示一直等待。(sh不支持bash支持)提示7秒内,读取控制台输入的名称。read (选项) (参数)-p:指定读取值时的提示符。变量:指定读取值的变量名。读取终端输入到指定变量中。
2025-03-14 20:17:32
219
原创 LinuX---Shell---流程控制
输入一个字符串,如果是start,则输出starting..,如果是stop,则输出stopping..,如果是其它,输出 please input (start|stop)。输入一个年龄数字,如果小于18,则输出“未成年”,如果小于60,则输出“成年人”,否则输出“老年人”,如果没有指定年龄,提示“请携带年龄”。$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。脚本中写入以下内容。
2025-03-14 20:14:37
203
原创 LinuX---Shell---算术运算符---条件判断
gt 大于(greater than) -ge 大于等于(greater equal)-lt 小于(less than) -le 小于等于(less equal)-eq 等于(equal) -ne 不等于(not equal)$((运算式)) 或 $[运算式][ feng ]返回0,[ ] 返回1。注意:条件成立(数据非空)即为0(真),否则为1(假)-d 文件存在并且是一个目录(directory)-f 文件存在并且是一个常规的文件(file)-w 有写的权限(write)
2025-03-14 19:53:36
183
原创 LinuX---Shell---变量
PATH、HOME、PWD、SHELL、USER等定义变量:变量名=变量值,注意,=号前后不能有空格。撤销变量:unset 变量名。声明静态变量:readonly变量,注意:不能重新赋值,不能unset。变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。等号两侧不能有空格。在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。变量的值如果有空格,需要使用双引号或单引号括起来。最右侧分号可有可无,一般都不写。
2025-03-14 19:40:24
452
原创 LinuX---Shell脚本创建和执行
它是一个命令行解释器,接收应用程序/用户命令,然后调用操作系统内核。Shell还是一个功能强大的编程语言,易编写、易调试、灵活性强。
2025-03-14 18:55:23
457
原创 Linux---路径类
basename [string / pathname] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)。suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。截取该/home/zxf/banzhang.txt路径的文件名称。
2025-03-14 10:34:04
449
原创 LinuX---压缩和解压类
tar [选项] XXX.tar.gz 将要打包进去的内容(功能描述:打包目录,压缩后的文件格式.tar.gz)产生.tar打包文件。
2025-03-14 09:58:53
159
原创 LinuX---搜索查找类命令
Grep(Global Regular Expression Print),用于对指定文本根据正则表达式(特定规则)搜索匹配并输出到终端。按文件大小:在当前目录下查找大于200字节的文件(+n 大于 -n小于 n等于)find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。按文件名:根据名称查找当前目录下所有以.txt结尾的文件。查找属于指定用户名所有文件。b —— 块(512字节)w —— 字(2字节)
2025-03-14 09:56:03
251
原创 Linux 文件权限类
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。chown [选项] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)修改整个文件夹里面的所有文件的所有者、所属组、其他用户都具有可读可写可执行权限。)拥有该文件的权限,---Group。拥有该文件的权限 ---Other。
2025-03-13 17:15:54
727
原创 Linux---VI/VIM编辑器
在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。通常在Linux中,按下这些按键时,在画面的左下方会出现『INSERT或 REPLACE』的字样,此时才可以进行编辑。在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的!在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的!对于有写权限的文件,修改后,保存并退出。
2025-03-13 16:25:59
788
原创 LinuX-APT软件包管理器+常用基本命令
是Debian及其派生Linux的软件包管理器,可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Unix系统上管理软件的过程。5 对象的所属组 (它的权限是9位权限的中间三位)---剩下的三位是其他角色的权限。表示回到当前目录的上一级目录,亦即是 “/root/公共的”的上一级目录的意思;全部的文件,连同隐藏档(开头为 . 的文件) 一起列出来(常用)4 对象的所有者 (它的权限是9位权限的前三位)删除软链接: rm 软链接名,或者:unlink 软链接名。
2025-03-13 15:16:47
1465
原创 Linux目录结构
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储(U盘、移动硬盘)挂载在/mnt/上,然后进入该目录就可以查看里的内容了。s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序,本质是/usr/sbin的软链接。service缩写,此目录用于存放系统运行时数据,特别是那些由系统上运行的服务所产生的数据。这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及映射文件,自己的安装别放这里。类似于windows的设备管理器,把所有的硬件用文件的形式存储。
2025-03-13 09:50:36
269
原创 Linux入门
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于UNIX和POSIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能运行主要的UNIX工具软件、应用程序和网络协议。目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、SuSE、OpenSUSE。Linux应该叫 GNU linux---{GNU (GNU is Not Unix)}的基本单位,属于同一进程的多个线程共享进程的地址空间和资源(如全局变量、堆内存)。
2025-03-12 21:01:00
596
原创 高级定时器的解码器模式
是高级定时器的一种功能,用于直接读取正交编码器(如旋转编码器)的输出信号,自动跟踪脉冲变化并计算方向与计数值,无需CPU频繁干预,适用于电机控制、位置检测等场景。1. 配置编码器输入的GPIO引脚,设置为输入模式,并映射到定时器的通道。2. 配置定时器为编码器模式,选择编码器接口的工作方式(例如,仅在TI1的边沿计数,或者TI1和TI2的边沿都计数)。3. 设置自动重装载值,确定计数器的范围。4. 启用定时器,开始计数。5. 通过读取计数器的值来获取位置信息,或者结合溢出中断来计算速度。
2025-03-12 20:18:06
479
原创 ADC数模转换原理
砝码称重,先放最高位的也就是b3,比较器负端1.76,正端2.21,2.21大比较器会输出1,然后将1存到b3中,然后继续b2,b3加b2等于2.64,然后继续比较,2.64比2.21大输出0,然后将0放到b2,依此这样比较,最后是1010---这个阶段叫。采样:就是将需要测量的电压2.21V接到模拟信号上,然后合上开关,电流存储到电容当中,这个过程叫做。我们常用的就是逐次逼近型,它只需要一个比较器,采用二分查找方式---类比于。Sigma-Delta型----精度最好、工作速度太慢---通过。
2025-03-11 20:12:31
263
原创 MQTT 物联网的首先协议
2、发布订阅模式(MQTT要使用的模式):发布者---订阅者----》不需要直接建立连接---》数据的传输需要一个中间者也就是代理软件broker。:存在于broker中,是一个普通字符串,可以用主题来对消息进行分类。发布者和订阅者与broker传输是双向的,可以接收也可以发送。:设备和设别之间传递的数据,或者服务与服务之间要传的数据。空间上的隔离: 发布者和定位者,不需要直到双方在哪。1、客户端---服务器端---》需要直接建立连接。时间上的隔离:两者不需要同时启动。:传输数据时所遵循的规则。
2025-03-11 11:26:32
245
原创 HAL库启动ADC的三个函数的区别
DMA是直接内存访问,这个函数是在启动ADC转换的同时,配置DMA来自动将转换结果传送到内存中的缓冲区,而不需要CPU的干预。这对于需要高速采样或者大量数据采集的应用非常有用,因为这样可以大大减少CPU的负担,让CPU可以去处理其他任务,而DMA和ADC自动完成数据的采集和传输。这样,当ADC转换完成后,CPU会被中断,然后执行中断服务程序,在中断里读取ADC的结果。应该是启动ADC转换的最基本函数。比如,当调用这个函数后,ADC开始转换,但程序需要不断检查某个标志位来看转换是否完成,然后才能读取结果。
2025-03-07 23:10:51
318
原创 HAL库,配置adc基本流程
初始化ADC模块,设置分辨率、数据对齐方式、扫描模式等。:读取ADC转换结果(12位值,范围0~4095)。:设置ADC通道的采样时间、转换顺序等。:启动ADC转换(单次模式需手动触发)。:配置ADC引脚为模拟输入模式。:校准ADC,减少转换误差。:阻塞等待ADC转换完成。
2025-03-07 22:54:08
414
原创 adc数模转换器大白话解释
想象你要把一杯水的温度告诉电脑,但电脑只认数字。:25°C、26°C... 而不是“水银停在某个位置”。, ... 它就知道温度变化了!
2025-03-07 22:44:45
180
原创 STM32 进阶 定时器
的计数器,所以它最大时2的24次方,计数器每计数一次的时间为1s / SYSCLK---下面是验算过程,可以看到如果时72M时钟频率,那么多大是233ms触发中断。2、死区时间,是指在互补信号中的一条信号加一掉段延迟,防止两条信号线同时产生跳变,保护了H桥电路,也就是说,在延迟的这段时间H桥电路中的MOS管可以进行放电,保护H桥电路。1、高级定时器的通道1/2/3可以分别输出2路互补信号,互补信号用来驱动H桥电路,H桥电路通常用于驱动电流较大的负载,比如电机。)不同,产生不同的输出,高电平或者低电平。
2025-03-06 17:27:21
859
ESP-IDF包含了编译器,汇编器,链接器,调试器,烧写器
2025-02-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人