Skip to content

About

Nooploop TOF Sense-P空循环TOF Sense-P在STM32H723VGT6上的示例代码

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

STM32H7 机器人 TOF 激光测距传感器高频驱动框架

本项目包含专为 STM32H7 系列高性能微控制器(Cortex-M7 内核)打造的 TOF (Time-of-Flight) 激光测距传感器底层驱动。针对对机器人底盘姿态估计、云台测距跟随等对数据刷新率与实时性有极高要求的系统,本驱动采用 USART 空闲中断 + DMA 双缓冲乒乓机制,并彻底解决了 H7 架构下 DMA 与 CPU 之间的 D-Cache 一致性问题,确保 921600 bps 高波特率下数据帧的零丢失与极低延迟。

⚙️ 硬件接口与通信配置

本驱动基于 NLink_Frame0 协议(完全兼容 Nooploop TOFSense 等主流高频单点测距雷达)。

外设/引脚 详细分配 物理层配置参数
USART2_TX PD5 (复用 AF7) 波特率: 921600 bps
数据位: 8位
停止位: 1位
校验位: 无
USART2_RX PD6 (复用 AF7)
DMA_RX DMA1_Stream0 开启双缓冲模式 (DBM),方向:外设到内存 (Byte对齐)
DMA_TX DMA1_Stream1 方向:内存到外设 (备用或用于传感器参数配置)

✨ 核心技术特性 (H7 架构专属优化)

  1. 硬件级双重缓冲 (Ping-Pong Buffer) 通过直接操作 DMA 控制寄存器(DMA_SxCR_DBM / DMA_SxCR_CT),构建了包含两个 32 字节容量的 tof_rx_buf[2][32] 接收矩阵。在中断回调 USER_USART2_RxHandler 中,程序会根据当前 DMA 指针自动读取空闲区数据,实现“外设持续写入”与“CPU 同步解析”的完全异步化。

  2. Cortex-M7 D-Cache 一致性安全保障 H7 芯片开启 Cache 后,DMA 搬运到 SRAM 的数据可能不会立即被 CPU 核心感知。本驱动做了两层硬核防护:

    • 内存对齐:使用 ALIGN_32BYTES 宏强制接收数组以 32 字节边界对齐(匹配一条 Cache Line 大小),防止相邻变量被误刷新。
    • 高速缓存失效:在数据解析函数 tof_to_data() 的最前置节点,严格调用 SCB_InvalidateDCache_by_Addr(),强制 CPU 丢弃内部陈旧缓存,直接从 RAM 读取最新雷达数据。
  3. 系统存储保护 (MPU) 预留 main.c 中已集成完整的 MPU_Config() 框架,为后续更复杂的非 Cache 区域划分或外设共享内存配置提供了安全底层。


📁 核心代码模块解析

├── main.c             # 系统入口:包含 MPU 初始化、HSE/PLL 极速时钟树配置 (1VCOWIDE) 及外设拉起
├── bsp_tof.c / .h     # 核心驱动:DMA 多缓冲手动配置、NLink_Frame0 校验和解析及全局缓存解算
├── usart.c / .h       # 串口底层:USART2 波特率、AF 映射及 RX/TX 的 DMA 流通道绑定配置
├── dma.c / .h         # DMA 时钟使能与总全局中断优先级抢占配置
└── stm32h7xx_it.c     # 中断路由:精简的中断服务函数,USART2 发生空闲中断时触发帧级调度分发

About

Nooploop TOF Sense-P空循环TOF Sense-P在STM32H723VGT6上的示例代码

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages