提问人:KaleM 提问时间:11/3/2023 更新时间:11/3/2023 访问量:45
printf 浮点 stm32 时出现硬故障
Hard Fault when printf floats stm32
问:
我在stm32cubeIDE 1.11.0上写了一个程序,可以计算正弦波的fft(我总是通过软件生成)。我显然已将导入的 DSP 库下载到项目中。 我应该在屏幕上打印频率及其幅度(以查看正弦波频率的理想峰值),但指令 printf(“frequency %f: %f \n”, (float32_t)frequencies_axis[i], output_fft_mag[i]); 导致硬故障中断...如果我打印整数和/或字符串,则不会发生这种情况。
main 是空的(它只调用有问题的函数),main 下面是由 stm32cubeIDE 自动完成的初始化。所以我只附加了函数的代码(为了简化事情),因为在我看来,问题要么出在我写的代码中,要么出在IDE设置中。
这是我第一次使用 printf,所以我可能在代码中犯了一个愚蠢的错误。我恳请您检查一下。先谢谢你。
//All global variables
#define FFT_BUFFER_SIZE 256
#define SAMPLING_RATE 16000
arm_rfft_fast_instance_f32 fftHandler;
float32_t input_fft[FFT_BUFFER_SIZE];
float32_t output_fft[FFT_BUFFER_SIZE];
float32_t output_fft_mag[FFT_BUFFER_SIZE / 2];
float32_t sine_val[100];
float32_t frequencies_axis[FFT_BUFFER_SIZE / 2];
void get_sineval_FFT2() {
//int i = 0;
int frequency = 500;
//generate sinusoidal signal (this is what you receive from outside in the ADC pin, for example)
HAL_Delay(100);
for (int i = 0; i < FFT_BUFFER_SIZE; i++) {
sine_val[i] = arm_sin_f32(2*PI*frequency*i/SAMPLING_RATE);
//"sine_val" contains only one frequency (500Hz), so "output_fft" must contain all 0 except a spike at 500Hz
}
arm_rfft_fast_f32(&fftHandler, sine_val, output_fft, 0); //"output_fft" contiene: frequency values and phase information (è formato da complex numbers: in posizione pari ci sono i numeri reali e in posizione dispari c'è la complex immaginary part del numero ) k
arm_cmplx_mag_f32(output_fft, output_fft_mag, FFT_BUFFER_SIZE/2); //estraggo magnitude perchè ci interessa quella .. non ci interessa la fase! Estrai da "output_fft" la magnitude che è, per forza, metà fft (cioè FFT_BUFFER_SIZE/2)
for (int i = 0; i < FFT_BUFFER_SIZE / 2; i++) {
frequencies_axis[i] = ((i * SAMPLING_RATE) / FFT_BUFFER_SIZE);
//printf("frequencies_axis = %d \n", frequencies_axis[i]);
printf("frequency %f: %f \n", (float32_t)frequencies_axis[i], output_fft_mag[i]);
HAL_Delay(50);
//sprintf(frequencies_axis_str[i], "%f", frequencies_axis[i]); //Ora "frequencies_axis_str" contains "frequencies_axis" as characters
//printf("frequencies_axis %c : %f \n", frequencies_axis_str[i], output_fft_mag[i]);
//HAL_UART_Transmit(&huart1, (uint16_t*)(frequencies_axis_str[i]), FFT_BUFFER_SIZE / 2, HAL_MAX_DELAY);
}
}
答: 暂无答案
评论
%f
double
printf()