|
项目需要同时用到ADC1和ADC2, 之前只用了ADC2, 于是把ADC的整个配置函数整个复制粘贴了一遍, 再把里面的ADC2改成ADC1, 中断/DMA之类也一起改过来.
结果发现ADC1正常, ADC2不工作. 排查发现是ADC1配置函数开头的ADC_DeInit(ADC1)这一行, 会导致ADC2停止工作.
查库源代码, 果然是这样. 去掉ADC_DeInit(ADC1), ADC2恢复正常.
- /**
- * @brief Deinitializes the ADCx peripheral registers to their default reset values.
- * @param ADCx: where x can be 1, 2,3 or 4 to select the ADC peripheral.
- * @retval None
- */
- void ADC_DeInit(ADC_TypeDef* ADCx)
- {
- /* Check the parameters */
- assert_param(IS_ADC_ALL_PERIPH(ADCx));
- if((ADCx == ADC1) || (ADCx == ADC2))
- {
- /* Enable ADC1/ADC2 reset state */
- RCC_AHBPeriphResetCmd(RCC_AHBPeriph_ADC12, ENABLE); // 这里, ADC1和ADC2一起给复位了...................
- /* Release ADC1/ADC2 from reset state */
- RCC_AHBPeriphResetCmd(RCC_AHBPeriph_ADC12, DISABLE);
- }
- else if((ADCx == ADC3) || (ADCx == ADC4))
- {
- /* Enable ADC3/ADC4 reset state */
- RCC_AHBPeriphResetCmd(RCC_AHBPeriph_ADC34, ENABLE);
- /* Release ADC3/ADC4 from reset state */
- RCC_AHBPeriphResetCmd(RCC_AHBPeriph_ADC34, DISABLE);
- }
- }
复制代码
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|