stm32에서 "new"HAL 라이브러리를 사용하는 방법을 배우려고합니다.
간단한 ADC 변환을 시도하면 한 번만 작동하지만 변환이 중지됩니다. 전환 종료 플래그가 설정되지 않았다고 가정합니다. STM32f429ZI가 탑재 된 STM32f429I 디스커버리 보드를 사용하고 있습니다.
나는 sprintf가 나쁜 습관이고 인터럽트로 adc를 만드는 것이 더 낫다는 것을 알고 있습니다. 지적하지 마십시오.이 질문과 관련이 없으며 HAL을 테스트하고 있습니다.
따라서 EOC 플래그가 설정되지 않은 이유 또는 작동시키기 위해 어떻게해야합니까? 인터넷 검색은 HAL에 대한 좋은 자료가 거의 없기 때문에 크게 도움이되지 않습니다.
코드는 다음과 같습니다.
__IO uint16_t ADCValue=0;
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);
int main(void)
{
char str[15];
/* Various initializations */
HAL_ADC_Start(&hadc1);
while (1)
{
if (HAL_ADC_PollForConversion(&hadc1, 1000000) == HAL_OK)
{
ADCValue = HAL_ADC_GetValue(&hadc1);
sprintf(str, "%d", ADCValue);
BSP_LCD_DisplayStringAt(130,30, (uint8_t*)str, LEFT_MODE);
}
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
ADCValue = HAL_ADC_GetValue(&hadc1);
}
또한 CubeMX로 프로젝트를 만들었습니다. adc 구성은 다음과 같습니다.
편집 1
모든 것을 디버깅하려고 시도했지만 프로그램이 EOC 플래그를 확인하는 데 걸리는 것처럼 보입니다. 표시되지 않았으므로 EOC가 표시되기를 기다리는 타이머를 발행합니다 (그러나 결코 설정되지 않음) 여기에 코드가 있습니다 디버거에 갇히게됩니다.
/* Check End of conversion flag */
while(!(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC)))
{
/* Check for the Timeout */
if(Timeout != HAL_MAX_DELAY)
{
if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
{
hadc->State= HAL_ADC_STATE_TIMEOUT;
/* Process unlocked */
__HAL_UNLOCK(hadc);
return HAL_TIMEOUT;
}
}