CH592 IO软件模拟UART打印
波特率(Baud Rate)是每秒传输的位数(bits per second, bps),位时间(Bit Time)是每 bit 的持续时间:
Bit Time (μs)=Baud Rate1×106
注意 :软件 UART 的波特率越高,时序误差的影响越大。一般推荐 ≤ 38400,超过需硬件 UART。
#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);

浙公网安备 33010602011771号