while 루프를 입력하기 전에 HAL_ADC_Start(&hadc1)
을 호출한다고 가정합니다. 기본적으로 코드를 while
루프로 호출하는 것이 좋지만 몇 가지 언급이 있습니다.
는
ADCValue
변수가
return value
HAL_ADC_GetValue
이
uint32_t
인의 같은
uint32_t
또는 적어도
uin16_t
있는지 확인합니다. ADC의 해상도가 8 비트 이상이면 1 바이트로 결과를 저장할 수 없습니다.
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_UART_Transmit
은 간단한 변수를 전달 코드 부여, 두 번째 매개 변수로 uint8_t*
기대하고있다. ADCValue
전에 &
연산자를 사용하고 uint8_t*
으로 전송해야합니다. 또한 세 번째 매개 변수를 기반으로 코드에서 1 바이트 만 보냅니다. ADCValue
이 uint32_t
이면이 매개 변수를 4로 수정해야합니다. 또한 ASCII가 아닌 원시 바이트 값을 보냅니다. 모두 모두 :
uint32_t ADCValue;
if (HAL_ADC_PollForConversion(&hadc1, 1000000) == HAL_OK)
{
ADCValue = HAL_ADC_GetValue(&hadc1);
sprintf(str, "%d", ADCValue);
HAL_UART_Transmit(&huart2, (uint8_t*)(&ADCValue), 4, 100);
}
(&ADCValue)
는 HAL_UART_Transmit
에 전달할 때 그래서 uint8_t*
로 주조한다 uint32_t*
입니다 ADCValue
의 주소를 반환합니다. uint32_t
이 4 바이트이면 세 번째 매개 변수는 4 여야합니다.
str
을 보내려면 보내기 전에 올바른 길이를 계산해야합니다.
여기 ADC의 예가 STM32 HAL ADC Tutorial입니다.
uint32_t g_ADCValue;
int g_MeasurementNumber;
int main(void)
{
HAL_Init();
SystemClock_Config();
ConfigureADC();
HAL_ADC_Start(&g_AdcHandle);
for (;;)
{
if (HAL_ADC_PollForConversion(&g_AdcHandle, 1000000) == HAL_OK)
{
g_ADCValue = HAL_ADC_GetValue(&g_AdcHandle);
g_MeasurementNumber++;
}
}
}
의견을 보내 주셔서 감사합니다. 이제 adc 값을 읽었지만 샘플 코드에서 IF 문을 사용하면 ADC 값을 읽을 수 없습니다. HAL_ADC_PollForConversion()의 기능을 설명 할 수 있습니까? – king