单片机IO模拟串口发送数据
由于项目上用的STM32单片机串口资源不够用,但是还是想看调试输出,所以就多引出了一个IO,使用IO模拟串口发送数据的时序来当做串口打印用了,本章实验工程以8bit数据位、1bit停止位,无奇偶校验、无流控,波特率9600bps为例,串口的发送数据时序流程如下图:
串口发送的时序是非常简单的,TX引脚空闲时为高电平,拉低一下是启动发送,随后发送8bit,最后拉高,模拟IO的实现需要的就是延时的精准度,以9600bps波特率为例,一秒能发送9600bit,那么发送1bit的时间间隔就是大概1/9600≈104us,贴一下代码:
void VirtualCOM_SendByte(uint8_t c)
{
int i = 0;
VCOM_GPIO_L();
delay_us(104);
for(i = 0; i < 8; i++)
{
if(c & 0X01)
{
VCOM_GPIO_H();
}
else
{
VCOM_GPIO_L();
}
c >>= 1;
delay_us(104);
}
VCOM_GPIO_H();
delay_us(104);
}
void VirtualCOM_SendData(const void* buf, uint32_t len)
{
const uint8_t* p = (const uint8_t* )buf;
__set_PRIMASK(1);
while(len--)
{
VirtualCOM_SendByte(*p++);
}
__set_PRIMASK(0);
}
ends…
|