Skip to content

Instantly share code, notes, and snippets.

@nickfox-taterli
Created April 24, 2025 06:36
Show Gist options
  • Save nickfox-taterli/581fe7cb905dff9119ead9bf81f46b63 to your computer and use it in GitHub Desktop.
Save nickfox-taterli/581fe7cb905dff9119ead9bf81f46b63 to your computer and use it in GitHub Desktop.
这是一个从闲鱼购买的STM32F103VE开发板,原始资料缺失。本README记录了目前已还原的硬件接口信息和测试程序。

STM32F103VE 开发板资料

概述

这是一个从闲鱼购买的STM32F103VE开发板,原始资料缺失。本README记录了目前已还原的硬件接口信息和测试程序。

硬件接口

主芯片

  • STM32F103VE

重要说明

  • 靠近USB口的PC1:实际为PC12
  • 远离USB的PC1:实际为PA12
  • 红外接口:PC1

LED指示灯

  • 位置:PE5, PE6
  • 特性:低电平点亮

时钟系统

  • 两个晶振均已连接

串口通信

  • 引脚:PA9 (TX), PA10 (RX)
  • 转换芯片:PL2302 USB转串口

EEPROM接口 (I2C1)

  • SCL: PB6
  • SDA: PB7

Flash存储 (W25Q128, SPI1)

  • NSS: PA4
  • SCK: PA5
  • MISO: PA6
  • MOSI: PA7

测试程序

#define ESTOP() __asm volatile("BKPT #0\n")

/* 修正后的结构体定义 */
typedef struct {
    GPIO_TypeDef* port;      // GPIO端口指针
    uint8_t port_id;         // 新增端口标识(0:A,1:B...)
    uint16_t changed_pins;   // 变化的引脚掩码
    uint16_t prev_state;     // 变化前状态
    uint16_t current_state;  // 变化后状态
} IO_ChangeRecord;           // 修正:添加port_id字段

static volatile IO_ChangeRecord io_change;

typedef struct {
    GPIO_TypeDef* port;
    uint16_t valid_mask;
    uint16_t last_state;
    uint8_t port_id;         // 端口标识同步到监控结构体
} IOMonitor;

// 初始化监控端口数组(保持原有配置)
static IOMonitor monitor_ports[] = {
    {GPIOA, 0x9F0F, 0, 0},  // port_id 0 = PA
    {GPIOB, 0xFF3F, 0, 1},  // port_id 1 = PB
    {GPIOC, 0x3FFF, 0, 2},  // port_id 2 = PC
    {GPIOD, 0xFFFF, 0, 3},  // port_id 3 = PD
    {GPIOE, 0xFFFF, 0, 4}   // port_id 4 = PE
};

void Check_IO_Status(void)
{
    static uint8_t first_run = 1;
    if(first_run) {
        // 保持原有初始化代码...
        first_run = 0;
    }

    for(uint8_t i = 0; i < sizeof(monitor_ports)/sizeof(IOMonitor); i++) {
        uint16_t current = LL_GPIO_ReadInputPort(monitor_ports[i].port) & monitor_ports[i].valid_mask;
        
        if(current != monitor_ports[i].last_state) {
            /* 正确填充结构体字段 */
            io_change.port = monitor_ports[i].port;
            io_change.port_id = monitor_ports[i].port_id;  // 现在结构体包含这个字段
            io_change.changed_pins = (current ^ monitor_ports[i].last_state);
            io_change.prev_state = monitor_ports[i].last_state;
            io_change.current_state = current;
            
            ESTOP();
            monitor_ports[i].last_state = current;
        }
    }
}

注意事项

  1. 丝印标注的PC1与实际引脚不符,使用时需特别注意
  2. LED为低电平点亮,设计电路时请注意
  3. 测试程序包含IO状态监控功能,可用于调试

后续工作

  • 继续完善其他未确认的接口信息
  • 开发更完整的测试程序
  • 验证所有外设功能
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment