اطلاعیه

Collapse
No announcement yet.

خطای نشناختن hadc1 در IAR

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    خطای نشناختن hadc1 در IAR

    سلام
    وقت بخیر
    با استفاده از STM32CubeMX یک کد برای STM32F030F4P6 تولید کردم. ADC رو هم فعال کردم.
    برنامه زیر رو نوشتم:
    HAL_ADC_Init(&hadc1);

    if (HAL_ADC_PollForConversion(&hadc1, 1000000) == HAL_OK)
    {
    g_ADCValue = HAL_ADC_GetValue(&1);
    g_MeasurementNumber++;
    }

    این خطاها رو میگیره:
    HAL_ADC_Init(&hadc1);
    Error[Pe020]: identifier "hadc1" is undefined


    g_ADCValue = HAL_ADC_GetValue(&1);
    Error[Pe158]: expression must be an lvalue or a function designator

    مشکل کجاست؟
    ممنون

    #2
    پاسخ : خطای نشناختن hadc1 در IAR

    نوشته اصلی توسط alimoji نمایش پست ها
    سلام
    وقت بخیر
    با استفاده از STM32CubeMX یک کد برای STM32F030F4P6 تولید کردم. ADC رو هم فعال کردم.
    برنامه زیر رو نوشتم:
    HAL_ADC_Init(&hadc1);

    if (HAL_ADC_PollForConversion(&hadc1, 1000000) == HAL_OK)
    {
    g_ADCValue = HAL_ADC_GetValue(&1);
    g_MeasurementNumber++;
    }

    این خطاها رو میگیره:
    HAL_ADC_Init(&hadc1);
    Error[Pe020]: identifier "hadc1" is undefined


    g_ADCValue = HAL_ADC_GetValue(&1);
    Error[Pe158]: expression must be an lvalue or a function designator

    مشکل کجاست؟
    ممنون
    سلام
    مورد اول که کاملا مشخصه! حتما یا hadc1 تعریف نشده، یا در جای نامناسب ازش استفاده شده که بازم توسط کامپایلر شناسایی نمیشه.
    اما در مورد دومین خطا. عملگر& دوتا کار انجام میده؛ اگر بین دو عدد یا متغیر قرار بگیره اونا رو باهم AND بیتی میکنه و اگر جایی فقط قبل از یک متغیر قرار بگیره، آدرس اون متغیر رو بر میگردونه. شما اومدید از نوع دومش استفاده کردید و جالب اینه بجای متغیر بهش عدد دادید! عدد که آدرس نداره! بخاطر همین ایراد گرفته.

    دیدگاه


      #3
      پاسخ : خطای نشناختن hadc1 در IAR

      سلام
      ممنون
      ولی وقتی کد رو با CubeMX تولید می کنیم همه defineها و متغیرهای مورد نیاز رو تعریف می کنه.
      نمونه برنامه دارید برام بفرستید؟
      سپاسگزارم

      دیدگاه


        #4
        پاسخ : خطای نشناختن hadc1 در IAR

        نوشته اصلی توسط alimoji نمایش پست ها
        سلام
        ممنون
        ولی وقتی کد رو با CubeMX تولید می کنیم همه defineها و متغیرهای مورد نیاز رو تعریف می کنه.
        نمونه برنامه دارید برام بفرستید؟
        سپاسگزارم
        شما برنامتونو بفرستید تا اینجا بررسی کنیم. کامپایلر استاندارد ایراد بی جهت نمیگیره؛ همونطوری که گفتم برنامتون صد درصد ایراد داشته.

        دیدگاه


          #5
          پاسخ : خطای نشناختن hadc1 در IAR

          چطور میتونم فایل زیپ رو اینجا بذارم؟ آپلود یا ضمیمه ندیدم.
          یا ایمیل بدین برات بفرستم

          دیدگاه


            #6
            پاسخ : خطای نشناختن hadc1 در IAR

            نوشته اصلی توسط alimoji نمایش پست ها
            چطور میتونم فایل زیپ رو اینجا بذارم؟ آپلود یا ضمیمه ندیدم.
            یا ایمیل بدین برات بفرستم
            فایل زیپ نمیخواد بفرسید. همون کد اصلی رو کپی کنید اینجا. ضمنا برای فرستادن کد حتما از تگ CPP استفاده کنید. توی نوار بالایی ویرایشگر متن انجمن تگ ها رو میبینید.

            دیدگاه


              #7
              پاسخ : خطای نشناختن hadc1 در IAR

              [FONT=Yekan]/* USER CODE BEGIN Header */[/FONT]/**
              ******************************************************************************
              * @file : main.c
              * @brief : Main program body
              ******************************************************************************
              * @attention
              *
              * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
              * All rights reserved.</center></h2>
              *
              * This software component is licensed by ST under BSD 3-Clause license,
              * the "License"; You may not use this file except in compliance with the
              * License. You may obtain a copy of the License at:
              * opensource.org/licenses/BSD-3-Clause
              *
              ******************************************************************************
              */
              /* USER CODE END Header */


              /* Includes ------------------------------------------------------------------*/
              #include "main.h"


              /* Private includes ----------------------------------------------------------*/
              /* USER CODE BEGIN Includes */


              /* USER CODE END Includes */


              /* Private typedef -----------------------------------------------------------*/
              /* USER CODE BEGIN PTD */


              /* USER CODE END PTD */


              /* Private define ------------------------------------------------------------*/
              /* USER CODE BEGIN PD */
              /* USER CODE END PD */


              /* Private macro -------------------------------------------------------------*/
              /* USER CODE BEGIN PM */


              /* USER CODE END PM */


              /* Private variables ---------------------------------------------------------*/
              ADC_HandleTypeDef hadc;


              /* USER CODE BEGIN PV */


              /* USER CODE END PV */


              /* Private function prototypes -----------------------------------------------*/
              void SystemClock_Config(void);
              static void MX_GPIO_Init(void);
              static void MX_ADC_Init(void);
              /* USER CODE BEGIN PFP */


              /* USER CODE END PFP */


              /* Private user code ---------------------------------------------------------*/
              /* USER CODE BEGIN 0 */


              /* USER CODE END 0 */


              /**
              * @brief The application entry point.
              * @retval int
              */
              uint32_t g_ADCValue;
              int g_MeasurementNumber;




              int main(void)
              {
              /* USER CODE BEGIN 1 */


              /* USER CODE END 1 */



              /* MCU Configuration--------------------------------------------------------*/


              /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
              HAL_Init();


              /* USER CODE BEGIN Init */


              /* USER CODE END Init */


              /* Configure the system clock */
              SystemClock_Config();


              /* USER CODE BEGIN SysInit */


              /* USER CODE END SysInit */


              /* Initialize all configured peripherals */
              MX_GPIO_Init();
              MX_ADC_Init();
              /* USER CODE BEGIN 2 */


              /* USER CODE END 2 */

              HAL_ADC_Init(&hadc1);
              for (;;)
              {
              if (HAL_ADC_PollForConversion(&hadc1, 1000000) == HAL_OK)
              {
              g_ADCValue = HAL_ADC_GetValue(&1);
              g_MeasurementNumber++;
              }
              } /* USER CODE END 3 */
              }


              /**
              * @brief System Clock Configuration
              * @retval None
              */
              void SystemClock_Config(void)
              {
              RCC_OscInitTypeDef RCC_OscInitStruct = {0};
              RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


              /** Initializes the CPU, AHB and APB busses clocks
              */
              RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSI14;
              RCC_OscInitStruct.HSIState = RCC_HSI_ON;
              RCC_OscInitStruct.HSI14State = RCC_HSI14_ON;
              RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
              RCC_OscInitStruct.HSI14CalibrationValue = 16;
              RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
              if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
              {
              Error_Handler();
              }
              /** Initializes the CPU, AHB and APB busses clocks
              */
              RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
              |RCC_CLOCKTYPE_PCLK1;
              RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
              RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
              RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;


              if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
              {
              Error_Handler();
              }
              }


              /**
              * @brief ADC Initialization Function
              * [MENTION=17545]para[/MENTION]m None
              * @retval None
              */
              static void MX_ADC_Init(void)
              {


              /* USER CODE BEGIN ADC_Init 0 */


              /* USER CODE END ADC_Init 0 */


              ADC_ChannelConfTypeDef sConfig = {0};


              /* USER CODE BEGIN ADC_Init 1 */


              /* USER CODE END ADC_Init 1 */
              /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
              */
              hadc.Instance = ADC1;
              hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
              hadc.Init.Resolution = ADC_RESOLUTION_12B;
              hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
              hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
              hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
              hadc.Init.LowPowerAutoWait = DISABLE;
              hadc.Init.LowPowerAutoPowerOff = DISABLE;
              hadc.Init.ContinuousConvMode = DISABLE;
              hadc.Init.DiscontinuousConvMode = DISABLE;
              hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
              hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
              hadc.Init.DMAContinuousRequests = DISABLE;
              hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;
              if (HAL_ADC_Init(&hadc) != HAL_OK)
              {
              Error_Handler();
              }
              /** Configure for the selected ADC regular channel to be converted.
              */
              sConfig.Channel = ADC_CHANNEL_0;
              sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
              sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
              if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
              {
              Error_Handler();
              }
              /** Configure for the selected ADC regular channel to be converted.
              */
              sConfig.Channel = ADC_CHANNEL_1;
              if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
              {
              Error_Handler();
              }
              /* USER CODE BEGIN ADC_Init 2 */


              /* USER CODE END ADC_Init 2 */


              }


              /**
              * @brief GPIO Initialization Function
              * [MENTION=17545]para[/MENTION]m None
              * @retval None
              */
              static void MX_GPIO_Init(void)
              {


              /* GPIO Ports Clock Enable */
              __HAL_RCC_GPIOA_CLK_ENABLE();


              }


              /* USER CODE BEGIN 4 */


              /* USER CODE END 4 */


              /**
              * @brief This function is executed in case of error occurrence.
              * @retval None
              */
              void Error_Handler(void)
              {
              /* USER CODE BEGIN Error_Handler_Debug */
              /* User can add his own implementation to report the HAL error return state */


              /* USER CODE END Error_Handler_Debug */
              }


              #ifdef USE_FULL_ASSERT
              /**
              * @brief Reports the name of the source file and the source line number
              * where the assert_param error has occurred.
              * [MENTION=17545]para[/MENTION]m file: pointer to the source file name
              * [MENTION=17545]para[/MENTION]m line: assert_param error line source number
              * @retval None
              */
              void assert_failed(char *file, uint32_t line)
              {
              /* USER CODE BEGIN 6 */
              /* User can add his own implementation to report the file name and line number,
              tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
              /* USER CODE END 6 */
              }
              #endif /* USE_FULL_ASSERT */


              /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


              دیدگاه


                #8
                پاسخ : خطای نشناختن hadc1 در IAR

                نوشته اصلی توسط alimoji نمایش پست ها
                [FONT=Yekan]/* USER CODE BEGIN Header */[/FONT]/**
                ******************************************************************************
                * @file : main.c
                * @brief : Main program body
                ******************************************************************************
                * @attention
                *
                * <h2><center>© Copyright (c) 2020 STMicroelectronics.
                * All rights reserved.</center></h2>
                *
                * This software component is licensed by ST under BSD 3-Clause license,
                * the "License"; You may not use this file except in compliance with the
                * License. You may obtain a copy of the License at:
                * opensource.org/licenses/BSD-3-Clause
                *
                ******************************************************************************
                */
                /* USER CODE END Header */


                /* Includes ------------------------------------------------------------------*/
                #include "main.h"


                /* Private includes ----------------------------------------------------------*/
                /* USER CODE BEGIN Includes */


                /* USER CODE END Includes */


                /* Private typedef -----------------------------------------------------------*/
                /* USER CODE BEGIN PTD */


                /* USER CODE END PTD */


                /* Private define ------------------------------------------------------------*/
                /* USER CODE BEGIN PD */
                /* USER CODE END PD */


                /* Private macro -------------------------------------------------------------*/
                /* USER CODE BEGIN PM */


                /* USER CODE END PM */


                /* Private variables ---------------------------------------------------------*/
                ADC_HandleTypeDef hadc;


                /* USER CODE BEGIN PV */


                /* USER CODE END PV */


                /* Private function prototypes -----------------------------------------------*/
                void SystemClock_Config(void);
                static void MX_GPIO_Init(void);
                static void MX_ADC_Init(void);
                /* USER CODE BEGIN PFP */


                /* USER CODE END PFP */


                /* Private user code ---------------------------------------------------------*/
                /* USER CODE BEGIN 0 */


                /* USER CODE END 0 */


                /**
                * @brief The application entry point.
                * @retval int
                */
                uint32_t g_ADCValue;
                int g_MeasurementNumber;




                int main(void)
                {
                /* USER CODE BEGIN 1 */


                /* USER CODE END 1 */



                /* MCU Configuration--------------------------------------------------------*/


                /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
                HAL_Init();


                /* USER CODE BEGIN Init */


                /* USER CODE END Init */


                /* Configure the system clock */
                SystemClock_Config();


                /* USER CODE BEGIN SysInit */


                /* USER CODE END SysInit */


                /* Initialize all configured peripherals */
                MX_GPIO_Init();
                MX_ADC_Init();
                /* USER CODE BEGIN 2 */


                /* USER CODE END 2 */

                HAL_ADC_Init(&hadc1);
                for (;;)
                {
                if (HAL_ADC_PollForConversion(&hadc1, 1000000) == HAL_OK)
                {
                g_ADCValue = HAL_ADC_GetValue(&1);
                g_MeasurementNumber++;
                }
                } /* USER CODE END 3 */
                }


                /**
                * @brief System Clock Configuration
                * @retval None
                */
                void SystemClock_Config(void)
                {
                RCC_OscInitTypeDef RCC_OscInitStruct = {0};
                RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


                /** Initializes the CPU, AHB and APB busses clocks
                */
                RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSI14;
                RCC_OscInitStruct.HSIState = RCC_HSI_ON;
                RCC_OscInitStruct.HSI14State = RCC_HSI14_ON;
                RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
                RCC_OscInitStruct.HSI14CalibrationValue = 16;
                RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
                if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
                {
                Error_Handler();
                }
                /** Initializes the CPU, AHB and APB busses clocks
                */
                RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                |RCC_CLOCKTYPE_PCLK1;
                RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
                RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
                RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;


                if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
                {
                Error_Handler();
                }
                }


                /**
                * @brief ADC Initialization Function
                * [MENTION=17545]para[/MENTION]m None
                * @retval None
                */
                static void MX_ADC_Init(void)
                {


                /* USER CODE BEGIN ADC_Init 0 */


                /* USER CODE END ADC_Init 0 */


                ADC_ChannelConfTypeDef sConfig = {0};


                /* USER CODE BEGIN ADC_Init 1 */


                /* USER CODE END ADC_Init 1 */
                /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
                */
                hadc.Instance = ADC1;
                hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
                hadc.Init.Resolution = ADC_RESOLUTION_12B;
                hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
                hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
                hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
                hadc.Init.LowPowerAutoWait = DISABLE;
                hadc.Init.LowPowerAutoPowerOff = DISABLE;
                hadc.Init.ContinuousConvMode = DISABLE;
                hadc.Init.DiscontinuousConvMode = DISABLE;
                hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
                hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
                hadc.Init.DMAContinuousRequests = DISABLE;
                hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;
                if (HAL_ADC_Init(&hadc) != HAL_OK)
                {
                Error_Handler();
                }
                /** Configure for the selected ADC regular channel to be converted.
                */
                sConfig.Channel = ADC_CHANNEL_0;
                sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
                sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
                if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
                {
                Error_Handler();
                }
                /** Configure for the selected ADC regular channel to be converted.
                */
                sConfig.Channel = ADC_CHANNEL_1;
                if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
                {
                Error_Handler();
                }
                /* USER CODE BEGIN ADC_Init 2 */


                /* USER CODE END ADC_Init 2 */


                }


                /**
                * @brief GPIO Initialization Function
                * [MENTION=17545]para[/MENTION]m None
                * @retval None
                */
                static void MX_GPIO_Init(void)
                {


                /* GPIO Ports Clock Enable */
                __HAL_RCC_GPIOA_CLK_ENABLE();


                }


                /* USER CODE BEGIN 4 */


                /* USER CODE END 4 */


                /**
                * @brief This function is executed in case of error occurrence.
                * @retval None
                */
                void Error_Handler(void)
                {
                /* USER CODE BEGIN Error_Handler_Debug */
                /* User can add his own implementation to report the HAL error return state */


                /* USER CODE END Error_Handler_Debug */
                }


                #ifdef USE_FULL_ASSERT
                /**
                * @brief Reports the name of the source file and the source line number
                * where the assert_param error has occurred.
                * [MENTION=17545]para[/MENTION]m file: pointer to the source file name
                * [MENTION=17545]para[/MENTION]m line: assert_param error line source number
                * @retval None
                */
                void assert_failed(char *file, uint32_t line)
                {
                /* USER CODE BEGIN 6 */
                /* User can add his own implementation to report the file name and line number,
                tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
                /* USER CODE END 6 */
                }
                #endif /* USE_FULL_ASSERT */


                /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


                خوب ایراد کار مشخص شد! نگاه کنید توی خط 52 تعریف شده hadc ولی شما توی برنامه خودتون hadc1 گذاشتید. ضمنا داخل تابع HAL_ADC_GetValue توی خط 133 شما باید مینوشتید hadc& تا درست کار کنه. همونطوری که گفتم 1& اصلا معنی نداره!!

                دیدگاه


                  #9
                  پاسخ : خطای نشناختن hadc1 در IAR

                  سپاس
                  ممنون از لطف تون

                  دیدگاه

                  لطفا صبر کنید...
                  X