1130 lines
30 KiB
Markdown
1130 lines
30 KiB
Markdown
# STM32硬件配置对比分析报告
|
||
|
||
## 文档信息
|
||
- **版本**: v1.0
|
||
- **日期**: 2026-03-25
|
||
- **项目**: E32-433TBH-SC
|
||
- **MCU**: STM32F103C8T6
|
||
|
||
---
|
||
|
||
## 1. 配置对比总览
|
||
|
||
### 1.1 当前配置(去UI化后)
|
||
|
||
| 功能模块 | 引脚 | 配置 | 说明 |
|
||
|---------|------|------|------|
|
||
| **LED指示灯** | | | |
|
||
| LED_TX | PA15 | GPIO_Output, SET | 发送指示灯 |
|
||
| LED_RX | PB6 | GPIO_Output, SET | 接收指示灯 |
|
||
| **433模块控制** | | | |
|
||
| RESET | PA3 | GPIO_Output, SET | 433模块复位 |
|
||
| M0 | PA7 | GPIO_Output, SET | 模式选择0 |
|
||
| M1 | PB0 | GPIO_Output, SET | 模式选择1 |
|
||
| AUX | PB1 | GPIO_Input, PULLUP | 辅助信号 |
|
||
| **433模块UART** | | | |
|
||
| UART1_TX | PA9 | USART1_TX | 433模块发送 |
|
||
| UART1_RX | PA10 | USART1_RX | 433模块接收 |
|
||
| **其他功能(已废弃)** | | | |
|
||
| BUZZER_PWM | PB3 | TIM2_CH2 PWM | 蜂鸣器(已删除) |
|
||
| KEY_UP | PB4 | GPIO_Input | 按键上(已删除) |
|
||
| USB_CTRL | PB5 | GPIO_Output | USB控制(已删除) |
|
||
| KEY_ENTER | PB7 | GPIO_Input | 按键确认(已删除) |
|
||
| KEY_DOWN | PB9 | GPIO_Input | 按键下(已删除) |
|
||
| **I2C(已废弃)** | | | |
|
||
| I2C2_SCL | PB10 | I2C_SCL | OLED时钟(已删除) |
|
||
| I2C2_SDA | PB11 | I2C_SDA | OLED数据(已删除) |
|
||
| **USB(已废弃)** | | | |
|
||
| USB_DM | PA11 | USB_DM | USB数据负(已删除) |
|
||
| USB_DP | PA12 | USB_DP | USB数据正(已删除) |
|
||
| **定时器(已废弃)** | | | |
|
||
| TIM2_CH2 | PB3 | PWM Generation | 蜂鸣器PWM(已删除) |
|
||
|
||
### 1.2 新配置需求
|
||
|
||
| 功能模块 | 引脚 | 配置 | 说明 |
|
||
|---------|------|------|------|
|
||
| **LED指示灯** | | | |
|
||
| LED_TX | PB9 | GPIO_Output | 发送指示灯 |
|
||
| LED_RX | PB3 | GPIO_Output | 接收指示灯 |
|
||
| **开关信号输入** | | | |
|
||
| MCU_DI1 | PB4 | GPIO_Input | 开关输入1 |
|
||
| MCU_DI2 | PB5 | GPIO_Input | 开关输入2 |
|
||
| MCU_DI3 | PB6 | GPIO_Input | 开关输入3 |
|
||
| MCU_DI4 | PB7 | GPIO_Input | 开关输入4 |
|
||
| **继电器控制** | | | |
|
||
| RL_Control | PA15 | GPIO_Output | 继电器控制输出 |
|
||
| **433模块控制** | | | |
|
||
| M0 | PA7 | GPIO_Output | 模式选择0 |
|
||
| M1 | PB0 | GPIO_Output | 模式选择1 |
|
||
| AUX | PB1 | GPIO_Input, PULLUP | 辅助信号 |
|
||
| RESET | PB2 | GPIO_Output | 433模块复位 |
|
||
| **433模块UART** | | | |
|
||
| UART1_TX | PA9 | USART1_TX | 433模块发送 |
|
||
| UART1_RX | PA10 | USART1_RX | 433模块接收 |
|
||
| **485通信** | | | |
|
||
| UART3_TX | PB10 | USART3_TX | 485发送 |
|
||
| UART3_RX | PB11 | USART3_RX | 485接收 |
|
||
| **W5500模块** | | | |
|
||
| W5500_RESET | PA8 | GPIO_Output | W5500复位 |
|
||
| W5500_MOSI | PB15 | SPI_MOSI | SPI数据输出 |
|
||
| W5500_MISO | PB14 | SPI_MISO | SPI数据输入 |
|
||
| W5500_SCLK | PB13 | SPI_SCK | SPI时钟 |
|
||
| W5500_CS | PB12 | SPI_CS | SPI片选 |
|
||
| **调试串口** | | | |
|
||
| UART2_TX | PA2 | USART2_TX | 调试发送 |
|
||
| UART2_RX | PA3 | USART2_RX | 调试接收 |
|
||
|
||
---
|
||
|
||
## 2. 配置差异分析
|
||
|
||
### 2.1 需要修改的配置
|
||
|
||
#### 2.1.1 LED指示灯引脚变更
|
||
|
||
| 信号 | 原引脚 | 新引脚 | 变更类型 |
|
||
|------|--------|--------|----------|
|
||
| LED_TX | PA15 | PB9 | 引脚变更 |
|
||
| LED_RX | PB6 | PB3 | 引脚变更 |
|
||
|
||
**影响范围**:
|
||
- `Core/Inc/main.h`: LED引脚宏定义
|
||
- `Core/Src/gpio.c`: LED引脚初始化
|
||
- `Core/Src/gpio.c`: LED控制函数(`gpio_led_tx_on/off`, `gpio_led_rx_on/off`)
|
||
|
||
**注意事项**:
|
||
- LED控制函数使用宏定义,只需更新宏定义即可,函数代码无需修改
|
||
- 确保新引脚未被其他功能占用
|
||
|
||
#### 2.1.2 433模块RESET引脚变更
|
||
|
||
| 信号 | 原引脚 | 新引脚 | 变更类型 |
|
||
|------|--------|--------|----------|
|
||
| RESET | PA3 | PB2 | 引脚变更 |
|
||
|
||
**影响范围**:
|
||
- `Core/Inc/main.h`: RESET引脚宏定义
|
||
- `Core/Src/gpio.c`: RESET引脚初始化
|
||
- `Driver_RF433/Src/rf433_hal.c`: RESET控制逻辑
|
||
|
||
**注意事项**:
|
||
- PA3原为RESET,现改为UART2_RX(调试串口)
|
||
- 需要确保RESET控制逻辑正确更新
|
||
|
||
#### 2.1.3 删除的功能模块
|
||
|
||
| 功能模块 | 原引脚 | 删除原因 |
|
||
|---------|--------|----------|
|
||
| BUZZER_PWM | PB3 | 蜂鸣器功能已废弃 |
|
||
| KEY_UP | PB4 | 按键功能已废弃 |
|
||
| USB_CTRL | PB5 | USB功能已废弃 |
|
||
| KEY_ENTER | PB7 | 按键功能已废弃 |
|
||
| KEY_DOWN | PB9 | 按键功能已废弃 |
|
||
| I2C2_SCL | PB10 | OLED显示已废弃 |
|
||
| I2C2_SDA | PB11 | OLED显示已废弃 |
|
||
| USB_DM | PA11 | USB功能已废弃 |
|
||
| USB_DP | PA12 | USB功能已废弃 |
|
||
| TIM2_CH2 | PB3 | 蜂鸣器PWM已废弃 |
|
||
|
||
**影响范围**:
|
||
- `project.ioc`: 删除相关外设配置
|
||
- `Core/Inc/main.h`: 删除相关引脚宏定义
|
||
- `Core/Src/gpio.c`: 删除相关引脚初始化
|
||
- `Core/Src/tim.c`: 删除TIM2配置
|
||
- `Core/Src/stm32f1xx_it.c`: 删除相关中断处理
|
||
|
||
**注意事项**:
|
||
- 这些功能已在去UI化过程中删除,无需额外处理
|
||
- 确保相关代码已完全清理
|
||
|
||
### 2.2 新增的配置
|
||
|
||
#### 2.2.1 开关信号输入
|
||
|
||
| 信号 | 引脚 | 配置 | 说明 |
|
||
|------|------|------|------|
|
||
| MCU_DI1 | PB4 | GPIO_Input | 开关输入1 |
|
||
| MCU_DI2 | PB5 | GPIO_Input | 开关输入2 |
|
||
| MCU_DI3 | PB6 | GPIO_Input | 开关输入3 |
|
||
| MCU_DI4 | PB7 | GPIO_Input | 开关输入4 |
|
||
|
||
**影响范围**:
|
||
- `project.ioc`: 新增GPIO输入配置
|
||
- `Core/Inc/main.h`: 新增引脚宏定义
|
||
- `Core/Src/gpio.c`: 新增引脚初始化
|
||
|
||
**注意事项**:
|
||
- 需要确定是否需要上拉/下拉电阻
|
||
- 需要确定是否需要中断功能
|
||
- 建议创建独立的GPIO控制模块
|
||
|
||
#### 2.2.2 继电器控制
|
||
|
||
| 信号 | 引脚 | 配置 | 说明 |
|
||
|------|------|------|------|
|
||
| RL_Control | PA15 | GPIO_Output | 继电器控制输出 |
|
||
|
||
**影响范围**:
|
||
- `project.ioc`: 新增GPIO输出配置
|
||
- `Core/Inc/main.h`: 新增引脚宏定义
|
||
- `Core/Src/gpio.c`: 新增引脚初始化
|
||
|
||
**注意事项**:
|
||
- PA15原为LED_TX,现改为继电器控制
|
||
- 需要创建继电器控制函数
|
||
- 建议创建独立的GPIO控制模块
|
||
|
||
#### 2.2.3 485通信(UART3)
|
||
|
||
| 信号 | 引脚 | 配置 | 说明 |
|
||
|------|------|------|------|
|
||
| UART3_TX | PB10 | USART3_TX | 485发送 |
|
||
| UART3_RX | PB11 | USART3_RX | 485接收 |
|
||
|
||
**影响范围**:
|
||
- `project.ioc`: 新增UART3配置
|
||
- `Core/Inc/usart.h`: 新增UART3句柄声明
|
||
- `Core/Src/usart.c`: 新增UART3初始化和MSP配置
|
||
- `Core/Src/stm32f1xx_it.c`: 新增UART3中断处理
|
||
|
||
**注意事项**:
|
||
- PB10/PB11原为I2C2_SCL/SDA,现改为UART3
|
||
- 需要创建独立的485通信模块
|
||
- 需要考虑485收发控制引脚(如果需要)
|
||
- 建议参考UART1的实现方式
|
||
|
||
#### 2.2.4 W5500模块(SPI)
|
||
|
||
| 信号 | 引脚 | 配置 | 说明 |
|
||
|------|------|------|------|
|
||
| W5500_RESET | PA8 | GPIO_Output | W5500复位 |
|
||
| W5500_MOSI | PB15 | SPI_MOSI | SPI数据输出 |
|
||
| W5500_MISO | PB14 | SPI_MISO | SPI数据输入 |
|
||
| W5500_SCLK | PB13 | SPI_SCK | SPI时钟 |
|
||
| W5500_CS | PB12 | SPI_CS | SPI片选 |
|
||
|
||
**影响范围**:
|
||
- `project.ioc`: 新增SPI配置
|
||
- `Core/Inc/main.h`: 新增引脚宏定义
|
||
- `Core/Src/gpio.c`: 新增RESET引脚初始化
|
||
- 新增SPI驱动文件(`spi.c/h`)
|
||
- 新增W5500驱动模块
|
||
|
||
**注意事项**:
|
||
- PA12原为USB_DP,现改为SPI_CS
|
||
- 需要创建独立的W5500驱动模块
|
||
- 需要考虑SPI通信参数(时钟频率、模式等)
|
||
- 建议参考STM32 HAL库的SPI示例
|
||
|
||
#### 2.2.5 调试串口(UART2)
|
||
|
||
| 信号 | 引脚 | 配置 | 说明 |
|
||
|------|------|------|------|
|
||
| UART2_TX | PA2 | USART2_TX | 调试发送 |
|
||
| UART2_RX | PA3 | USART2_RX | 调试接收 |
|
||
|
||
**影响范围**:
|
||
- `project.ioc`: 新增UART2配置
|
||
- `Core/Inc/usart.h`: 新增UART2句柄声明
|
||
- `Core/Src/usart.c`: 新增UART2初始化和MSP配置
|
||
- `Core/Src/stm32f1xx_it.c`: 新增UART2中断处理
|
||
|
||
**注意事项**:
|
||
- PA3原为RESET,现改为UART2_RX
|
||
- 需要创建独立的调试串口模块
|
||
- 建议使用printf重定向实现调试输出
|
||
- 建议参考UART1的实现方式
|
||
|
||
---
|
||
|
||
## 3. 引脚冲突分析
|
||
|
||
### 3.1 引脚使用冲突表
|
||
|
||
| 引脚 | 原功能 | 新功能 | 冲突状态 | 处理方式 |
|
||
|------|--------|--------|----------|----------|
|
||
| PA2 | 未使用 | UART2_TX | 无冲突 | 新增 |
|
||
| PA3 | RESET | UART2_RX | 冲突 | RESET迁移到PB2 |
|
||
| PA7 | M0 | M0 | 无冲突 | 保持不变 |
|
||
| PA8 | 未使用 | W5500_RESET | 无冲突 | 新增 |
|
||
| PA9 | UART1_TX | UART1_TX | 无冲突 | 保持不变 |
|
||
| PA10 | UART1_RX | UART1_RX | 无冲突 | 保持不变 |
|
||
| PA11 | USB_DM | 未使用 | 冲突 | USB功能删除 |
|
||
| PA12 | USB_DP | 未使用 | 冲突 | USB功能删除 |
|
||
| PA15 | LED_TX | RL_Control | 冲突 | LED_TX迁移到PB9 |
|
||
| PB0 | M1 | M1 | 无冲突 | 保持不变 |
|
||
| PB1 | AUX | AUX | 无冲突 | 保持不变 |
|
||
| PB2 | 未使用 | RESET | 无冲突 | 新增 |
|
||
| PB3 | BUZZER_PWM | LED_RX | 冲突 | 蜂鸣器功能删除 |
|
||
| PB4 | KEY_UP | MCU_DI1 | 冲突 | 按键功能删除 |
|
||
| PB5 | USB_CTRL | MCU_DI2 | 冲突 | USB功能删除 |
|
||
| PB6 | LED_RX | MCU_DI3 | 冲突 | LED_RX迁移到PB3 |
|
||
| PB7 | KEY_ENTER | MCU_DI4 | 冲突 | 按键功能删除 |
|
||
| PB9 | KEY_DOWN | LED_TX | 冲突 | 按键功能删除 |
|
||
| PB10 | I2C2_SCL | UART3_TX | 冲突 | I2C2功能删除 |
|
||
| PB11 | I2C2_SDA | UART3_RX | 冲突 | I2C2功能删除 |
|
||
| PB13 | 未使用 | W5500_SCLK | 无冲突 | 新增 |
|
||
| PB14 | 未使用 | W5500_MISO | 无冲突 | 新增 |
|
||
| PB15 | 未使用 | W5500_MOSI | 无冲突 | 新增 |
|
||
|
||
### 3.2 冲突处理总结
|
||
|
||
1. **已删除的功能**: USB、I2C2、按键、蜂鸣器等已在去UI化过程中删除,无需额外处理
|
||
2. **引脚迁移**:
|
||
- LED_TX: PA15 → PB9
|
||
- LED_RX: PB6 → PB3
|
||
- RESET: PA3 → PB2
|
||
3. **新增功能**: UART2、UART3、SPI、开关输入、继电器控制等需要新增配置
|
||
|
||
---
|
||
|
||
## 4. CubeMX配置修改指南
|
||
|
||
### 4.1 需要删除的配置
|
||
|
||
#### 4.1.1 删除外设
|
||
|
||
1. **USB**:
|
||
- 删除USB外设
|
||
- 删除USB_DEVICE中间件
|
||
- 删除USB相关中断
|
||
|
||
2. **I2C2**:
|
||
- 删除I2C2外设
|
||
- 删除I2C2相关引脚配置
|
||
|
||
3. **TIM2**:
|
||
- 删除TIM2外设
|
||
- 删除TIM2相关引脚配置
|
||
|
||
#### 4.1.2 删除引脚配置
|
||
|
||
删除以下引脚的GPIO配置:
|
||
- PB3: BUZZER_PWM
|
||
- PB4: KEY_UP
|
||
- PB5: USB_CTRL
|
||
- PB7: KEY_ENTER
|
||
- PB9: KEY_DOWN
|
||
- PB10: I2C2_SCL
|
||
- PB11: I2C2_SDA
|
||
- PA11: USB_DM
|
||
- PA12: USB_DP
|
||
|
||
### 4.2 需要修改的配置
|
||
|
||
#### 4.2.1 修改LED引脚
|
||
|
||
1. **LED_TX**:
|
||
- 原配置: PA15, GPIO_Output, GPIO_PIN_SET
|
||
- 新配置: PB9, GPIO_Output, GPIO_PIN_SET
|
||
|
||
2. **LED_RX**:
|
||
- 原配置: PB6, GPIO_Output, GPIO_PIN_SET
|
||
- 新配置: PB3, GPIO_Output, GPIO_PIN_SET
|
||
|
||
#### 4.2.2 修改RESET引脚
|
||
|
||
1. **RESET**:
|
||
- 原配置: PA3, GPIO_Output, GPIO_PIN_SET
|
||
- 新配置: PB2, GPIO_Output, GPIO_PIN_SET
|
||
|
||
### 4.3 需要新增的配置
|
||
|
||
#### 4.3.1 新增GPIO输入(开关信号)
|
||
|
||
1. **MCU_DI1**: PB4, GPIO_Input
|
||
2. **MCU_DI2**: PB5, GPIO_Input
|
||
3. **MCU_DI3**: PB6, GPIO_Input
|
||
4. **MCU_DI4**: PB7, GPIO_Input
|
||
|
||
**配置建议**:
|
||
- 根据硬件设计选择上拉或下拉
|
||
- 如果需要中断检测,配置为EXTI模式
|
||
|
||
#### 4.3.2 新增GPIO输出(继电器控制)
|
||
|
||
1. **RL_Control**: PA15, GPIO_Output, GPIO_PIN_RESET
|
||
|
||
**配置建议**:
|
||
- 初始状态根据硬件设计确定
|
||
- 建议使用GPIO_SPEED_FREQ_LOW
|
||
|
||
#### 4.3.3 新增UART2(调试串口)
|
||
|
||
1. **外设配置**:
|
||
- UART2
|
||
- 波特率: 115200(建议)
|
||
- 数据位: 8
|
||
- 停止位: 1
|
||
- 校验位: None
|
||
|
||
2. **引脚配置**:
|
||
- PA2: USART2_TX
|
||
- PA3: USART2_RX
|
||
|
||
3. **中断配置**:
|
||
- 启用UART2全局中断
|
||
- 优先级: 根据需求设置
|
||
|
||
#### 4.3.4 新增UART3(485通信)
|
||
|
||
1. **外设配置**:
|
||
- UART3
|
||
- 波特率: 根据485设备要求设置
|
||
- 数据位: 8
|
||
- 停止位: 1
|
||
- 校验位: 根据需求设置
|
||
|
||
2. **引脚配置**:
|
||
- PB10: USART3_TX
|
||
- PB11: USART3_RX
|
||
|
||
3. **中断配置**:
|
||
- 启用UART3全局中断
|
||
- 优先级: 根据需求设置
|
||
|
||
**注意事项**:
|
||
- 如果需要485收发控制,需要额外配置一个GPIO引脚
|
||
- 建议参考UART1的实现方式
|
||
|
||
#### 4.3.5 新增SPI(W5500模块)
|
||
|
||
1. **外设配置**:
|
||
- SPI2(建议使用SPI2,因为SPI1的引脚可能与其他功能冲突)
|
||
- 模式: Mode 0或Mode 3(根据W5500要求)
|
||
- 数据大小: 8 Bits
|
||
- 时钟极性: Low/High
|
||
- 时钟相位: 1 Edge/2 Edge
|
||
- 波特率: 根据W5500要求设置(建议18MHz或更低)
|
||
|
||
2. **引脚配置**:
|
||
- PB13: SPI2_SCK
|
||
- PB14: SPI2_MISO
|
||
- PB15: SPI2_MOSI
|
||
- PA12: GPIO_Output(片选)
|
||
|
||
3. **中断配置**:
|
||
- 根据需求启用SPI中断
|
||
|
||
**注意事项**:
|
||
- W5500的片选建议使用软件控制,不使用硬件NSS
|
||
- 需要额外配置RESET引脚(PA8)
|
||
|
||
---
|
||
|
||
## 5. 代码修改指南
|
||
|
||
### 5.1 保持代码结构不变的设计原则
|
||
|
||
为了确保引脚更换时驱动或应用层代码不需要修改,需要遵循以下设计原则:
|
||
|
||
#### 5.1.1 使用宏定义抽象硬件层
|
||
|
||
**原则**: 所有硬件相关的引脚、外设句柄等都应该使用宏定义,在应用层和驱动层只使用宏名称,不直接使用具体的引脚或外设名称。
|
||
|
||
**示例**:
|
||
|
||
```c
|
||
// main.h - 硬件抽象层
|
||
#define LED_TX_Pin GPIO_PIN_9
|
||
#define LED_TX_GPIO_Port GPIOB
|
||
|
||
#define LED_RX_Pin GPIO_PIN_3
|
||
#define LED_RX_GPIO_Port GPIOB
|
||
|
||
#define RESET_Pin GPIO_PIN_2
|
||
#define RESET_GPIO_Port GPIOB
|
||
|
||
// 应用层代码
|
||
void gpio_led_tx_on(void)
|
||
{
|
||
HAL_GPIO_WritePin(LED_TX_GPIO_Port, LED_TX_Pin, GPIO_PIN_RESET);
|
||
}
|
||
```
|
||
|
||
**优点**:
|
||
- 更改引脚时只需修改宏定义
|
||
- 应用层代码无需修改
|
||
- 提高代码可移植性
|
||
|
||
#### 5.1.2 创建独立的硬件抽象层(HAL)
|
||
|
||
**原则**: 为每个功能模块创建独立的硬件抽象层,将硬件相关的操作封装在独立的模块中。
|
||
|
||
**示例**:
|
||
|
||
```c
|
||
// gpio_hal.h - GPIO硬件抽象层
|
||
#ifndef __GPIO_HAL_H__
|
||
#define __GPIO_HAL_H__
|
||
|
||
#include "main.h"
|
||
|
||
// LED控制
|
||
void gpio_hal_led_tx_init(void);
|
||
void gpio_hal_led_tx_on(void);
|
||
void gpio_hal_led_tx_off(void);
|
||
void gpio_hal_led_rx_init(void);
|
||
void gpio_hal_led_rx_on(void);
|
||
void gpio_hal_led_rx_off(void);
|
||
|
||
// 继电器控制
|
||
void gpio_hal_relay_init(void);
|
||
void gpio_hal_relay_on(void);
|
||
void gpio_hal_relay_off(void);
|
||
|
||
// 开关输入
|
||
void gpio_hal_digital_input_init(void);
|
||
uint8_t gpio_hal_digital_input_read(uint8_t channel);
|
||
|
||
#endif
|
||
```
|
||
|
||
**优点**:
|
||
- 硬件相关操作集中管理
|
||
- 更改硬件时只需修改HAL层
|
||
- 应用层代码与硬件解耦
|
||
|
||
#### 5.1.3 使用回调函数机制
|
||
|
||
**原则**: 对于需要处理硬件事件的功能(如UART接收、GPIO中断等),使用回调函数机制,将硬件事件处理与业务逻辑分离。
|
||
|
||
**示例**:
|
||
|
||
```c
|
||
// uart_hal.h - UART硬件抽象层
|
||
#ifndef __UART_HAL_H__
|
||
#define __UART_HAL_H__
|
||
|
||
#include "main.h"
|
||
#include <stdint.h>
|
||
|
||
// UART接收回调函数类型
|
||
typedef void (*uart_rx_callback_t)(uint8_t *data, uint16_t length);
|
||
|
||
// UART初始化
|
||
void uart_hal_init(void);
|
||
|
||
// UART发送
|
||
void uart_hal_send(uint8_t *data, uint16_t length);
|
||
|
||
// 注册接收回调函数
|
||
void uart_hal_register_rx_callback(uart_rx_callback_t callback);
|
||
|
||
#endif
|
||
```
|
||
|
||
**优点**:
|
||
- 硬件事件处理与业务逻辑分离
|
||
- 更改硬件时只需修改HAL层
|
||
- 提高代码可维护性
|
||
|
||
### 5.2 需要修改的代码文件
|
||
|
||
#### 5.2.1 Core/Inc/main.h
|
||
|
||
**修改内容**:
|
||
|
||
```c
|
||
// 删除旧的引脚定义
|
||
// #define RESET_Pin GPIO_PIN_3
|
||
// #define RESET_GPIO_Port GPIOA
|
||
// #define LED_TX_Pin GPIO_PIN_15
|
||
// #define LED_TX_GPIO_Port GPIOA
|
||
// #define LED_RX_Pin GPIO_PIN_6
|
||
// #define LED_RX_GPIO_Port GPIOB
|
||
|
||
// 新增/修改引脚定义
|
||
#define RESET_Pin GPIO_PIN_2
|
||
#define RESET_GPIO_Port GPIOB
|
||
|
||
#define LED_TX_Pin GPIO_PIN_9
|
||
#define LED_TX_GPIO_Port GPIOB
|
||
|
||
#define LED_RX_Pin GPIO_PIN_3
|
||
#define LED_RX_GPIO_Port GPIOB
|
||
|
||
// 新增开关输入引脚定义
|
||
#define MCU_DI1_Pin GPIO_PIN_4
|
||
#define MCU_DI1_GPIO_Port GPIOB
|
||
|
||
#define MCU_DI2_Pin GPIO_PIN_5
|
||
#define MCU_DI2_GPIO_Port GPIOB
|
||
|
||
#define MCU_DI3_Pin GPIO_PIN_6
|
||
#define MCU_DI3_GPIO_Port GPIOB
|
||
|
||
#define MCU_DI4_Pin GPIO_PIN_7
|
||
#define MCU_DI4_GPIO_Port GPIOB
|
||
|
||
// 新增继电器控制引脚定义
|
||
#define RL_Control_Pin GPIO_PIN_15
|
||
#define RL_Control_GPIO_Port GPIOA
|
||
|
||
// 新增W5500相关引脚定义
|
||
#define W5500_RESET_Pin GPIO_PIN_8
|
||
#define W5500_RESET_GPIO_Port GPIOA
|
||
|
||
#define W5500_CS_Pin GPIO_PIN_12
|
||
#define W5500_CS_GPIO_Port GPIOB
|
||
```
|
||
|
||
**注意事项**:
|
||
- 使用宏定义,确保应用层代码无需修改
|
||
- 保持宏命名风格一致
|
||
|
||
#### 5.2.2 Core/Src/gpio.c
|
||
|
||
**修改内容**:
|
||
|
||
```c
|
||
void MX_GPIO_Init(void)
|
||
{
|
||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||
|
||
/* GPIO Ports Clock Enable */
|
||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||
|
||
/*Configure GPIO pin Output Level */
|
||
HAL_GPIO_WritePin(GPIOB, RESET_Pin|M1_Pin|LED_TX_Pin|RL_Control_Pin|W5500_CS_Pin, GPIO_PIN_SET);
|
||
HAL_GPIO_WritePin(GPIOA, M0_Pin|LED_RX_Pin|W5500_RESET_Pin, GPIO_PIN_SET);
|
||
|
||
/*Configure GPIO pins : RESET_Pin M1_Pin LED_TX_Pin RL_Control_Pin W5500_CS_Pin */
|
||
GPIO_InitStruct.Pin = RESET_Pin|M1_Pin|LED_TX_Pin|RL_Control_Pin|W5500_CS_Pin;
|
||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||
|
||
/*Configure GPIO pins : M0_Pin LED_RX_Pin W5500_RESET_Pin */
|
||
GPIO_InitStruct.Pin = M0_Pin|LED_RX_Pin|W5500_RESET_Pin;
|
||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||
|
||
/*Configure GPIO pin : AUX_Pin */
|
||
GPIO_InitStruct.Pin = AUX_Pin;
|
||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||
HAL_GPIO_Init(AUX_GPIO_Port, &GPIO_InitStruct);
|
||
|
||
/*Configure GPIO pins : MCU_DI1_Pin MCU_DI2_Pin MCU_DI3_Pin MCU_DI4_Pin */
|
||
GPIO_InitStruct.Pin = MCU_DI1_Pin|MCU_DI2_Pin|MCU_DI3_Pin|MCU_DI4_Pin;
|
||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||
GPIO_InitStruct.Pull = GPIO_NOPULL; // 根据硬件设计调整
|
||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||
}
|
||
```
|
||
|
||
**注意事项**:
|
||
- 使用宏定义,确保代码可读性
|
||
- 根据硬件设计调整上拉/下拉配置
|
||
|
||
#### 5.2.3 Core/Inc/usart.h
|
||
|
||
**修改内容**:
|
||
|
||
```c
|
||
extern UART_HandleTypeDef huart1;
|
||
extern UART_HandleTypeDef huart2; // 新增
|
||
extern UART_HandleTypeDef huart3; // 新增
|
||
|
||
void MX_USART1_UART_Init(void);
|
||
void MX_USART2_UART_Init(void); // 新增
|
||
void MX_USART3_UART_Init(void); // 新增
|
||
```
|
||
|
||
#### 5.2.4 Core/Src/usart.c
|
||
|
||
**修改内容**:
|
||
|
||
新增UART2和UART3的初始化函数和MSP配置函数,参考UART1的实现方式。
|
||
|
||
```c
|
||
void MX_USART2_UART_Init(void)
|
||
{
|
||
huart2.Instance = USART2;
|
||
huart2.Init.BaudRate = 115200;
|
||
huart2.Init.WordLength = UART_WORDLENGTH_8B;
|
||
huart2.Init.StopBits = UART_STOPBITS_1;
|
||
huart2.Init.Parity = UART_PARITY_NONE;
|
||
huart2.Init.Mode = UART_MODE_TX_RX;
|
||
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
|
||
if (HAL_UART_Init(&huart2) != HAL_OK)
|
||
{
|
||
Error_Handler();
|
||
}
|
||
}
|
||
|
||
void MX_USART3_UART_Init(void)
|
||
{
|
||
huart3.Instance = USART3;
|
||
huart3.Init.BaudRate = 9600; // 根据485设备要求调整
|
||
huart3.Init.WordLength = UART_WORDLENGTH_8B;
|
||
huart3.Init.StopBits = UART_STOPBITS_1;
|
||
huart3.Init.Parity = UART_PARITY_NONE;
|
||
huart3.Init.Mode = UART_MODE_TX_RX;
|
||
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
|
||
if (HAL_UART_Init(&huart3) != HAL_OK)
|
||
{
|
||
Error_Handler();
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 5.2.5 Driver_RF433/Src/rf433_hal.c
|
||
|
||
**修改内容**:
|
||
|
||
由于RESET引脚从PA3改为PB2,需要确保RESET控制逻辑使用正确的宏定义。
|
||
|
||
```c
|
||
// 确保使用宏定义
|
||
HAL_GPIO_WritePin(RESET_GPIO_Port, RESET_Pin, GPIO_PIN_RESET);
|
||
```
|
||
|
||
**注意事项**:
|
||
- 如果代码中直接使用了PA3,需要改为使用宏定义RESET_Pin
|
||
- 确保RESET控制逻辑正确
|
||
|
||
### 5.3 需要新增的代码文件
|
||
|
||
#### 5.3.1 新增SPI驱动文件
|
||
|
||
创建`Core/Inc/spi.h`和`Core/Src/spi.c`,用于W5500模块的SPI通信。
|
||
|
||
**spi.h**:
|
||
|
||
```c
|
||
#ifndef __SPI_H__
|
||
#define __SPI_H__
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#include "main.h"
|
||
|
||
extern SPI_HandleTypeDef hspi2;
|
||
|
||
void MX_SPI2_Init(void);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* __SPI_H__ */
|
||
```
|
||
|
||
**spi.c**:
|
||
|
||
```c
|
||
#include "spi.h"
|
||
|
||
SPI_HandleTypeDef hspi2;
|
||
|
||
void MX_SPI2_Init(void)
|
||
{
|
||
hspi2.Instance = SPI2;
|
||
hspi2.Init.Mode = SPI_MODE_MASTER;
|
||
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
|
||
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
|
||
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; // 根据W5500要求调整
|
||
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; // 根据W5500要求调整
|
||
hspi2.Init.NSS = SPI_NSS_SOFT;
|
||
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; // 根据W5500要求调整
|
||
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
|
||
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||
hspi2.Init.CRCPolynomial = 10;
|
||
if (HAL_SPI_Init(&hspi2) != HAL_OK)
|
||
{
|
||
Error_Handler();
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 5.3.2 新增W5500驱动模块
|
||
|
||
建议创建独立的W5500驱动模块,例如`Driver_W5500`目录,包含W5500的驱动代码。
|
||
|
||
#### 5.3.3 新增485通信模块
|
||
|
||
建议创建独立的485通信模块,例如`Driver_RS485`目录,包含485通信的驱动代码。
|
||
|
||
#### 5.3.4 新增GPIO控制模块
|
||
|
||
建议创建独立的GPIO控制模块,例如`Driver_GPIO`目录,包含开关输入和继电器控制的代码。
|
||
|
||
---
|
||
|
||
## 6. CubeMX配置步骤
|
||
|
||
### 6.1 删除旧配置
|
||
|
||
1. 打开`project.ioc`文件
|
||
2. 删除以下外设:
|
||
- USB
|
||
- USB_DEVICE
|
||
- I2C2
|
||
- TIM2
|
||
3. 删除以下引脚配置:
|
||
- PB3: BUZZER_PWM
|
||
- PB4: KEY_UP
|
||
- PB5: USB_CTRL
|
||
- PB7: KEY_ENTER
|
||
- PB9: KEY_DOWN
|
||
- PB10: I2C2_SCL
|
||
- PB11: I2C2_SDA
|
||
- PA11: USB_DM
|
||
- PA12: USB_DP
|
||
|
||
### 6.2 修改现有配置
|
||
|
||
1. **修改LED_TX引脚**:
|
||
- 删除PA15的LED_TX配置
|
||
- 配置PB9为GPIO_Output,命名为LED_TX
|
||
|
||
2. **修改LED_RX引脚**:
|
||
- 删除PB6的LED_RX配置
|
||
- 配置PB3为GPIO_Output,命名为LED_RX
|
||
|
||
3. **修改RESET引脚**:
|
||
- 删除PA3的RESET配置
|
||
- 配置PB2为GPIO_Output,命名为RESET
|
||
|
||
### 6.3 新增配置
|
||
|
||
1. **新增开关输入引脚**:
|
||
- 配置PB4为GPIO_Input,命名为MCU_DI1
|
||
- 配置PB5为GPIO_Input,命名为MCU_DI2
|
||
- 配置PB6为GPIO_Input,命名为MCU_DI3
|
||
- 配置PB7为GPIO_Input,命名为MCU_DI4
|
||
|
||
2. **新增继电器控制引脚**:
|
||
- 配置PA15为GPIO_Output,命名为RL_Control
|
||
|
||
3. **新增UART2(调试串口)**:
|
||
- 启用USART2
|
||
- 配置PA2为USART2_TX
|
||
- 配置PA3为USART2_RX
|
||
- 设置波特率为115200
|
||
- 启用UART2全局中断
|
||
|
||
4. **新增UART3(485通信)**:
|
||
- 启用USART3
|
||
- 配置PB10为USART3_TX
|
||
- 配置PB11为USART3_RX
|
||
- 设置波特率(根据485设备要求)
|
||
- 启用UART3全局中断
|
||
|
||
5. **新增SPI2(W5500模块)**:
|
||
- 启用SPI2
|
||
- 配置PB13为SPI2_SCK
|
||
- 配置PB14为SPI2_MISO
|
||
- 配置PB15为SPI2_MOSI
|
||
- 配置PA12为GPIO_Output,命名为W5500_CS
|
||
- 配置PA8为GPIO_Output,命名为W5500_RESET
|
||
- 设置SPI参数(根据W5500要求)
|
||
|
||
### 6.4 生成代码
|
||
|
||
1. 点击"GENERATE CODE"按钮
|
||
2. 等待代码生成完成
|
||
3. 检查生成的代码是否正确
|
||
|
||
---
|
||
|
||
## 7. 代码修改步骤
|
||
|
||
### 7.1 修改main.h
|
||
|
||
1. 打开`Core/Inc/main.h`
|
||
2. 删除旧的引脚定义
|
||
3. 新增/修改引脚定义
|
||
4. 保存文件
|
||
|
||
### 7.2 修改gpio.c
|
||
|
||
1. 打开`Core/Src/gpio.c`
|
||
2. 修改`MX_GPIO_Init()`函数
|
||
3. 更新LED控制函数(如果需要)
|
||
4. 保存文件
|
||
|
||
### 7.3 修改usart.h和usart.c
|
||
|
||
1. 打开`Core/Inc/usart.h`
|
||
2. 新增UART2和UART3的句柄声明
|
||
3. 新增UART2和UART3的初始化函数声明
|
||
4. 保存文件
|
||
|
||
5. 打开`Core/Src/usart.c`
|
||
6. 新增UART2和UART3的初始化函数
|
||
7. 新增UART2和UART3的MSP配置函数
|
||
8. 保存文件
|
||
|
||
### 7.4 修改rf433_hal.c
|
||
|
||
1. 打开`Driver_RF433/Src/rf433_hal.c`
|
||
2. 检查RESET控制逻辑
|
||
3. 确保使用宏定义而不是直接使用引脚
|
||
4. 保存文件
|
||
|
||
### 7.5 新增SPI驱动文件
|
||
|
||
1. 创建`Core/Inc/spi.h`
|
||
2. 创建`Core/Src/spi.c`
|
||
3. 实现SPI2初始化函数
|
||
4. 实现SPI2的MSP配置函数
|
||
5. 保存文件
|
||
|
||
### 7.6 新增W5500驱动模块
|
||
|
||
1. 创建`Driver_W5500`目录
|
||
2. 创建W5500驱动文件
|
||
3. 实现W5500初始化和通信函数
|
||
4. 保存文件
|
||
|
||
### 7.7 新增485通信模块
|
||
|
||
1. 创建`Driver_RS485`目录
|
||
2. 创建485通信驱动文件
|
||
3. 实现485通信函数
|
||
4. 保存文件
|
||
|
||
### 7.8 新增GPIO控制模块
|
||
|
||
1. 创建`Driver_GPIO`目录
|
||
2. 创建GPIO控制驱动文件
|
||
3. 实现开关输入和继电器控制函数
|
||
4. 保存文件
|
||
|
||
---
|
||
|
||
## 8. 编译和测试
|
||
|
||
### 8.1 编译项目
|
||
|
||
1. 打开项目
|
||
2. 清理项目(Clean)
|
||
3. 编译项目(Build)
|
||
4. 检查编译错误和警告
|
||
|
||
### 8.2 功能测试
|
||
|
||
1. **LED指示灯测试**:
|
||
- 测试LED_TX和LED_RX是否正常工作
|
||
- 检查引脚电平是否正确
|
||
|
||
2. **433模块测试**:
|
||
- 测试433模块的发送和接收功能
|
||
- 检查RESET、M0、M1、AUX引脚是否正常工作
|
||
|
||
3. **开关输入测试**:
|
||
- 测试MCU_DI1~MCU_DI4是否正常读取
|
||
- 检查引脚电平是否正确
|
||
|
||
4. **继电器控制测试**:
|
||
- 测试继电器控制是否正常工作
|
||
- 检查引脚电平是否正确
|
||
|
||
5. **485通信测试**:
|
||
- 测试UART3的发送和接收功能
|
||
- 检查通信是否正常
|
||
|
||
6. **W5500模块测试**:
|
||
- 测试W5500模块的初始化和通信功能
|
||
- 检查SPI通信是否正常
|
||
|
||
7. **调试串口测试**:
|
||
- 测试UART2的发送和接收功能
|
||
- 检查调试输出是否正常
|
||
|
||
---
|
||
|
||
## 9. 注意事项
|
||
|
||
### 9.1 硬件设计注意事项
|
||
|
||
1. **引脚冲突**:
|
||
- 确保所有引脚没有冲突
|
||
- 检查引脚是否被多个功能占用
|
||
|
||
2. **电气特性**:
|
||
- 确保引脚的电气特性符合要求
|
||
- 检查上拉/下拉电阻是否正确配置
|
||
|
||
3. **时钟配置**:
|
||
- 确保所有外设的时钟已正确配置
|
||
- 检查时钟频率是否符合要求
|
||
|
||
4. **中断优先级**:
|
||
- 合理设置中断优先级
|
||
- 避免中断优先级冲突
|
||
|
||
### 9.2 软件设计注意事项
|
||
|
||
1. **代码结构**:
|
||
- 保持代码结构清晰
|
||
- 使用模块化设计
|
||
|
||
2. **宏定义**:
|
||
- 使用宏定义抽象硬件层
|
||
- 避免在应用层直接使用硬件相关代码
|
||
|
||
3. **错误处理**:
|
||
- 添加适当的错误处理
|
||
- 确保系统稳定性
|
||
|
||
4. **代码复用**:
|
||
- 尽量复用现有代码
|
||
- 避免重复代码
|
||
|
||
### 9.3 测试注意事项
|
||
|
||
1. **功能测试**:
|
||
- 测试所有功能是否正常工作
|
||
- 检查边界条件
|
||
|
||
2. **性能测试**:
|
||
- 测试系统性能是否满足要求
|
||
- 检查资源使用情况
|
||
|
||
3. **稳定性测试**:
|
||
- 进行长时间运行测试
|
||
- 检查系统稳定性
|
||
|
||
---
|
||
|
||
## 10. 总结
|
||
|
||
### 10.1 配置变更总结
|
||
|
||
| 变更类型 | 数量 | 说明 |
|
||
|---------|------|------|
|
||
| 删除的配置 | 11 | USB、I2C2、TIM2、按键、蜂鸣器等 |
|
||
| 修改的配置 | 3 | LED_TX、LED_RX、RESET引脚 |
|
||
| 新增的配置 | 15 | UART2、UART3、SPI2、开关输入、继电器控制等 |
|
||
|
||
### 10.2 代码修改总结
|
||
|
||
| 修改类型 | 文件数量 | 说明 |
|
||
|---------|---------|------|
|
||
| 修改的文件 | 4 | main.h、gpio.c、usart.h、usart.c、rf433_hal.c |
|
||
| 新增的文件 | 多个 | spi.h/c、W5500驱动、485驱动、GPIO驱动等 |
|
||
|
||
### 10.3 关键要点
|
||
|
||
1. **使用宏定义**: 所有硬件相关的引脚、外设句柄等都应该使用宏定义
|
||
2. **创建硬件抽象层**: 为每个功能模块创建独立的硬件抽象层
|
||
3. **使用回调函数**: 对于需要处理硬件事件的功能,使用回调函数机制
|
||
4. **保持代码结构**: 保持代码结构清晰,使用模块化设计
|
||
5. **充分测试**: 进行充分的功能测试、性能测试和稳定性测试
|
||
|
||
### 10.4 后续工作
|
||
|
||
1. 完成CubeMX配置
|
||
2. 完成代码修改
|
||
3. 完成新驱动模块的开发
|
||
4. 进行功能测试
|
||
5. 进行性能测试
|
||
6. 进行稳定性测试
|
||
7. 编写使用文档
|
||
|
||
---
|
||
|
||
## 附录A: 引脚分配表
|
||
|
||
### A.1 完整引脚分配表
|
||
|
||
| 引脚 | 功能 | 配置 | 说明 |
|
||
|------|------|------|------|
|
||
| PA2 | UART2_TX | USART2_TX | 调试串口发送 |
|
||
| PA3 | UART2_RX | USART2_RX | 调试串口接收 |
|
||
| PA7 | M0 | GPIO_Output | 433模块模式选择0 |
|
||
| PA8 | W5500_RESET | GPIO_Output | W5500复位 |
|
||
| PA9 | UART1_TX | USART1_TX | 433模块发送 |
|
||
| PA10 | UART1_RX | USART1_RX | 433模块接收 |
|
||
| PB12 | W5500_CS | GPIO_Output | W5500片选 |
|
||
| PA15 | RL_Control | GPIO_Output | 继电器控制 |
|
||
| PB0 | M1 | GPIO_Output | 433模块模式选择1 |
|
||
| PB1 | AUX | GPIO_Input, PULLUP | 433模块辅助信号 |
|
||
| PB2 | RESET | GPIO_Output | 433模块复位 |
|
||
| PB3 | LED_RX | GPIO_Output | 接收指示灯 |
|
||
| PB4 | MCU_DI1 | GPIO_Input | 开关输入1 |
|
||
| PB5 | MCU_DI2 | GPIO_Input | 开关输入2 |
|
||
| PB6 | MCU_DI3 | GPIO_Input | 开关输入3 |
|
||
| PB7 | MCU_DI4 | GPIO_Input | 开关输入4 |
|
||
| PB9 | LED_TX | GPIO_Output | 发送指示灯 |
|
||
| PB10 | UART3_TX | USART3_TX | 485发送 |
|
||
| PB11 | UART3_RX | USART3_RX | 485接收 |
|
||
| PB13 | W5500_SCLK | SPI2_SCK | W5500时钟 |
|
||
| PB14 | W5500_MISO | SPI2_MISO | W5500数据输入 |
|
||
| PB15 | W5500_MOSI | SPI2_MOSI | W5500数据输出 |
|
||
|
||
### A.2 未使用的引脚
|
||
|
||
| 引脚 | 说明 |
|
||
|------|------|
|
||
| PC14-OSC32_IN | 32.768kHz晶振输入 |
|
||
| PC15-OSC32_OUT | 32.768kHz晶振输出 |
|
||
| PD0-OSC_IN | 主晶振输入 |
|
||
| PD1-OSC_OUT | 主晶振输出 |
|
||
| PA13 | SWDIO(调试接口) |
|
||
| PA14 | SWCLK(调试接口) |
|
||
|
||
---
|
||
|
||
## 附录B: 外设配置表
|
||
|
||
### B.1 UART配置表
|
||
|
||
| 外设 | 引脚 | 波特率 | 数据位 | 停止位 | 校验位 | 用途 |
|
||
|------|------|--------|--------|--------|--------|------|
|
||
| UART1 | PA9/PA10 | 9600 | 8 | 1 | None | 433模块通信 |
|
||
| UART2 | PA2/PA3 | 115200 | 8 | 1 | None | 调试串口 |
|
||
| UART3 | PB10/PB11 | 9600 | 8 | 1 | None | 485通信 |
|
||
|
||
### B.2 SPI配置表
|
||
|
||
| 外设 | 引脚 | 模式 | 数据大小 | 时钟极性 | 时钟相位 | 波特率 | 用途 |
|
||
|------|------|------|----------|----------|----------|--------|------|
|
||
| SPI2 | PB13/PB14/PB15/PB12 | Master | 8 Bits | Low | 1 Edge | 18 MHz | W5500模块 |
|
||
|
||
### B.3 GPIO配置表
|
||
|
||
| 引脚 | 模式 | 上拉/下拉 | 初始状态 | 用途 |
|
||
|------|------|-----------|----------|------|
|
||
| PB2 | Output | None | SET | 433模块复位 |
|
||
| PB3 | Output | None | SET | 接收指示灯 |
|
||
| PB4 | Input | None | - | 开关输入1 |
|
||
| PB5 | Input | None | - | 开关输入2 |
|
||
| PB6 | Input | None | - | 开关输入3 |
|
||
| PB7 | Input | None | - | 开关输入4 |
|
||
| PB9 | Output | None | SET | 发送指示灯 |
|
||
| PA8 | Output | None | SET | W5500复位 |
|
||
| PB12 | Output | None | SET | W5500片选 |
|
||
| PA15 | Output | None | RESET | 继电器控制 |
|
||
|
||
---
|
||
|
||
## 附录C: 中断配置表
|
||
|
||
| 中断 | 优先级 | 用途 |
|
||
|------|--------|------|
|
||
| USART1_IRQn | 0 | 433模块UART接收 |
|
||
| USART2_IRQn | 1 | 调试串口接收 |
|
||
| USART3_IRQn | 2 | 485通信接收 |
|
||
| SysTick_IRQn | 15 | 系统滴答定时器 |
|
||
|
||
---
|
||
|
||
**文档结束**
|