新手上路
- 积分
- 47
- 金钱
- 47
- 注册时间
- 2018-1-20
- 在线时间
- 6 小时
|
1金钱
比如我想1秒采集一次ADC数据,我试过的方法是 在TIM的更新中断中加了GetADC(),这个GetADC()用的是阿波罗例程72里的代码。
问题是 执行程序时只读了一次ADC就死循环在while(!(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC))),ADC_FLAG_EOC一直是0。
请教大家,用HAL库定时采集ADC数据的标准方法是怎样的?谢谢!
相关代码:
//读取ADC值
uint16_t GetADC()
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
return HAL_ADC_GetValue(&hadc1);
}
//定时器更新中断
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
printf("%d\r\n",GetADC()); //返回adc值
}
|
最佳答案
查看完整内容[请看2#楼]
不要在中断里执行阻塞式的函数,你定时器设一个标记,到时间就将该标记置1,主循环检测到该标记为1再执行GetADC()并将其清0就可以了。又或者修改Get_ADC()函数,不要用HAL_ADC_Start(),改用 HAL_ADC_Start_IT() ,然后在回调函数里获取数据。
|