# STM32F **Repository Path**: caraba/stm32 ## Basic Information - **Project Name**: STM32F - **Description**: YUYU STM32 开发库是一个基于 STM32F103C8T6 的嵌入式开发库,提供常用外设驱动、算法和丰富的示例代码,帮助开发者快速上手 STM32 开发。 - **Primary Language**: C - **License**: AGPL-3.0 - **Default Branch**: YUYU - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2026-06-25 - **Last Updated**: 2026-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YUYU STM32 开发库 ## 项目简介 YUYU STM32 开发库是一个基于 STM32F103C8T6 的嵌入式开发库,提供常用外设驱动、算法库和丰富的示例代码,帮助开发者快速上手 STM32 开发。 本库采用分层架构设计,从底层驱动到上层应用提供完整的软件栈,支持GPIO、USART、ADC、PWM、TIMER、I2C、SPI等常用外设,并封装了多种传感器和执行器的驱动代码。 ### 特性 - 完整的 STM32F103 标准外设驱动库 - 模块化的设备驱动层,易于扩展 - 常用算法库(PID、滤波、姿态解算等) - 13+ 个示例项目,涵盖各种应用场景 - 完善的引脚定义和硬件连接说明 <<<<<<< HEAD - 详细的文档和使用说明 - 优化的 PWM 电机驱动,支持 17kHz 频率设置 ======= - 详细的注释和使用文档 >>>>>>> 3131d8999627912878170ef1d3c4d3a7020cd453 ## 目录结构 ``` stm32/ ├── YUYU_Library_Driver/ # 核心驱动层 - 底层外设驱动 │ ├── ADC.c/h # ADC转换驱动 │ ├── PWM.c/h # PWM电机驱动 │ ├── System_Delay.c/h # 系统延时函数 │ ├── Timer.c/h # 定时器配置 │ └── YUYU_Library_Header.h # 驱动层统一头文件 │ ├── YUYU_Library_Device/ # 设备驱动层 - 外设模块驱动 │ ├── Buzzer.c/h # 蜂鸣器驱动 │ ├── Detect_LED.c/h # LED指示灯驱动 │ ├── Encoder.c/h # 编码器驱动(左右编码器/旋转编码器) │ ├── HC-SR04.c/h # 超声波测距驱动 │ ├── Key.c/h # 按键驱动 │ ├── MPU6050.c/h # 六轴传感器驱动 │ ├── OLED.c/h # OLED显示屏驱动 │ ├── Sensor.c/h # 光敏传感器驱动 │ ├── Serial.c/h # 串口通信驱动 │ ├── MQ-2.c/h # 烟雾气体传感器驱动 │ ├── W25Qxx.c/h # Flash存储驱动 │ └── OLED_Font.h # OLED字库 │ ├── YUYU_Library_Arithmetic/ # 算法库 │ ├── Filter.c/h # 滤波算法 │ ├── Gyroscope.c/h # 陀螺仪姿态解算 │ ├── PID.c/h # PID控制算法(增量式/位置式) │ ├── State_Button.c/h # 状态机按键处理 │ └── Track.c/h # 红外循线算法 │ ├── YUYU_Example/ # 示例代码目录 │ ├── 10.UART/ # 串口通信示例 │ ├── 11.MQ-2/ # 烟雾传感器示例 │ ├── 12.W25Qxx/ # Flash存储示例 │ └── 14.HC-04/ # 超声波示例(更多示例...) │ ├── Device/ # 开发工具和驱动 │ ├── PCtoLCD2002/ # LCD字模提取工具 │ └── STLink/ # ST-Link调试器驱动 │ ├── Reference_File/ # 参考资料 ├── Notice.txt # 详细使用说明 ├── README.md # 项目说明 └── LICENSE # 许可证文件 ``` ## 软硬件架构 ``` ┌─────────────────────────────────────────┐ │ 应用层 (User Code) │ ├─────────────────────────────────────────┤ │ 设备驱动层 (Device) │ │ OLED │ Serial │ Encoder │ MPU6050 │ ├─────────────────────────────────────────┤ │ 核心驱动层 (Driver) │ │ ADC │ PWM │ Timer │ Delay │ ├─────────────────────────────────────────┤ │ STM32标准外设库 (HAL/LL) │ ├─────────────────────────────────────────┤ │ 硬件层 (STM32F103) │ └─────────────────────────────────────────┘ ``` ## 核心驱动说明 ### 1. ADC驱动 (YUYU_Library_Driver/ADC.c) ```c void ADC_Conversion_Init(void); // 初始化ADC转换 uint16_t ADC_Get_Data(void); // 获取ADC原始值 float ADC_Get_Voltage(void); // 获取电压值(V) void ADC_Show_Voltage(void); // 串口打印电压值 ``` ### 2. PWM电机驱动 (YUYU_Library_Driver/PWM.c) ```c void PWM_Init(void); // 初始化PWM void Motor_SetSpeed(uint8_t motor, int16_t set_PWM); // 设置电机速度 // motor: 0-左电机, 1-右电机 // set_PWM: -7200 ~ 7200 (负值为反转) ``` ### 3. 延时函数 (YUYU_Library_Driver/System_Delay.c) ```c void Delay_us(uint32_t xus); // 微秒延时 void Delay_ms(uint32_t xms); // 毫秒延时 void Delay_s(uint32_t xs); // 秒延时 ``` ### 4. 定时器驱动 (YUYU_Library_Driver/Timer.c) ```c void Timer_Init(void); // 通用定时器初始化 void Serial_Init(void); // 串口初始化 ``` ## 设备驱动说明 ### 串口通信 (Serial.c/h) ```c void Serial_Send_Byte(uint8_t Byte); // 发送单个字节 void Serial_Send_Array(uint8_t *Array, uint16_t Length); // 发送数组 void Serial_Send_String(char *String); // 发送字符串 void Serial_Send_Number(uint32_t Number, uint8_t Length); // 发送数字 void Serial_Printf(char *format, ...); // 格式化打印 uint8_t Serial_Get_RxData(void); // 获取接收数据 uint8_t Serial_Get_RxFlag(void); // 获取接收标志 ``` ### 按键检测 (Key.c/h) ```c void Key_Init(void); // 初始化按键 uint8_t Key_Scan(void); // 扫描按键 返回按下的键值 ``` ### 编码器 (Encoder.c/h) ```c void Encoder_Init(void); // 初始化编码器 void Left_Encoder_Init(void); // 左轮编码器 void Right_Encoder_Init(void); // 右轮编码器 void Revolve_Encoder_Init(void); // 旋转编码器 int16_t Left_Encoder_Get(void); // 获取左编码器值 int16_t Right_Encoder_Get(void); // 获取右编码器值 int16_t Revolve_Encoder_Get(void); // 获取旋转编码器值 ``` ### PID控制 (PID.c/h) ```c // 增量式PID void PID_INC_Init(void); void PID_INC_Algorithm(PID_Inc *PID); // 位置式PID void PID_POS_Init(void); void PID_POS_Algorithm(PID_Pos *PID); ``` ## 开发环境 | 配置项 | 说明 | |--------|------| | 目标芯片 | STM32F103C8T6 | | 系统时钟 | 72MHz | | 开发工具 | Keil MDK | | 调试器 | ST-Link | | 代码级别 | Thumb | ## 使用说明 ### 快速开始 1. **创建工程**:在Keil中新建工程,选择STM32F103C8芯片 2. **添加文件**:将 `YUYU_Library_Driver/`、`YUYU_Library_Device/`、`YUYU_Library_Arithmetic/` 目录添加到工程 3. **包含头文件**:在工程设置中添加头文件路径 4. **参考示例**:参考 `YUYU_Example/` 目录下的示例代码 ### 基本使用流程 ```c #include "YUYU_Library_Header.h" int main(void) { // 初始化系统 SystemInit(); // 初始化外设 Timer_Init(); Serial_Init(); PWM_Init(); Encoder_Init(); while(1) { // 主循环逻辑 // 获取编码器值 int16_t left_cnt = Left_Encoder_Get(); int16_t right_cnt = Right_Encoder_Get(); // 设置电机速度 Motor_SetSpeed(0, 3000); // 左电机正转 Motor_SetSpeed(1, 3000); // 右电机正转 Delay_ms(10); } } ``` ## 版本信息 <<<<<<< HEAD - **当前版本**: V1.1 - **发布日期**: 2026-04-05 ======= | 版本 | 日期 | 说明 | |------|------|------| | V1.0 | 2026-03-29 | 初始版本 | >>>>>>> 3131d8999627912878170ef1d3c4d3a7020cd453 ## 作者信息 - **作者**: YUYU - **创建日期**: 2025-06-12 - **邮箱**: 3255802655@qq.com ## 版权声明 © 2025-2026 YUYU 保留所有权利。 本库采用非商业用途许可证,仅供个人学习和研究、非商业性项目开发及教育机构教学用途使用。使用本库即表示同意免责声明。 详细信息请查看 [Notice.txt](Notice.txt) 文件。 ## 联系方式 - 邮箱: 3255802655@qq.com --- *感谢您的使用!*