# stm32-simple-drivers **Repository Path**: MagicBude/stm32-simple-drivers ## Basic Information - **Project Name**: stm32-simple-drivers - **Description**: 🚀 简单易用的 STM32 外设驱动库 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-28 - **Last Updated**: 2026-02-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32 Simple Drivers 🚀 **简单易用的 STM32 外设驱动库** - 开箱即用,专为快速开发设计 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Platform](https://img.shields.io/badge/Platform-STM32-blue.svg)](https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html) [![Language](https://img.shields.io/badge/Language-C-green.svg)](https://en.wikipedia.org/wiki/C_(programming_language)) ## ✨ 特点 - ✅ **开箱即用** - 复制文件夹,添加到工程,立即使用 - ✅ **简单直接** - 清晰的 API,详细的注释,初学者友好 - ✅ **不冲突** - 使用 `bsp_` 前缀,不与 CubeMX 生成的代码冲突 - ✅ **多实例支持** - 同时使用多个 UART/SPI/I2C 实例 - ✅ **自动配置** - 自动配置引脚和时钟,减少配置工作 - ✅ **配置灵活** - 提供默认配置,可通过配置文件定制 - ✅ **完整示例** - 包含 LED、按键、UART 等常用示例 - ✅ **详细文档** - 每个外设都有独立的 README 和 API 文档 ## 📦 支持的平台 ### MCU 系列 | 系列 | 状态 | 说明 | |------|------|------| | STM32F1 | ✅ 已支持 | 完整支持 | | STM32F4 | 🚧 开发中 | 计划中 | | STM32F7 | 📅 计划中 | 未来支持 | | STM32H7 | 📅 计划中 | 未来支持 | ### 开发板 | 开发板 | MCU | 状态 | 说明 | |--------|-----|------|------| | 正点原子 MiniSTM32 V4.5 | STM32F103RCT6 | ✅ 已支持 | 完整示例工程 | ## 🔧 支持的外设 ### BSP 层(板级支持包) | 外设 | 状态 | 功能 | |------|------|------| | GPIO | ✅ | 输入/输出/中断/防抖 | | UART | ✅ | 多实例/printf/环形缓冲/重映射 | | SPI | ✅ | 主从模式/全双工/重映射 | | I2C | ✅ | 硬件I2C + 软件模拟/多实例 | | TIMER | ✅ | 定时中断/微秒精度/回调 | | PWM | ✅ | 多通道/1Hz-1MHz/动态调整 | | ADC | ✅ | 单/多通道/温度传感器 | | DAC | ✅ | 双通道/波形生成 | | IWDG | ✅ | 独立看门狗/1-26000ms | | WWDG | ✅ | 窗口看门狗/早期唤醒 | | RTC | ✅ | 实时时钟/闹钟/时间戳 | | FLASH | ✅ | 内部Flash读写/CRC校验 | | CAN | ✅ | CAN1/2/标准扩展帧/过滤器 | | DMA | ✅ | DMA1/2/内存外设传输 | | PWR | ✅ | 睡眠/停止/待机模式 | | USB | 📅 | USB CDC/HID(计划中) | ### Devices 层(设备驱动) | 类别 | 设备 | 状态 | |------|------|------| | 显示 | OLED (SSD1306), LCD (ST7735) | 📅 | | 传感器 | DHT11, DS18B20, MPU6050 | 📅 | | 无线 | NRF24L01, ESP8266, HC05 | 📅 | | 存储 | W25Q128, AT24C02, SD Card | 📅 | | 电机 | 步进电机, 舵机, 直流电机 | 📅 | **图例:** ✅ 已完成 | 🚧 开发中 | 📅 计划中 ## 🚀 快速开始 ### 1. 复制驱动文件 将需要的外设驱动复制到你的项目: ```bash # 复制 GPIO 驱动 cp -r stm32f1/BSP/GPIO/ my_project/BSP/ cp -r stm32f1/BSP/Common/ my_project/BSP/ # 复制 UART 驱动 cp -r stm32f1/BSP/UART/ my_project/BSP/ ``` ### 2. 添加到 Keil 工程 在 Keil MDK 中: 1. **添加 Include Path**: - `./BSP/GPIO` - `./BSP/UART` - `./BSP/Common` 2. **添加源文件**: - `BSP/GPIO/bsp_gpio.c` - `BSP/UART/bsp_uart.c` - `BSP/Common/bsp_error.c` ### 3. 修改配置(可选) 根据需求修改配置文件: ```c // BSP/GPIO/bsp_gpio_config.h #define BSP_GPIO_MAX_HANDLES 16 #define BSP_GPIO_USE_INTERRUPT 1 // BSP/UART/bsp_uart_config.h #define BSP_UART_RX_BUF_SIZE 256 #define BSP_UART_USE_PRINTF 1 ``` ### 4. 使用驱动 ```c #include "BSP/GPIO/bsp_gpio.h" #include "BSP/UART/bsp_uart.h" int main(void) { HAL_Init(); SystemClock_Config(); // 初始化 LED (PA5) bsp_gpio_handle_t *led = bsp_gpio_init(GPIOA, GPIO_PIN_5, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL); // 初始化 UART1 (115200 bps) bsp_uart_handle_t *uart = bsp_uart_init(1, 115200); while (1) { bsp_gpio_toggle(led); bsp_uart_send_string(uart, "Hello World!\r\n"); HAL_Delay(1000); } } ``` ## 📖 文档 - [快速开始指南](docs/01_Getting_Started.md) - [架构设计](docs/00_Architecture.md) - [API 参考](docs/02_API_Reference.md) - [移植指南](docs/03_Porting_Guide.md) - [常见问题](docs/FAQ.md) ## 📁 目录结构 ``` stm32-simple-drivers/ ├── stm32f1/ # STM32F1 系列 │ ├── BSP/ # 外设驱动 │ │ ├── GPIO/ # GPIO 驱动 │ │ ├── UART/ # UART 驱动 │ │ ├── SPI/ # SPI 驱动 │ │ ├── I2C/ # I2C 驱动 │ │ ├── ... # 其他外设 │ │ └── Common/ # 通用定义 │ ├── Devices/ # 设备驱动 │ │ ├── Display/ # 显示设备 │ │ ├── Sensor/ # 传感器 │ │ ├── Wireless/ # 无线模块 │ │ ├── Storage/ # 存储设备 │ │ └── Motor/ # 电机驱动 │ └── Examples/ # 示例代码 │ ├── 01_GPIO_Blink/ │ ├── 02_GPIO_Button/ │ ├── 03_UART_Echo/ │ └── ... ├── projects/ # 开发板工程 │ └── alientek_ministm32_v4.5/ # 正点原子 MiniSTM32 ├── docs/ # 文档 ├── tools/ # 工具脚本 ├── README.md # 本文件 └── LICENSE # MIT 许可证 ``` ## 💡 示例代码 ### LED 闪烁 ```c #include "BSP/GPIO/bsp_gpio.h" bsp_gpio_handle_t *led; int main(void) { HAL_Init(); SystemClock_Config(); // 初始化 LED (PA5) led = bsp_gpio_init(GPIOA, GPIO_PIN_5, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL); while (1) { bsp_gpio_toggle(led); HAL_Delay(500); } } ``` ### UART 通信(多实例) ```c #include "BSP/UART/bsp_uart.h" bsp_uart_handle_t *uart1; bsp_uart_handle_t *uart2; int main(void) { HAL_Init(); SystemClock_Config(); // 初始化 USART1 (115200 bps) uart1 = bsp_uart_init(1, 115200); // 初始化 USART2 (9600 bps) uart2 = bsp_uart_init(2, 9600); // 使用 printf bsp_uart_printf(uart1, "Counter: %d\r\n", 123); while (1) { // 从 UART1 接收,转发到 UART2 if (bsp_uart_is_rx_ready(uart1)) { uint8_t data[32]; uint16_t len = sizeof(data); if (bsp_uart_receive(uart1, data, &len) == BSP_ERR_OK) { bsp_uart_send(uart2, data, len); } } } } ``` 更多示例请查看 [stm32f1/Examples/](stm32f1/Examples/) 目录。 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📄 许可证 本项目采用 [MIT 许可证](LICENSE)。 ## 🙏 致谢 - ST Microelectronics - STM32 HAL 库 - 所有贡献者 ## 📮 联系方式 - 项目主页:[GitHub](https://github.com/your-username/stm32-simple-drivers) - 问题反馈:[Issues](https://github.com/your-username/stm32-simple-drivers/issues) --- **Made with ❤️ for STM32 developers**