今天调stm32发现这样的问题。调试串口数据正常,但是stm32单片机自主运行时串口数据不对。
用的stm32F4和ads1256模块,发送ADC电压采集数据。
问题可能原因如下:
1、模块SPI通讯问题,检查单片机时钟主频,SPI clock在模块要求的2MHz以下,没有问题,排除。
2、模块初始化没有给合适的延时,通过增加延时时间后发现并非该原因。
最终经过学长提醒,发现原因如下:串口打印时用了printf,使用了标准库<stdio.h>,然后keil里需要专门设置一个地方保证单片机系统对标准库的支持。
首先讲解使用printf的重映射步骤。
1、加上printf的标准库#include <stdio.h>
2、进行重映射,在main.c文件里编写 fputc(int ch, FILE *f)的函数,其中huart2改为单片机对应的串口。
int fputc(int ch, FILE *f)
{
uint8_t temp[1] = {ch};
HAL_UART_Transmit(&huart2, temp, 1, 2);
return ch;
}
3、正常调用printf函数
Adc = ADS1256ReadData( (i << 4) | ADS1256_MUXN_AINCOM);
Volts = Adc*0.000000598;
printf(" %.4fV ",Volts);
4、也就是我遇到的问题的根源,进行Use MicroLIB的配置
如图,按照上述步骤勾选Use MicroLIB就可以解决打印问题了~
希望对大家有帮助!