CH592 IO软件模拟UART打印

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

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

 

#include "HAL.h"
#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); }

 

①需要将模拟串口打印的IO初始化为推挽输出模式,

    GPIOA_SetBits(SIMGPIO_PIN);
    GPIOA_ModeCfg(SIMGPIO_PIN, GPIO_ModeOut_PP_5mA);

②调用SoftwareUART_Printf即可完成数据打印,例如:

    SoftwareUART_Printf("%s\n", VER_LIB);

 

posted @ 2025-12-01 16:05  oTvTo  阅读(16)  评论(0)    收藏  举报