ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

单片机IO软件模拟UART打印

2026/8/15 18:38:49 拓冰建站 浏览量
单片机IO软件模拟UART打印

波特率(Baud Rate)是每秒传输的位数(bits per second, bps),位时间(Bit Time)是每 bit 的持续时间:

Bit Time (μs)=Baud Rate1×106
 
波特率
理论位时间 (ΜS)
DELAYUS 应设值
适用场景
9600
104.17
104
低速稳定通信
19200
52.08
52
常用中速
38400
26.04
26
中高速
57600
17.36
17
高速(需优化代码)
115200
8.68
9
极限(需硬件支持)

 

#include "stdarg.h"
#include "stdio.h"
#define    SIMGPIO_PIN    GPIO_Pin_4
#define    delaytime      52      //19200波特率
/******************************************************************************** @fn      SoftwareUART_SendChar** @brief   SoftwareUART_SendChar** @param   Char** @return  None.*/
void SoftwareUART_SendChar(char c)
{// 起始位(低电平)
  GPIOA_ResetBits(SIMGPIO_PIN);DelayUs(delaytime);// 数据位(低位在前)for (int i = 0; i < 8; i++){if (c & (1 << i)){GPIOA_SetBits(SIMGPIO_PIN);}else{GPIOA_ResetBits(SIMGPIO_PIN);}DelayUs(delaytime);}// 停止位(高电平)
  GPIOA_SetBits(SIMGPIO_PIN);DelayUs(delaytime);
}/******************************************************************************** @fn      SoftwareUART_SendString** @brief   SoftwareUART_SendString** @param   *str** @return  None.*/
void SoftwareUART_SendString(char* str)
{while (*str){SoftwareUART_SendChar(*str++);}
}/******************************************************************************** @fn      SoftwareUART_Printf** @brief   SoftwareUART_Printf** @param** @return  None.*/
void SoftwareUART_Printf(const char* format, ...)
{char buffer[256]; // 定义一个足够大的缓冲区
    va_list args;va_start(args, format);vsnprintf(buffer, sizeof(buffer), format, args);va_end(args);SoftwareUART_SendString(buffer);
}

调用SoftwareUART_Printf即可完成数据打印