
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
定时器的本质是"硬件计数器 + 时间量化 + 超时触发"。实现一个定时器需要三步:① 用固定频率时钟驱动计数器自增,把时间量化成数字;② 设定一个未来时间(比较值)作为超时目标;③ 当计数器达到设定值时触发动作。核心思想是"在固定时钟周期下,计数器的数值就是时间",计数过程即延时,到达设定值即超时触发。基础定时器(如 TIM6/TIM7)的核心是一个 16 位硬件计数器,在固定时钟驱动下按固定节奏

本示例要演示"串口纯 DMA 收发"的完整闭环:上位机发数据 → DMA 接收满 N 字节 → 触发回调 → 业务处理 → DMA 一次性回传 → 回传完成再切回接收。要掌握的核心技能是:DMA 通道初始化、两个接口、以及收/发完成回调函数的实现,并由此形成对其他外设 DMA 模式的触类旁通。CubeMX 配置串口 DMA 的关键点:① 必须勾选 SWD 否则芯片锁死;② 串口配 115200/9

DMA(Direct Memory Access,直接存储器访问),用来提供外设和存储器之间、或者存储器和存储器之间的高速数据传输。无需 CPU 干预,数据就能通过 DMA 快速移动,从而节省 CPU 资源去做其他操作。通俗地说,DMA 就是单片机内部的一个外设控制器,它拥有独立的地址总线和控制逻辑。在 CPU 授权之后,它可以接管总线控制权,在不占用 CPU 资源的情况下,自动把数据从一个地址(

解决的核心问题是:在不修改库源代码的前提下,让用户能用自己的同名函数"覆盖"库里的默认实现。它把一个函数或变量标记为"弱符号",链接时如果有同名"强符号"(普通定义),强符号优先;如果没有,弱符号才被采用。这样就避免了"重复定义"错误,实现"默认实现 + 用户可覆盖"的灵活设计。是ARM GCC 的扩展语法(本质是 GCC 的扩展),用于给函数或变量设置一个"弱引用"或"弱定义"的属性。允许你在不

SPI 中断模式就是"硬件搬运 + 中断通知":CPU 调用中断版 HAL 函数后立刻返回去做别的事,SPI 硬件在后台完成收发,完成后通过 NVIC 产生中断。每个外设中断在 NVIC 里都有一个固定的中断号,SPI1 的中断号是(定义在的IRQn_Type枚举里)。要使能中断,需要依次打开SPI 控制寄存器 CR2 的中断使能位和NVIC 对应通道,两者缺一不可;CubeMX 勾选中断后生成的

I2C 的中断收发接口是,专用于带内部存储映射的 I2C 设备(EEPROM、传感器),会自动在起始条件后发送内部地址MemAddress。它们是非阻塞的,调用后立即返回,真正传输在后台由中断完成,完成后回调。注意DevAddress必须是左移一位后的 8 位地址(AT24C02 的 7 位地址 0x50,传 0xA0)。工程上把状态、缓冲区、操作类型、用户回调封装进结构体,中断回调只更新状态和标

USART 是片上外设,其中断直接接入 NVIC(不经过 EXTI),USART1 中断号为 37。是非阻塞接口:它们并不真正收发数据,而是保存缓冲区指针和长度、使能对应的 USART 中断位(接收 RXNEIE、发送 TXEIE),然后立即返回;真正的数据搬运在中断服务程序(USART1_IRQHandler → HAL_UART_IRQHandler)中逐字节完成,收发完成后分别调用。启用中断

生活中的中断:你正在写作业(主程序),突然电话响了(中断事件),你放下笔去接电话(中断服务程序 ISR),接完继续写作业(返回主程序)。专业定义:中断是计算机系统中,由硬件或软件触发的、暂停当前正在执行的主程序流程,转而执行特定处理程序(中断服务例程,ISR)以响应紧急事件,并在完成后自动恢复原程序执行的机制。暂停、响应、恢复。中断是硬件或软件触发的机制:CPU 暂停当前主程序,转去执行中断服务程

本节的目标是把 SPI 主机阻塞模式的操作,封装成一套完整的 W25Q64 Flash 驱动,功能包括读 ID、读状态、写使能/禁止、扇区擦除、整片擦除、页编程、跨页写入、等待写完成、读数据。驱动开发本质上是把「芯片手册里的时序和指令」翻译成「一组可复用的函数」。在多从机共享 SPI 总线的场景下,同一时刻只能有一个从机被选中,靠片选 CS/NSS 区分;未选中的从机 CS 必须保持高电平,否则会

掌握这些排序方法后,不妨尝试在项目中实践。如果有其他高效算法,期待你的分享!!!








