最近在研究基于CH32V203F8P6 的LibDriver的驱动,开始以为LibDriver调试打印函数只能整数格式化输出,
LibDriver基于STM32F407的调试打印函数
/**
* @brief interface print format data
* @param[in] fmt format data
* @note none
*/
void pcf8563_interface_debug_print(const char *const fmt, ...)
{
char str[256];
uint16_t len;
va_list args;
memset((char *)str, 0, sizeof(char) * 256);
va_start(args, fmt);
vsnprintf((char *)str, 255, (char const *)fmt, args);
va_end(args);
len = strlen((char *)str);
(void)uart_write((uint8_t *)str, len);
}
但阅读BA121项目发现可以实现浮点数输出。
LibDriver基于CH32V203F8P6的调试打印函数
/**
* @brief interface print format data
* @param[in] fmt format data
* @note none
*/
void pcf8563_interface_debug_print(const char *const fmt, ...)
{
char str[256];
uint16_t len;
va_list args;
memset((char *)str, 0, sizeof(char) * 256);
va_start(args, fmt);
vsnprintf((char *)str, 255, (char const *)fmt, args);
va_end(args);
len = strlen((char *)str); // 获取字符串长度
// 使用 UART 发送数据
for (uint16_t i = 0; i < len; i++)
{
USART_SendData(USART1, str[i]); // 假设使用 USART1
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); // 等待发送完成
}
}
为实现基于CH32V203F8P6的调试打印函数,需进行如图设置:
勾选Use float with nano printf (-u _printf_float),并应用。
测试代码:
void pcf8563_interface_debug_print(const char *const fmt, ...)
{
char str[256];
uint16_t len;
va_list args;
memset((char *)str, 0, sizeof(char) * 256);
va_start(args, fmt);
vsnprintf((char *)str, 255, (char const *)fmt, args);
va_end(args);
len = strlen((char *)str); // 获取字符串长度
// 使用 UART 发送数据
for (uint16_t i = 0; i < len; i++)
{
USART_SendData(USART1, str[i]); // 假设使用 USART1
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); // 等待发送完成
}
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
SystemCoreClockUpdate();
Delay_Init();
USART_Printf_Init(115200);
printf("SystemClk:%d\r\n", SystemCoreClock);
printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
printf("This is printf example\r\n");
while(1)
{
pcf8563_interface_debug_print("V=%0.2f\n",0.14);
//pcf8563_interface_debug_print("Hello CH32!\n");
Delay_Ms(500);
}
}
在C/C++ Build->Settings->Tool Settings选项列表中单击GNU RISC-V Cross C Linker->Miscellaneous,然后在右侧Linker flags窗口,点击Add 按钮,添加命令行:“--print-memory-usage”,最后点击Apply and Close保存修改: