En supposant que vous appelez HAL_ADC_Start(&hadc1)
avant d'entrer dans la boucle while. Fondamentalement, il est OK de vous appeler du code dans une boucle while
, mais j'ai quelques remarques.
Assurez-vous que la variable ADCValue
est uint32_t
ou au moins uin16_t
comme return value de HAL_ADC_GetValue
est uint32_t
. Si la résolution de l'ADC est supérieure à 8 bits, 1 octet ne sera pas suffisant pour stocker le résultat.
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
Le HAL_UART_Transmit
attend un uint8_t*
comme second paramètre, étant donné votre code, vous passez une variable simple. Vous devez utiliser l'opérateur &
avant ADCValue
et le convertir en uint8_t*
. En outre, il envoie seulement 1 octet dans votre code, basé sur le troisième paramètre. Si ADCValue
est uint32_t
alors vous devez modifier ce paramètre à 4. Notez également que vous envoyez une valeur d'octet brut et non ASCII. Dans l'ensemble:
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)
renvoie l'adresse de ADCValue
qui est un uint32_t*
il devrait donc être casté en uint8_t*
lors du passage à HAL_UART_Transmit
. Et comme un uint32_t
est de 4 octets, troisième paramètre devrait être 4.
Si vous souhaitez envoyer le str
, vous devez calculer sa longueur correcte avant de l'envoyer. Par ailleurs, voici un exemple ADC à partir de ce 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++;
}
}
}
Merci pour votre commentaire. Maintenant, je lis la valeur adc, mais quand j'ai utilisé IF Statement dans l'exemple de code, la valeur ADC n'a pas été lue. Pouvez-vous expliquer la fonction de HAL_ADC_PollForConversion()? – king