自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 FreeRTOS事件组

一文带你学会freertos事件组,包括事件组的操作、相关函数(创建、删除、等待、同步点),讲解等待事件和同步点的示例,再讲解内部的实现源码(包括结构体、等待事件、设置事件)

2025-06-12 22:53:12 350

原创 FreeRTOS互斥量

一文带你学会freertos互斥量,内容包括使用场景、相关的函数(动态/静态创建、删除、释放、获取)、常规使用流程以及和二进制信号量的对比。讲解递归锁的内容和相关的解决方案,包括互斥量的内部实现机制的讲解

2025-06-11 22:01:54 522

原创 FreeRTOS信号量

一文带你学会freeRTOS信号量,包括信号量的类似(计数型和二进制),信号量的give和take操作,和队列的比较以及相关的创建删除等函数,包括示例讲解。同时深入内部源码实现机制

2025-06-10 22:36:23 1078

原创 FreeRTOS队列

一文带你学会freertos队列,从函数调用到深入到源码刨析,内部实现机制;队列操作遵循阻塞机制的讲解

2025-06-09 22:41:14 1085

原创 FreeRTOS同步和互斥

嵌入式开发中的 FreeRTOS,说明了同步(任务先后顺序依赖)与互斥(任务资源独占)的概念、实现方式及潜在问题。通过模拟报表书写、上厕所、共享串口打印等场景,深入剖析了忙等待、锁机制、任务优先级抢占等现象,并对比展示了队列、事件组、信号量、互斥量与任务通知等同步/互斥机制的特点和适用场景

2025-06-08 20:28:22 871

原创 FreeRTOS任务之深入篇

万字带你深入理解FreeRTOS任务机制,包括tick中断、任务状态(运行、就绪、阻塞、暂停、删除)以及任务状态转换,空闲任务及其钩子函数,任务调度算法(可强占调度和合作调度、时间片轮转、空闲任务得让步策略),以及任务切换时得保存现场操作、任务的切换等内容

2025-06-07 23:06:25 976 2

原创 FreeRTOS任务之使用篇

带你认识任务的相关操作函数以及基础知识,学会简单使用FreeRTOS中的任务。以FreeRTOS为基础,深入讲解任务的创建与删除方式,涵盖动态创建(xTaskCreate)与静态创建(xTaskCreateStatic)的使用差异、参数说明及其与任务控制块(TCB)的关系。同时,通过实际示例分析任务函数的编写规范、任务优先级的设置、栈空间的管理等关键点,帮助开发者在项目中正确高效地使用FreeRTOS任务机制

2025-05-30 01:50:54 823

原创 FreeRTOS引入篇

本文主要介绍了单片机程序与RTOS的区别、CPU架构的概念及其重要性,以及堆和栈在程序中的使用。单片机程序类似于单任务服务员,一次只能处理一个任务,而RTOS则像多任务服务员,能够同时处理多个任务,提高系统效率。理解CPU架构对于RTOS的移植、性能优化和驱动开发至关重要。堆是动态分配内存的数据结构,由程序员手动管理,而栈是后进先出的数据结构,由操作系统自动管理,用于存储任务的局部变量和函数参数。堆和栈在内存分配和管理上有不同的特点和用途。

2025-05-19 01:00:00 902

原创 stm32之FLASH

本文系统梳理了STM32F1系列微控制器中的FLASH存储器结构及其工作机制,重点介绍了程序存储器、系统存储器和选项字节的布局与作用。结合官方手册,详细解析了FPEC(FLASH程序/擦除控制器)的寄存器配置,阐述了写保护机制、页擦除流程和编程操作的具体步骤。通过图示与流程讲解,帮助读者深入理解FLASH的擦写原理及其在嵌入式开发中的实际应用

2025-05-14 21:19:56 1474

原创 stm32之PWR、WDG

这篇文档系统介绍了 STM32 的 PWR(电源控制)模块,内容涵盖电源框图、PVD(可编程电压检测器)配置、中断处理流程,以及睡眠、停止、待机三种低功耗模式的原理与实现方法。通过图文并茂的方式,详细讲解了各模式下的寄存器配置要点,并配有完整的示例代码,便于读者快速上手与应用。适用于需要优化系统功耗管理的 STM32 嵌入式开发者,具有较强的实用价值与参考意义。

2025-05-13 21:13:40 1195 1

原创 stm32之BKP备份寄存器和RTC时钟

讲解Unix时间戳、UTC/GMT的概念,以及时间戳转换的相关函数;讲解BKP使用的注意事项和功能;讲解RTC时钟的主要特性、访问流程、典型应用、详细结构、基本结构以及硬件电路涉及还有使用注意事项。通过实验代码来理解BKP和RTC。

2025-05-12 20:39:21 1166

原创 stm32之SPI

详细讲解SPI通信协议:硬件电路、移位、时序基本单位;同时讲解W25Q64的硬件电路、结构,包括写操作和读操作的注意时间。讲解stm32f103的SPI外设:基本结构、传输时序图(主模式全双工连续传输和非连续传输),与软件模拟SPI的波形对比,还有介绍SPI的相关结构体和API函数,带你学会SPI。

2025-05-11 20:41:00 1282 17

原创 stm32之IIC

万字讲解关于stm32f103的IIC,包括I2C的硬件电路、时序基本单位、时序实例。讲解IIC通信外设的框图、基本结构、主机发送和接收。同时讲解IIC相关的结构体和API函数,并采用硬件方式去使用MPU6050

2025-05-10 22:46:37 1367 2

原创 stm32之USART

万文讲解stm32f103串口,讲解USART的基本结构体、数据帧、波特率发上去、数据包(包括数据模式、HEX数据包、文本数据包、以及数据包的接收),同时讲解USART的相关结构体和API函数,实现串口发送+接收吗,HEX数据包收发以及文本数据包收发。此外还涉及FLYMcu串口下载和SRLINK Utility。

2025-05-09 22:24:28 1275 13

原创 stm32之DMA

详细讲解关于stm32f103的DMA直接存储器存取,包括存储器映射、DMA框图、基本结构体介绍、DMA请求内容、数据宽度与对齐、DMA如何进行工作(数据转运和ADC扫描模式)。以及介绍DMA相关的结构体和api函数,包括DMA转运和AD多通道讲解。

2025-05-08 21:36:11 1835 10

原创 stm32之ADC

对ADC模拟-数字转换器进行详细讲解,包括逐次逼近型ADC、ADC基本结构、输入通道、转化模式、触发控制、数据对齐、转换时间、校准、ADC外围电路。同时对ADC的相关结构体和API函数进行介绍,以及ADC单通道和多通道实验

2025-05-07 20:44:30 1976 15

原创 stm32之输出比较OC和输入捕获IC

2万字带你学习stm32输出比较OC、输入捕获IC以及其相关的结构体和API介绍。详细讲解PWM的基本结构体以及易混淆点,同时包括呼吸灯、舵机、直流电机、TIM编码器接口的实验,文章附带相关的实验代码下载。

2025-05-06 21:38:26 1194 18

原创 stm32之TIM定时中断详解

万文带你认识stm32f103的TIM定时器,涵盖通用、普通、高级定时器各部分介绍(触发控制单位、输入捕获单元、输出比较单元、CNT计数器、ARR、PSC灯),并讲解基本使用:包括结构体介绍和基本常用函数介绍。

2025-05-05 15:58:40 2998 24

原创 no source: Error: command-line: #564: cannot open embedded assembler output file

Keil出现“no source“: Error: command-line: #564: cannot open

2025-04-28 23:49:15 400 3

原创 stm32之EXIT外部中断详解

一文带你详细认识中断的处理流程和如何编写中断代码。从stm32f103入手详细讲解中断路径上的3个部件以及中断的流程(AFIO、EXIT、NVIC、CPU)。通过旋转编码器的代码来进一步认识exit外部中断,同时对exit的相关结构体和函数进行讲解。

2025-04-26 23:07:08 1877 16

原创 stm32之GPIO函数详解和上机实验

stm32标准库中,关于GPIO全部函数的介绍以及GPIO结构的讲解。全文提供源代码下载:LED和蜂鸣器介绍和上机实验;光敏传感器的使用介绍:如何通过光敏传感器去控制蜂鸣器;OLED的使用。

2025-04-24 00:14:08 1383 14

原创 stm32之GPIO输入输出讲解

GPIO引脚可配置为数字输入或输出,也支持模拟信号输入。其工作模式包括浮空输入、上拉输入、下拉输入、模拟输入以及不同的输出模式,如开漏输出、推挽输出等。GPIO通过内置的寄存器控制引脚状态,提供了高效的电平控制功能。对于输入模式,GPIO能读取外部信号的电平,用于按钮、传感器等的状态监测;而在输出模式下,GPIO可以驱动LED、蜂鸣器等外部设备。

2025-04-23 03:15:00 1084 10

原创 搭建stm32工程

手把手教你搭建stm32f103ct86工程,内附芯片支持包和工程文件

2025-04-22 01:45:00 2038 20

原创 SPI_Master驱动框架深入分析和实现

本文详细探讨了SPI(Serial Peripheral Interface)传输过程中的数据流动,从基本的SPI传输结构体到实际的传输过程。首先,回顾了SPI传输流程,并以写操作为例,详细介绍了在Linux内核中如何通过SPI控制器进行数据传输。接着,文章分析了SPI控制器驱动中的两种传输方法:旧的transfer方法和新的transfer_one方法,重点剖析了内核中如何利用spi_message和spi_transfer完成数据传输。通过对spidev_write、spidev_sync_write等

2025-04-21 07:00:00 883

原创 SPI接口DAC设备驱动与应用程序开发

本文介绍了基于SPI接口与DAC设备进行通信的驱动与应用程序开发。首先,详细阐述了SPI通信协议在DAC(数字-模拟转换器)中的应用,涉及了SPI设备的基本配置与测试方法。通过内核提供的spidev驱动程序,开发者能够与SPI设备交互,实现数据读取与发送功能。文章深入解析了代码实现,包括如何通过ioctl命令读取设备状态、发送消息和读取数据等操作。同时,还介绍了如何为DAC设备编写驱动程序和设备树配置,确保系统能够与硬件正确通信。

2025-04-14 22:36:04 1289 1

原创 spidev.c:SPI设备驱动的核心实现逻辑

本文以Linux内核的spidev驱动为例,解析SPI设备驱动实现逻辑。spidev_probe通过动态分配spidev_data结构体管理设备号、锁及SPI设备实例,利用device_create创建设备节点。数据传输通过spi_sync同步接口实现用户态与内核缓冲区的交互,spidev_ioctl支持模式、速率等参数的动态配置。

2025-04-09 10:06:31 1065

原创 SPI传输与驱动框架的实现

本文详细介绍了SPI(Serial Peripheral Interface)通信的基本概念、接口函数和驱动框架的实现方法。通过分析内核中spi.h头文件中的简易函数与复杂函数,展示了如何实现同步、异步的SPI数据传输,包括常用的spi_write、spi_read、spi_sync等函数的使用。同时,讲解了spi_transfer结构体在传输中的作用,以及如何通过多个传输任务构建一个完整的SPI事务。通过示例代码,展示了如何在Linux驱动中实现SPI设备的数据传输和如何根据设备树配置SPI控制器与设备。

2025-04-08 00:39:39 1204

原创 SPI通信协议与Linux设备驱动框架解析

SPI是一种高速全双工的同步串行通信协议,采用主从架构,通过MOSI、MISO、SCK和CS四线实现设备间数据交互。其核心特性由时钟极性(CPOL)和相位(CPHA)定义四种工作模式,模式0(上升沿采样)和模式3(高电平初始+上升沿采样)最为常用。在Linux驱动框架中,SPI子系统由控制器(spi_master)和设备(spi_device)构成,驱动层通过spi_driver实现设备绑定与数据传输,关键函数包括旧版transfer(消息队列)和新版transfer_one(单次传输优化)

2025-03-24 08:00:00 1123

原创 24年总结 -- 共赴心中所向往的未来

我又回来了,前阵子忙着期末考试的东西,也是快半个月没更新了,刚好前几天报名了博客之星的评选,也很幸运的入围了,也借此机会来回顾一下关于2024年的个人成长、创作经历等。

2025-01-20 10:46:49 2133 43

原创 PCIe设备MSI/MSI-X中断源码分析与驱动编写

本文详细分析了PCIe设备中断分配过程,特别是如何通过内核代码启用MSI-X和MSI中断。介绍了如何在设备驱动程序中使用pci_alloc_irq_vectors分配中断向量,包括MSI-X、MSI和传统的INTx中断机制。探讨了如何通过__pci_enable_msix_range和__pci_enable_msi_range为设备分配中断向量,处理中断亲和性设置,并确保设备没有重复的中断请求。通过描述如何通过msi_domain_alloc_irqs和irq_domain分配硬件IRQ以及如何激活IRQ

2025-01-06 00:09:36 1280 4

原创 GICv2与GICv3中断架构对比与LPI中断机制分析

本文章深入分析了ARM架构中通用中断控制器(GIC)的两种版本:GICv2与GICv3,重点讨论了其在中断管理方面的不同特点和进化。首先介绍了GICv2中断类型,包括软件触发中断(SGI)、私有外设中断(PPI)和共享外设中断(SPI),并讨论了传统的物理信号线路传递方式。接着,详细分析了GICv3的创新,尤其是如何通过MSI(方式触发SPI中断,并引入了LPI机制,显著提高了虚拟化环境中的中断处理能力。文中还阐述了LPI的触发方式及其在GICv3中如何通过寄存器与表格查找机制实现低延迟的中断传递。

2025-01-02 00:17:21 2479 26

原创 RK3399 PCIe 中断处理与映射分析(INTx中断机制源码分析)

本篇文章深入分析了 RK3399 平台上 PCIe 中断处理与映射的全过程,结合相关文档和开发板资料,详细介绍了 PCIe 设备、控制器和中断管理系统的工作机制。文从 PCIe 设备发生中断的流程入手,逐步分析了 PCIe 控制器如何将中断信号传递到 GIC(通用中断控制器)以及最终处理的过程。探讨了设备树中中断定义与映射的作用,特别是如何通过 interrupt-map 和 interrupt-map-mask 在设备树中为 PCIe 设备分配中断号。此外,还分析了如何通过创建 IRQ 域以及相应的中断控

2024-12-30 13:53:51 1553 30

原创 MSI-X中断机制、MSI/MSI-X操作流程详解

MSI和MSI-X是PCI/PCIe设备中用于替代传统中断机制(INTx)的两种高效中断机制。与传统方法依赖物理引脚不同,MSI/MSI-X通过发送消息触发中断,具备更高的灵活性和性能。MSI支持最多32个中断向量,适用于一般设备;而MSI-X支持多达2048个中断向量,适合复杂、高性能设备。MSI-X将中断信息存储在设备内存空间中的MSI-X Table和Pending Bit Array中,并允许每个中断向量拥有独立的地址和数据,显著提升并行处理能力。

2024-12-29 00:22:23 1897 34

原创 PCI/PCIe设备INTx中断机制和MSI中断机制

本文档详细解析了PCI/PCIe设备的中断机制及其实现原理,重点阐述了INTx、MSI和MSI-X三种中断方式的差异及特性。通过结合硬件示意图和寄存器配置,对INTx传统中断的物理引脚通信、PCIe通过TLP模拟INTx的兼容方式、以及MSI基于消息传递机制的高效中断实现进行了深入剖析。此外,还详解了MSI/MSI-X中断在PCI配置空间中Capability结构的作用及具体配置方法,解释了中断地址与数据的分配、控制寄存器的意义、以及中断向量的扩展功能。

2024-12-26 00:08:47 2117 36

原创 PCIe_Host驱动分析_设备枚举

本文通过深入分析 pcie-rockchip.c 文件,详细解读了 Rockchip PCIe 驱动中关键的资源管理与设备配置过程。文章首先回顾了 PCIe 控制器的资源解析机制,包括设备树中地址资源的解析与映射,将资源信息记录到链表中的具体实现。接着,对 PCIe 配置空间的基本概念和 BAR(Base Address Register)的结构与用途进行了说明,分析了如何通过配置空间确定设备所需的内存或 I/O 地址范围及分配策略。此外,文章重点剖析了 PCIe 总线扫描和设备初始化的核心代码

2024-12-23 22:48:37 1508 33

原创 PCIe_Host驱动分析_地址映射

本文针对RK3399开发板的PCIe控制器驱动程序,解析了其实现原理和流程。首先,通过设备树文件获取控制器寄存器和Region 0的配置空间地址,确保CPU能够访问PCIe设备的配置空间。随后,从设备树中解析ranges属性,获取Region 1~32的CPU和PCIe地址空间基地址,用于内存和I/O资源的映射。驱动程序通过配置寄存器,实现CPU地址空间与PCIe地址空间的映射关系,确保CPU能够通过转换后的PCIe地址(addr_pcie)直接与外设交互。

2024-12-21 22:15:37 1437 34

原创 深入解析PCIe地址空间与寄存器机制:从地址映射到TLP生成的完整流程

本文详细解析了PCIe控制器的地址空间划分、寄存器配置及其在主机与PCIe设备之间通信中的核心作用。从两个主要的地址空间(内部寄存器和远程设备)入手,分析了其地址映射机制和分区设计,并解释了如何通过Region映射访问外部设备的配置空间和内存空间。结合寄存器功能,本文介绍了如何通过地址转换寄存器和描述符寄存器生成TLP,实现主机对PCIe设备的精确操作。此外,还通过具体示例演示了配置空间和内存/IO空间的读写流程,以及如何通过寄存器配置实现对PCIe设备的访问和控制,帮助读者全面理解PCIe通信的底层实现。

2024-12-19 00:02:39 2734 35

原创 PCI驱动与AXI总线框架解析(RK3399)

本文介绍了PCI驱动框架和AXI总线在嵌入式系统中的应用。PCI驱动分为PCI Host(Root Complex, RC)和PCIe设备两个部分,RC通过设备树和平台总线完成初始化,扫描挂载的PCIe设备,生成pci_dev结构体;PCIe设备通过匹配pci_driver完成初始化,使其正常工作并与RC通信。此外,文章详细描述了PCIe设备资源分配中BAR寄存器的配置过程。对于AXI总线,以RK3399为例,解析了CPU与外设之间的通信,通过五大通道和丰富的信号集实现高效的数据传输。

2024-12-16 00:10:10 1606 45

原创 PCIe的三种路由方式

PCIe协议定义了三种路由方式:基于ID的路由、基于地址的路由和隐式路由,用于实现设备间高效的数据传输。基于ID的路由通过设备的Bus、Device、Function号标识目标,用于设备配置和响应。基于地址的路由依赖分配的内存或I/O地址,用于数据读写。隐式路由则无需明确目标设备,通过消息类型或特定字段确定传输路径。PCIe桥和设备根据配置阶段的分配信息决定报文的转发或接收,确保网络的高效通信。这些路由方式相辅相成,构建了灵活的PCIe通信机制,支持多设备协同与高性能数据交互。

2024-12-13 00:00:33 1582 44

原创 深入解析PCIe设备事务层与配置过程

本文通过剖析PCI Express(PCIe)协议的事务层(TLP)结构和配置过程,详细阐述了PCIe系统硬件结构及数据传输的关键机制。重点关注Posted与Non-Posted事务的差异、TLP格式中各字段的功能,以及PCIe设备的配置空间访问逻辑。文章介绍了设备地址映射机制及BAR寄存器在PCIe地址解析中的作用,并通过具体示例解析了多级桥接设备的枚举和配置过程。这一系统性探讨有助于理解PCIe数据传输效率优化及复杂网络架构的实现方法,为从事硬件设计和系统集成的专业人士提供了实用参考。

2024-12-11 00:07:08 1306 35

空空如也

空空如也

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

TA关注的人

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