# safety-rope-detection-node **Repository Path**: Herbert9527/safety-rope-detection-node ## Basic Information - **Project Name**: safety-rope-detection-node - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-11 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Based on the code map, I can see this is a STM8S-based safety rope detection node project. Let me provide a comprehensive README: # 安全绳检测节点 (Safety Rope Detection Node) ## 项目简介 本项目是一个基于 STM8S 微控制器的安全绳检测节点,使用 LSM6DSR 惯性测量单元(IMU)来监测安全绳的状态,并通过 RS485 通信接口向上位机传输数据。 ## 硬件平台 - **微控制器**: STM8S 系列 - **传感器**: LSM6DSR (三轴加速度计 + 三轴陀螺仪) - **通信接口**: RS485 (USART) ## 项目结构 ``` ├── STM8S_StdPeriph_Driver/ # STM8S 标准外设驱动库 │ ├── inc/ # 头文件 │ └── src/ # 源文件 ├── user/ # 用户应用程序 │ ├── main.c # 主程序入口 │ ├── lsm6dsr.c/h # LSM6DSR 传感器驱动 │ ├── usart485.c/h # RS485 通信驱动 │ ├── ring_buffer.c/h # 环形缓冲区实现 │ ├── timer_delay.c/h # 定时器延时 │ ├── stm8s_it.c/h # 中断处理 │ └── stm8s_conf.h # 配置文件 └── safetynode.eww # IAR EW 项目文件 ``` ## 功能特性 ### 传感器 (LSM6DSR) - 三轴加速度计数据读取 - 三轴陀螺仪数据读取 - 支持中断方式读取寄存器 - 可配置的采样率和量程 ### 通信 (USART485) - RS485 差分通信 - 支持数据包收发 - 环形缓冲区管理 - 空闲检测中断 ### 其他 - GPIO 读取节点 ID - 系统时钟初始化 - 调试信息输出 ## 驱动说明 ### LSM6DSR 传感器驱动 ```c // 初始化传感器 void LSM6DSR_Init(uint8_t addr7bit); // 配置传感器参数 int LSM6DSR_Config(uint8_t gyro_odr, LSM6DSR_GyroFS_t gyro_fs, uint8_t accel_odr, LSM6DSR_AccelFS_t accel_fs); // 读取加速度原始数据 int LSM6DSR_ReadAccelRaw(int16_t *ax, int16_t *ay, int16_t *az); // 读取陀螺仪原始数据 int LSM6DSR_ReadGyroRaw(int16_t *gx, int16_t *gy, int16_t *gz); ``` ### USART485 通信驱动 ```c // 初始化串口 void USART485_Init(uint32_t baud); // 发送数据 int USART485_SendBuf(const uint8_t *buf, uint16_t len); // 读取数据 uint16_t USART485_ReadBytes(uint8_t *buf, uint16_t len); ``` ### 环形缓冲区 ```c // 初始化 void RingBuffer_Init(RingBuffer_t *rb); // 放入数据 uint8_t RingBuffer_Put(RingBuffer_t *rb, uint8_t data); // 取出数据 uint8_t RingBuffer_Get(RingBuffer_t *rb, uint8_t *data); ``` ## 使用说明 1. **硬件连接**: 根据原理图连接 LSM6DSR 传感器和 RS485 通信模块 2. **编译**: 使用 IAR Embedded Workbench for STM8 打开 `safetynode.eww` 项目文件 3. **配置**: 根据需要修改 `stm8s_conf.h` 中的配置参数 4. **下载**: 将编译好的固件下载到 STM8S 微控制器 ## 通信协议 节点通过 RS485 向上位机发送 IMU 数据,数据包格式如下: - 节点 ID - 加速度数据 (X, Y, Z) - 陀螺仪数据 (X, Y, Z) ## 依赖 - STM8S 标准外设库 - IAR Embedded Workbench for STM8 或其他兼容编译器 ## 许可证 本项目仅供学习和研究使用。