基于CH32V203F8P6 interface_debug_print支持浮点格式输出
LibDriver PCF8563驱动
最近在研究基于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]); // 假设使用 USART1while (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]); // 假设使用 USART1while (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保存修改: