ch58x/ch59x gpio模拟串口发送
波特率(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号