我正在尝试学习如何使用 stm32 中的“新”HAL 库。
当我尝试进行简单的 ADC 转换时,它只工作一次,但随后停止转换。我想没有设置转换结束标志。我正在使用 STM32f429I Discovery 板,板上有 STM32f429ZI。
请注意,我知道 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);
}
编辑 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;
}
}