不同的指针类型在 c 中缺少强制转换

Distinct pointer types lacks a cast in c

我正在使用 ST32 I-cube 示例代码并尝试使用以下代码启动 ADC:

ADC_HandleTypeDef hadc;

void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {

  if(hadc->Instance==ADC){

  GPIO_InitTypeDef GPIO_InitStruct={0};

  /*##-1- Enable peripherals and GPIO Clocks #################################*/
  /* Enable GPIO clock ****************************************/
  __HAL_RCC_GPIOA_CLK_ENABLE();
  /* ADC1 Periph clock enable */

  /*##- 2- Configure peripheral GPIO #########################################*/
  /* ADC3 Channel8 GPIO pin configuration */
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
.........
}

编译器在行中给我一个 "comparison of distinct pointer types lacks a cast" 的警告:

if(hadc->Instance==ADC){

我做错了什么?

感谢帮助!

我几乎可以肯定 ADC 不是有效实例,您应该改用 ADC1(或 2 或其他)。

查看其中一个 STM32 头文件显示:

// stm32f030x6.h
...
#define ADC1       ((ADC_TypeDef *) ADC1_BASE)
#define ADC        ((ADC_Common_TypeDef *) ADC_BASE) /* Kept for legacy purpose */
...

这对我来说表明您可能一直在查看一个旧示例,该示例仍然存在,因此它不是未定义的符号,但是 ADC1 具有它正在寻找的类型,而 ADC 没有。