// 发送起始位(低电平)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
Delay_us(104); // 9600波特率下1位时间约104μs
// 发送8位数据(LSB优先)
for (int i = 0; i < 8; i++) {
if (data & 0x01) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
}
data >>= 1;
Delay_us(104);
}
// 发送停止位(高电平)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
Delay_us(104);
} 模拟串口的本质是通过 定时器中断 精确控制TX的位输出时序,并在RX端检测边沿以采样数据位。 普通 IO 模拟串口还是有优势:硬件成本低,灵活适配非标准协议,适合资源紧张场景。
页:
1
[2]