有用过Proteus仿真STM32的ADC模块吗?最近尝试发现不论怎样都不好使,包括是否采用固件,使用标准库还是HAL库,都是不好使的(其他的如GPIO,串口没有问题)。Proteus版本为8.13
1条回答 默认 最新
关注
不知道你这个问题是否已经解决, 如果还没有解决的话:- 给你找了一篇非常好的博客,你可以看看是否有帮助,链接:使用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*/ } }
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决评论 打赏 举报无用 1