①了解串口工作原理,单片机想往串口发送数据,只需配置一个GPIO引脚即可,将引脚设为推挽输出,根据串口传送时序图,先拉高。
②拉低电平作为传送的起始位,下面步骤非常关键,设置波特率,比如波特率为9600,那么时间间隔应该是1/9600=104us。注意这个间隔差一点点是没问题的。串口每次是发一位的,所以从最低位开始循环发送8次,就是一个字节,最后引脚拉高作为停止位。程序如下
void send_B(u8 data)
{
u8 i;
TXD=0;
delay_us(104);
for(i=0;i<8;i++)
{
TXD=data&0x01;
LED=TXD;
delay_us(100);
data=data>>1;
}
TXD=1;
}
③用示波器测一下发送值(0XAA),效果如下
④上述适合发送一个字节,如果发送4B或者更多怎么办?循环四次发送send_B(0XAA)是不行的,需要在函数间插入延时函数。
void send_u32(int data)
{
delay_ms(1);
send_B((u8)data);
delay_ms(1);
send_B((u8)(data>>8));
delay_ms(1);
send_B((u8)(data>>16));
delay_ms(1);
send_B((u8)(data>>24));
}
⑤最后在PC用串口助手接受一下数据试试看,如图,发送send_B(0XAA)和send_u32(0X12345678)是可以接受到的
总结:延时比较简单,但是如果再添加一个RX就不推荐用这个方法。另外可以用定时器中断的方法,方法同上。