Proteus仿真STM32的ADC

有用过Proteus仿真STM32的ADC模块吗?最近尝试发现不论怎样都不好使,包括是否采用固件,使用标准库还是HAL库,都是不好使的(其他的如GPIO,串口没有问题)。Proteus版本为8.13

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 给你找了一篇非常好的博客,你可以看看是否有帮助,链接:使用CubMX和Proteus学习STM32单片机(五)------ADC模数转换
  • 除此之外, 这篇博客: STM32CubeMX+Keil+Proteus仿真ADC采集中的 HAL库中关于ADC的重要函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    共分为三种:轮询中断DMA三种模式
    开启ADC函数

    HAL_ADC_Start(&hadc1);     //轮询模式开启ADC
    HAL_ADC_Start_IT(&hadc1); //中断模式开启ADC
    HAL_ADC_Start_DMA(&hadc1);//DMA模式开启ADC
    

    关闭ADC函数

    HAL_ADC_Stop(&hadc1);    //轮询模式关闭ADC
    HAL_ADC_Stop_IT(&hadc1); //中断模式关闭ADC
    HAL_ADC_Stop_DMA(&hadc1);//DMA模式关闭ADC
    

    读取ADC转换值

    HAL_ADC_GetValue(&hadc1);
    

    ADC校准函数(通常在ADC初始化之后加上该函数)

    MX_ADC1_Init();                     //ADC初始化
    HAL_ADCEx_Calibration_Start(&hadc1);//AD校准 
    

    等待转换结束函数(用于轮询模式)

    void HAL_ADC_PollForConversion(&hadc1, 50){//第二个参数为等待时间
    //判断转化函数是否结束的条件语句
    if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK){
    	/*User Code*/
    }
    }
    

    ADC中断回调函数(用于中断模式,中断发生则进入该函数)

    void HAL_ADC_ConvCpltCallback(&hadc1){
    if(hadc->Instance == ADC1){
    	/*User Code*/
    }
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^