2015-08-03 07:58 AM
I am using the version 1.3.1. of stm32f4xx hal drivers. I am using the 3 ADCs. ADC1 and ADC2 in dual mode DMA interrupt driven and ADC3 regular conversion.
As you can in the code below I am using the functions __ADCx_FORCE_RESET() (x= 1, 2, and 3) . I dont understand why but the functions don't link. I get undefined symbol. I must use __ADC_FORCE_RESET() to get it work but it will reset all ADCs which I don't want. Any ideas why? Thank youvoid HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
{
if(hadc->Instance == ADC1)
{
/*##-1- Reset peripherals ##################################################*/
__ADC1_FORCE_RESET();
__ADC1_RELEASE_RESET();
/*##-2- Disable peripherals and GPIO Clocks ################################*/
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_3);
/*##-3- Disable the DMA Streams ############################################*/
HAL_DMA_DeInit(&hDMA2_ADC);
/*##-4- Disable the NVIC for DMA ###########################################*/
HAL_NVIC_DisableIRQ(DMA2_Stream0_IRQn);
}
if(hadc->Instance == ADC2)
{
/*##-1- Reset peripherals ##################################################*/
__ADC2_FORCE_RESET();
__ADC2_RELEASE_RESET();
}
if(hadc->Instance == ADC3)
{
/*##-1- Reset peripherals ##################################################*/
__ADC3_FORCE_RESET();
__ADC3_RELEASE_RESET();
/*##-2- Disable peripherals and GPIO Clocks ################################*/
HAL_GPIO_DeInit(GPIOF, GPIO_PIN_7);
}
}
2015-08-04 06:24 AM
Hi Keaven,
The following functions are not defined in the ADC HAL driver:__ADC1_FORCE_RESET();
__ADC1_RELEASE_RESET(); __ADC2_FORCE_RESET(); __ADC2_RELEASE_RESET(); __ADC3_FORCE_RESET(); __ADC3_RELEASE_RESET(); You need to call:ADCxyz_FORCE_RESET();
ADCxyz_RELEASE_RESET(); Please note that current STM32CubeF4 package version is 1.7.0. For sure there are some enhancements made in version besides to the support of new F4 products. -Mayla-To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
2015-08-04 07:47 AM
Hi Mayla,
I validate the version and I am using 1.6.0 . The reason that I am not up to date is simply I am getting the update from Keil uVision 5 package update. It takes a bit longer to get the latest version.In which header file do I find ADCxyz_FORCE_RESET() macros? I cannot find them.Finally, the macros ADC1_FORCE_RESET() is present in stm32f4_hal_legacy.h. Any reason why the build process cannot find them?Thank you for your help.2015-08-04 08:04 AM
Hello again,
I just noticed by looking at the STM32F4 reference manual ( RM0090) that the STM32F4 doesn't actually have seperate reset for ADC1, ADC2, or ADC3. It has a common reset for the whole controller.So I have to use the common reset .Thank you again.2015-08-04 08:55 AM
You are right Keaven, there are no functions calledADCxyz_FORCE_RESET & ADCxyz_RELEASE_RESET I referred to the ADC example in Cube package where these are labels only used there.
The correct ones are:__ADC_FORCE_RESET();
__ADC_RELEASE_RESET();
-Mayla-
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.