From 9945741ae426b2108b0a059d0d9003164e4f9797 Mon Sep 17 00:00:00 2001 From: Natsume1710 <162396185+Natsume1710@users.noreply.github.com> Date: Mon, 16 Jun 2025 15:22:01 +0800 Subject: [PATCH] Update README.md --- 03-驱动开发与外设编程/README.md | 118 ++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/03-驱动开发与外设编程/README.md b/03-驱动开发与外设编程/README.md index 8b13789..4cbb7ec 100644 --- a/03-驱动开发与外设编程/README.md +++ b/03-驱动开发与外设编程/README.md @@ -1 +1,119 @@ + +# 🟠 第三层:驱动开发与外设编程 + +本模块深入解析嵌入式驱动开发技术,涵盖从寄存器级编程到 HAL 库、CubeMX 工具链,适合用于裸机或 RTOS 下的外设控制与驱动编写。 + +--- + +## 🔹 寄存器级开发 + +### 📌 地址映射与寄存器偏移 +- 每个外设通过唯一地址在 MCU 的地址空间中访问(基地址 + 偏移) +```c +#define GPIOA_BASE 0x40020000 +#define GPIOA_MODER (*(volatile uint32_t *)(GPIOA_BASE + 0x00)) +GPIOA_MODER |= (1 << 10); // 设置某引脚为输出 +``` + +### 📌 位操作技巧 +- 设置位:`reg |= (1 << bit);` +- 清除位:`reg &= ~(1 << bit);` +- 取反位:`reg ^= (1 << bit);` +- 检查位:`if (reg & (1 << bit)) {...}` + +--- + +## 🔹 通用外设驱动 + +### 📌 GPIO(输入/输出、中断) +- 输入/输出模式配置 +- 上拉 / 下拉电阻配置 +- 外部中断配置(EXTI) +```c +HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); +``` + +### 📌 UART / USART +- 串口通信,常用于调试或模块通信 +- 中断模式 / DMA 模式提升性能 +```c +HAL_UART_Transmit(&huart2, data, len, 100); +HAL_UART_Receive_IT(&huart2, recv_buf, 10); +``` + +### 📌 SPI / I2C +- SPI:全双工同步串行通信,适用于高速模块(屏幕/Flash) +- I2C:半双工协议,适用于传感器、EEPROM 等 +```c +HAL_SPI_Transmit(&hspi1, data, len, 100); +HAL_I2C_Master_Transmit(&hi2c1, addr, data, len, 100); +``` + +### 📌 ADC / DAC +- ADC:模拟电压转换为数字值(0~3.3V => 0~4095) +- DAC:将数字值输出为模拟电压 +```c +HAL_ADC_Start(&hadc1); +uint16_t val = HAL_ADC_GetValue(&hadc1); +``` + +### 📌 定时器 / PWM +- 定时器用于中断周期控制、计时器任务 +- PWM 用于控制舵机、电机、亮度等 +```c +HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); +``` + +### 📌 RTC 实时时钟 +- 用于日期、时间管理、低功耗唤醒等 +```c +RTC_TimeTypeDef sTime = {0}; +HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN); +``` + +--- + +## 🔹 复杂外设支持 + +### 📌 DMA 控制器 +- 用于内存与外设、内存与内存间的高速传输,释放 CPU 占用 +```c +HAL_UART_Receive_DMA(&huart1, rx_buf, 64); +``` + +### 📌 看门狗(独立 / 窗口) +- 防止程序跑飞,需定期喂狗 +```c +HAL_IWDG_Refresh(&hiwdg); +``` + +### 📌 CAN / USB / SDIO / Ethernet +- CAN:车载、工业通信 +- USB:支持 HID/UVC/CDC 等类驱动 +- SDIO:用于 SD 卡高速读写 +- Ethernet:支持 LwIP 等协议栈 + +### 📌 LCD / 触摸屏驱动 +- 并口 / SPI 屏幕驱动初始化、画图、字体渲染 +- 触摸屏需结合电容/电阻触控芯片解析数据 + +--- + +## 🔹 开发库 & 工具链 + +### 📌 STM32 HAL / LL +- HAL:高级封装,适合快速开发 +- LL(Low Layer):更接近底层,更灵活控制 + +### 📌 STM32CubeMX +- 图形化配置引脚 / 时钟 / 中间件 +- 自动生成初始化代码 + +### 📌 CMSIS 标准接口 +- ARM 官方 Cortex-M 接口标准 +- 提供中断向量、系统初始化、寄存器访问等统一方式 + +--- + +📁 每类外设将在 `examples/` 中提供完整裸机与 HAL 驱动示例。