STM32F0單路採集電壓普通方式+STCUBEMX一些專業英語翻譯

參考https://www.cnblogs.com/xingboy/p/10018749.html

用DMA採集單路電壓總是出錯,就用了定時器和中斷的方式

開啓定時器HAL_TIM_Base_Start_IT(&htim17);//timer

10ms定時器中斷到了,開啓電壓採集,進行電壓判斷(注意這是上一次採集的電壓,所以會有10ms延時)

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//10ms
{
    uint32_t ad_temp;
    if (htim->Instance == htim17.Instance)
    {
        /* Toggle LED */
        HAL_ADC_Start_IT(&hadc);
        if(ADC_num < 2048)
            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
        else HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);


}

AD採集完成中斷,停止AD採集,停止定時器,獲取電壓值,開啓定時器

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)    
{
    HAL_ADC_Stop_IT(hadc);       
    HAL_TIM_Base_Stop_IT(&htim17);    
    ADC_num = HAL_ADC_GetValue(hadc);    
    HAL_TIM_Base_Start_IT(&htim17);      
}

多通道DMA方式參考http://www.stmcu.org.cn/module/forum/thread-598945-1-1.html

 

注意!!!ADC配置中,由於時鐘是48MHz,所以ClockPrescaler爲Synchronous clock mode divided by 4,這樣ADC的時鐘爲12MHz(ADC時鐘不能超過14MHz)

 

cube英文翻譯https://blog.csdn.net/yxiaobo163/article/details/83583375

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章