这是一个从闲鱼购买的STM32F103VE开发板,原始资料缺失。本README记录了目前已还原的硬件接口信息和测试程序。
- STM32F103VE
- 靠近USB口的PC1:实际为PC12
- 远离USB的PC1:实际为PA12
- 红外接口:PC1
- 位置:PE5, PE6
- 特性:低电平点亮
- 两个晶振均已连接
- 引脚:PA9 (TX), PA10 (RX)
- 转换芯片:PL2302 USB转串口
- SCL: PB6
- SDA: PB7
- 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;
}
}
}
- 丝印标注的PC1与实际引脚不符,使用时需特别注意
- LED为低电平点亮,设计电路时请注意
- 测试程序包含IO状态监控功能,可用于调试
- 继续完善其他未确认的接口信息
- 开发更完整的测试程序
- 验证所有外设功能