假设您在进入while循环之前调用HAL_ADC_Start(&hadc1)
。 基本上可以在while
循环中调用您的代码,但我有一些评论。
确保ADCValue
变量是uint32_t
或至少uin16_t
为一体的return valueHAL_ADC_GetValue
是uint32_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)
返回这是一个uint32_t*
所以应该传递给HAL_UART_Transmit
时浇铸uint8_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