STM32CubeIDE中ARM-M4内核MCU通过USART发送浮点数失败求助
STM32CubeIDE下USART发送浮点数异常问题
仅在STM32CubeIDE中出现该问题,Keil-MDK环境下可正常运行。
使用STM32F411 MCU的USART端口发送消息,编写了支持可变参数的write函数,该函数能正常发送整数和字符,但发送浮点数时存在异常:调用Debug.write("XG : %f\n",R)时,串口终端仅输出"XG : ",无浮点数内容。
已尝试以下方法但均无效:
- 使用
sprintf将浮点数转换为字符串,输出结果始终为"XG : 0",即使指定%.4f格式也无法显示正确数值 - 使用
std::string拼接字符串,MCU直接进入未知状态并停止运行 - 已调整STM32CubeIDE中的FPU设置,问题依旧存在
相关代码
字节发送函数
void Serial::write_byte(int data) { Serial::port->DR = (data & 0xff); while (!(Serial::port->SR & (1 << 7))); //等待发送缓冲区为空 }
可变参数发送函数
void Serial::write(char *msg, ...) { char buff[256]; va_list args; va_start(args, msg); vsprintf(buff, msg, args); for (unsigned int i = 0; i < strlen(buff); i++) { Serial::write_byte(buff[i]); } }
浮点数发送调用代码
float R = (int16_t(raw[0] << 8 | raw[1]))/4096.0; Debug.write("XG : %f\n",R);
内容的提问来源于stack exchange,提问作者Sajil
相关产品推荐
相关产品推荐

