【问题标题】:Distinct pointer types lacks a cast in c不同的指针类型在 c 中缺少强制转换
【发布时间】:2020-06-01 15:30:14
【问题描述】:

我正在使用 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);
.........
}

编译器在行上给我一个“不同指针类型的比较缺少强制转换”的警告:

if(hadc->Instance==ADC){

我做错了什么?

感谢您的帮助!

【问题讨论】:

  • hadc->Instance和ADC有哪些类型?
  • 您似乎同时拥有一个名为 hadc 的全局变量和一个本地变量?
  • hadc->Instance 的类型为ADC_TypeDef *,据记载它是寄存器基地址。 ADC 是否有可能实际引用特定的 ADC 寄存器(例如,ADC1)?

标签: c pointers adc st


【解决方案1】:

我几乎可以肯定 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 没有。

【讨论】:

  • 了不起的家伙! ADC1 它是...谢谢!
猜你喜欢
  • 2021-01-14
  • 2018-11-23
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
相关资源
最近更新 更多