작성
·
226
·
수정됨
0
WinIDT에서 Read ADC0에서 fft값을 보기 위해서는 기존 코드를 수정해야 하는 건가요?
현재 stm보드는 강의와는 달리 stm32f429를 사용하고 있습니다.
본 강의자료에서의 세팅을 제 보드에 맞게 설정 진행했는데, WinIDT 연결은 확인이 되지만 fft값을 보는 과정에서 잘 이루어지지 않았습니다.
adc 핀에는 제가 보유한 마이크 센서인 MAX9814를 활용했고, 출력핀이 하나여서 PC13에만 연결 진행했습니다.
답변 1
0
안녕하세요.
증상이 어떤지 명확하지가 않지만 아래 사항 확인해 보시길 바랍니다.
1) WinIDT 에 메시지가 안나올 때 : Uart등 기본적인 설정들을 확인합니다.
2) 데이터값이 0 나 가비지 값이 나올 때 : ADC, DMA 설정을 확인합니다. 또는 ADC 입력(HW)을 확인합니다. max9814 대신에 로직 아날라이저나 기타 입력을 넣어서 확인합니다. 3V ~ 0V를 입력해 봅니다.
stm32f311이나 stm32f429나 큰 차이는 없을 것 같습니다.
감사합니다 ~!!
먼저 PC에서 보드로 전송하는 Uart 데이터를 확인해야 합니다. "FFT ADC 0 " 라디오 버튼을 클릭시, "FFT CH-0 buf : A (or B)" 라는 메시지는 나오는지요? 프로그램 내부에 adc data 저장을 위하여 더블 버퍼(buf-A, buf-B)을 사용하고 있습니다. 아래 코드는 "FFT ADC 0" 라디오 버튼 클릭시 실행되는 내용입니다. 이 내용대로 한라인씩 디버깅 해보시길 바랍니다.
// comm_task.c
// FFT adc ch0
else if( (comm_buf[0]=='f') && (comm_buf[1]=='f') && (comm_buf[2]=='0') )
{
gAdcWriteStop = 1;
if(gAdcWriteFlag == ADC_BUFA)
{
uart1_puts((uint8_t *)"\r\n FFT CH-0 buf : B ");
arm_hexa2f32(&gAdcDataB[0], 0);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
fft_index = arm_fft_adc_test();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);
uart1_puts_16d((uint8_t *)"\r\n arm_fft_index : ", fft_index);
uart1_puts_16d((uint8_t )", freq : ", (uint16_t)(fft_index2000.0 / FFT_SIZE));
}
else
{
uart1_puts((uint8_t *)"\r\n FFT CH-0 buf : A ");
arm_hexa2f32(&gAdcDataA[0], 0);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
fft_index = arm_fft_adc_test();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);
uart1_puts_16d((uint8_t *)", arm_fft_index : ", fft_index);
uart1_puts_16d((uint8_t )", freq : ", (uint16_t)(fft_index2000.0 / FFT_SIZE));
}
gAdcWriteStop = 0;
}
답변 감사합니다.
1번 상황에서 맨 처음 연결 메세지가 정상적으로 나오고, FFT 값을 보려고 FFT ADC 0를 누르면 값이 올라오지 않는데, 이 이유가 무엇인지 궁금합니다.