io模拟uart发送数据存在误码,是起始位还是停止位的问题呢?

UART_TX_LOW; //起始位 拉低电平
uart_delay_us(test_cnt1);

for(i=0;i<8;i++){
    if(val&0x01){
        UART_TX_HIGH;
    }else{
        UART_TX_LOW;
    }
        
    uart_delay_us(test_cnt1);
    val>>=1;
}

UART_TX_HIGH;                //停止位,拉高电平
uart_delay_us(test_cnt1);

你问题描述的不清楚[分析协议用逻辑分析仪看看正常的波形是什么样的];

uart 发送,每一位的间隔是固定的,比如按 1200bit 发送,间隔延时是 0.833ms
你在 for 循环中,有判断,有 val>>=1; 还有 i++ 这个延时严格的说也刨去。当然在低波特率下可以忽略
从发送数起始位前,就需要开始禁止中断一直到发送完结束位并延时后再开启中断,中断会影响这个延时间隔的。
你得仔细计算并测试 uart_delay_us(test_cnt1); 保证延时的准确,再屏蔽好中断就能成功了。