- 博客(25)
- 收藏
- 关注
原创 Linux启动过程
对 Busybox 的 init 来说,表示该进程使用的控制台的设备名(非传统意义上的 ID)。start_kernel:打印linux版本信息,处理u-boot所传参数r2,初始化控制台,重新建立页表,初始化异常处理,加载所有的驱动模块,挂载文件系统,执行init。U-boot修改了设备树的节点(bootargs参数节点和内存信息节点),把需要传递的信息放在设备树中,在r2寄存器中记录了设备树在内存中的地址。[2]depends on 配置选项名1(m) || 配置选项名2(y)
2026-07-09 14:58:41
245
原创 STM32 SPI控制器
在SPI 通信中,主设备(主器件)指的是SPI 总线上的主控制设备,主设备负责控制通信时序、数据发送和接收的速度、通信发起等等。SPI 控制器挂载在APB2时钟总线上,使用的是APB2时钟总线提供的时钟,SPI 控制器自身还有一个时钟分频器,用于将APB2总线 上的时钟,进行一定系数的分频后,在进行输出。那么,主设备提供的时钟频率是不是越快越好呢?CPHA实际指的就是数据的采样时刻,CPHA= 0 时,则表示数据的采样是从时钟的第一 个边沿,CPHA= 1 时,则表示数据的采样是从时钟的第二个边沿。
2026-06-27 15:16:28
184
原创 STM32 DAC控制器
可自动将数据从内存传输到DAC,无需CPU干预,适合生成复杂波形。:DAC核心将DORx中的数字值转换为对应的模拟电压,通过。:内置输出缓冲器,可降低输出阻抗,直接驱动外部负载。:触发事件到来时,DHRx中的数据被传送到。(如TIM2、TIM4等)事件触发。大多数STM32芯片提供。,以适应不同位宽的数据处理。:12位模式下,数据支持。独立的DAC转换通道。:部分型号支持硬件生成。:将待转换的数字值写入。
2026-06-26 17:09:19
222
原创 STM32 I2C控制器
开漏输出的高阻态(High Impedance State)是指开漏输出电路处于一种“非驱动”状态,意味着 I/O 引脚处于高阻抗状态,相当于电路开路(不驱动总线),不会影响总线电平。在 I²C 数据传输中,数据的传输顺序是 MSB(Most Significant Bit,最高有效位)先传输。在同一时间内,通信双方只能有一个方向的数据传输,即发送方和接收方需要轮流发送和接收数据,而不能同时进行。在 SCL为高电平时,SDA 上的数据被视为有效,接收方会在这个时刻对 SDA 的状态进行采样。
2026-06-26 13:37:42
253
原创 Modbus TCP
Modbus TCP/IP的报文被封装在一个标准的TCP数据段内,而不是像串行通信那样直接在物理层上发送。TCP报文提供了端到端的可靠传输,包括数据分段、重传、流量控制和拥塞控制等机制。一次通信数据结构:MBAP头(7字节) + PDU(功能码+数据)
2026-06-23 10:02:07
193
原创 STM32 ADC控制器
ADC,其全称是Analog-to-Digital Converter,即模/数转换器,是一种将模拟信号转换为数 字信号的电子原件。ADC将模拟信号转换为数字量,一般都需要经过三个步骤:采样、量化和编码。
2026-06-11 11:22:57
169
原创 电路板实验
APB1的Timer时钟是36MHz,分频系数是359+1=360,将36MHz定时器时钟先通过PSC=359分频到100kHz,计数器是0~99,即100个,所以PWM频率=100KHz/100=1KHz,STM32F103的ADC为12位精度,转换结果存放在16位的ADC_DR寄存器中,因此DMA搬运时需要按16位即Half Word进行传输。使用ADC的连续非扫描模式,只有一个通道,规则组转换,右对齐,转换结果放在低位,方便直接用。校验地址、功能码、CRC、寄存器地址。控制PC6 LED亮/灭。
2026-06-11 10:53:30
211
原创 STM32 DMA控制器
DMA是一种嵌入式系统中用于高效传输数 据的机制,提供在外设与存储器、存储器和存储器之间的高速数据传输, 它允许外设中的数据直接传输到系统存储器,而无需通过CPU的干预。启用FIFO后,每个数据流都有一个独立的4字(16字节)FIFO,源地址 中的数据不会之间由DMA搬运到目标地址中,而是先将数据存入FIFO中, 当到达设置的阈值时DMA会从FIFO中将数据取出放入存储器。在直接模式下,不允许源与目标的传输数据宽度不同,二者必须相等,并由 DMA_SxCR中的PSIZE位定义,MSIZE位无效。
2026-06-04 20:04:37
198
原创 STM32 串口控制器
串口通讯是一 种在设备之间传输数据的常见方式,特别是在嵌入式系统、传感器、单片机和一些外围设备之间。例如将控制器配置为8位数据位,那么实际能传输的有效数据位为7位,有一 位被用做了校验位。串口硬件流控是一种通过物理信号线控制数据传输的机制,用于协调两个设备间的数据流动,以防止数据丢失或溢出。如果使能RTS流控制 (RTSE=1),只要 USART 接收器准备好接收新数据, 便会将 nRTS变为有效(连接到低电平)。除了1位停止位,还可以配置为0.5位1.5位或2位停止 位。二、数据收发流程与状态。
2026-05-29 11:08:59
202
原创 STM32 时钟控制器
RC振荡器的优点是成本低,启动速度要比晶振快,但是精度没有晶振/陶瓷谐振器高。阻容器件运行过程中会产生热量,导致温度有变化,这些器件受温度影响比较大,导致最终输出的波形不准。
2026-05-28 19:54:53
232
原创 电阻、电容、电感、二极管、三极管、mos管
电阻控制电流大小、分压。电容存储电荷、滤波、耦合交流信号、定时。电感存储磁能、滤波(尤其高频)、在开关电源中储能/释能。二极管整流(交流变直流)、检波、稳压(齐纳二极管)、保护(防止反接、过压)。三极管 (BJT)电流放大、开关(控制大电流)。MOS管 (MOSFET)电压控制开关(高效、低驱动电流)、功率放大、数字逻辑电路的基本单元。
2026-05-25 09:11:24
345
原创 Linux线程
生产者 - 消费者模型:消费者等待数据,生产者生产后唤醒消费者。机制,解决 “线程需等待条件成立才能执行” 的场景,(值 = 0),支持线程 / 进程间同步。,加锁和解锁必须成对出现,防止死锁。控制共享资源的并发访问数量,可实现。,是否取消由目标线程决定。(2)设置线程可取消状态。,需用同步工具保证安全。(3)设置线程取消类型。功能:向指定线程发送。
2026-04-28 15:58:10
409
原创 Linux进程
进程是操作系统资源分配与调度的最小基本单位,是程序的一次动态执行过程。内核为每个运行程序创建task_struct 结构体(PCB 进程控制块),存储进程状态、PID、内存指针、资源占用等全部信息。进程正常结束 / 异常崩溃时,内核会回收 task_struct,避免资源泄漏。
2026-04-28 15:43:29
381
原创 数据结构之栈与队列
栈(Stack)是一种特殊的线性表,其特殊性在于只能在固定的一端进行操作。这种限制使得栈呈现出""(LIFO, Last In First Out)的逻辑特性。
2026-03-17 19:13:05
238
原创 数据结构之线性表
线性结构的特点是:(1)存在唯一的一个被称作“第一个”的数据元素(2)存在唯一的一个被称作“最后一个”的数据元素(3)除第一个之外,集合中的每个元素均只有一个前驱(4)除最后一个以外,集合中的每个数据元素均只有一个后继。
2026-03-12 20:37:56
247
原创 C语言之函数
包含函数的具体实现,定义了函数的行为。格式:返回类型 函数名(参数类型 参数名, ...) {// 函数体,执行的操作return返回值;// 如果有返回值示例:
2026-03-03 20:36:35
407
原创 C语言之聚合数据类型
在 C 语言中,结构体(struct)是一种用户自定义的数据类型,用于将不同类型的数据组合在一起。1. 基本结构体定义最简单的结构体定义形式是直接定义结构体类型并声明变量。int x;int y;// 定义一个 Point 类型的变量 p12. 同时定义和声明可以在定义结构体时同时声明变量,减少代码量。int width;int height;// 定义了两个 Rectangle 类型的变量 rect1 和 rect23. 结构体类型别名。
2026-03-03 19:27:44
432
原创 C语言输入输出函数
格式符类似于 printf(),如 %d(整型),%f(浮点型),相对于 gets(),fgets() 更安全,因为它允许指定读取的最大字符数,从而。换行符('\n')会被作为字符串的一部分存储在 str 中(如果读取到的话),并在字符串末尾自动添加终止符 \0。常见的格式符有 %d(整型),%f(浮点数),%s(字符串)返回成功读取的项数(即成功匹配的格式说明符的个数),如果出现输入错误或达到文件结束,则返回。scanf 的输入非常严格,如果输入的格式与预期的格式不匹配,可能会导致读取失败。
2026-02-27 18:55:25
593
原创 C语言之变量
限制作用域:通过将变量声明为 static,可以限制其作用域到当前文件或函数,避免名称冲突,性能优化:静态变量的值在多次调用之间保持不变,有助于避免不必要的初始化,从而提高性能。3、变量遮蔽:当在一个嵌套的作用域中定义了与外部作用域中同名的变量时,内部变量会遮。从程序开始运行时创建,直到程序结束时销毁,即使函数已经退出,静态变量的值也不。变量必须先定义后使用或先声明后使用,定义时指定名字和类型,也可以指定初值。如“A”<“Z”;如“A”<“a”。需要注意变量的实际作用域,以避免意外的结果。
2026-02-27 18:46:48
336
原创 关于一些Git的学习
复制下来之后,在自己的电脑的目标路径右键打开 git bash,输入下载的命令。git status :显示工作目录和暂存区的状态,告诉你哪些文件被修改过、哪些文件未跟踪等。git bash 中,输入以下命令,将本地仓库与远程仓库进行关联。:将暂存区中的更改提交到本地仓库,并附带一条提交信息描述所。此时,我们需要将该文件夹变成本地仓库,并将其上传到。:列出所有的本地分支,并标记当前所在的分支。:取消暂存指定文件,但保留文件内容的修改。:创建一个新的提交来撤销指定的提交。:将本地分支的更新推送到远程仓库。
2026-02-26 17:13:32
403
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅