ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 2 از 2
  1. #1
    2010/09/19
    همدان
    22
    2

    مشکل با دریافت اطلاعات از SPI در میکرو STM32

    سلام دوستان
    یه برنامه توی کیل نوشتم که اطلاعات رو از SPI1 ارسال میکنم و توی SPI2 اون رو دریافت میکنم . موقع ازسال و دریافت اطلاعات هم وقفه رو فعال کردم.
    مشکل من اینجاست که اطلاعات درستی دریافت نمیکم (ارسال درست انجام میشه و وقفه های ارسال و دریافت هم عمل میکنن ولی دیتا درست دریافت نمیشه)
    برنامه با STM32CUBEMX نوشته شده (HAL)
    کد:
    #include "main.h"
    #include "stm32f4xx_hal.h"
    #include <stdio.h>
    #include <string.h>
    
    
    SPI_HandleTypeDef hspi1;
    SPI_HandleTypeDef hspi2;
    
    
    char Data_Tx2=1;
    char Data_Rx=0;
    char i=0;
    
    
    /* Private function prototypes -----------------------------------------------*/
    void SystemClock_Config(void);
    static void MX_GPIO_Init(void);
    static void MX_SPI1_Init(void);
    static void MX_SPI2_Init(void);
    
    
    void HAL_SPI_RxCpltCallback (SPI_HandleTypeDef * hspi)
    {
    
    
      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1); 
    
    
        for(i=0;i<Data_Rx;i++)
        {
           HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
          HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);   
          }
    
    
      HAL_SPI_Receive_IT(&hspi2,(uint8_t*)&Data_Rx,1);
    
    
    }
    
    
    void HAL_SPI_TxCpltCallback (SPI_HandleTypeDef * hspi)
    {
    
    
      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
    
    
    }
    
    
    
    
    int main(void)
    {
    
    
      HAL_Init();
    
    
      /* Configure the system clock */
      SystemClock_Config();
    
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_SPI1_Init();
      MX_SPI2_Init();
    
    
     HAL_SPI_Receive_IT(&hspi2,(uint8_t*)&Data_Rx,1);
    
    
      while (1)
      {
      HAL_SPI_Transmit_IT(&hspi1,(uint8_t*)&Data_Tx2,1);
      while(HAL_SPI_GetState(&hspi1)!=HAL_SPI_STATE_READY);
      HAL_Delay(100); 
    
    
      Data_Tx2++;
      }
    
    
    }
    
    
    
    
    void SystemClock_Config(void)
    {
    
    
      RCC_OscInitTypeDef RCC_OscInitStruct;
      RCC_ClkInitTypeDef RCC_ClkInitStruct;
    
    
        /**Configure the main internal regulator output voltage 
        */
      __HAL_RCC_PWR_CLK_ENABLE();
    
    
      __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
    
    
        /**Initializes the CPU, AHB and APB busses clocks 
        */
      RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
      RCC_OscInitStruct.HSIState = RCC_HSI_ON;
      RCC_OscInitStruct.HSICalibrationValue = 16;
      RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
      if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
    
        /**Initializes the CPU, AHB and APB busses clocks 
        */
      RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                  |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
      RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
      RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
      RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
      RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    
    
      if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
    
        /**Configure the Systick interrupt time 
        */
      HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
    
    
        /**Configure the Systick 
        */
      HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
    
    
      /* SysTick_IRQn interrupt configuration */
      HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
    }
    
    
    /* SPI1 init function */
    static void MX_SPI1_Init(void)
    {
    
    
      /* SPI1 parameter configuration*/
      hspi1.Instance = SPI1;
      hspi1.Init.Mode = SPI_MODE_MASTER;
      hspi1.Init.Direction = SPI_DIRECTION_2LINES;
      hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
      hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
      hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
      hspi1.Init.NSS = SPI_NSS_SOFT;
      hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
      hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
      hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
      hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
      hspi1.Init.CRCPolynomial = 10;
      if (HAL_SPI_Init(&hspi1) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
    
    }
    
    
    /* SPI2 init function */
    static void MX_SPI2_Init(void)
    {
    
    
      /* SPI2 parameter configuration*/
      hspi2.Instance = SPI2;
      hspi2.Init.Mode = SPI_MODE_SLAVE;
      hspi2.Init.Direction = SPI_DIRECTION_2LINES;
      hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
      hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
      hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
      hspi2.Init.NSS = SPI_NSS_HARD_INPUT;
      hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
      hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
      hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
      hspi2.Init.CRCPolynomial = 10;
      if (HAL_SPI_Init(&hspi2) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
    
    }
    
    
    /** Configure pins as 
            * Analog 
            * Input 
            * Output
            * EVENT_OUT
            * EXTI
    */
    static void MX_GPIO_Init(void)
    {
    
    
      GPIO_InitTypeDef GPIO_InitStruct;
    
    
      /* GPIO Ports Clock Enable */
      __HAL_RCC_GPIOC_CLK_ENABLE();
      __HAL_RCC_GPIOA_CLK_ENABLE();
      __HAL_RCC_GPIOB_CLK_ENABLE();
    
    
      /*Configure GPIO pin Output Level */
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);
    
    
      /*Configure GPIO pins : PB0 PB1 */
      GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
      GPIO_InitStruct.Pull = GPIO_PULLDOWN;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
    
    }
    
    
    /* USER CODE BEGIN 4 */
    
    
    /* USER CODE END 4 */
    
    
    /**
      * @brief  This function is executed in case of error occurrence.
      * [MENTION=17545]para[/MENTION]m  file: The file name as string.
      * [MENTION=17545]para[/MENTION]m  line: The line in file as a number.
      * @retval None
      */
    void _Error_Handler(char *file, int line)
    {
      /* USER CODE BEGIN Error_Handler_Debug */
      /* User can add his own implementation to report the HAL error return state */
      while(1)
      {
      }
      /* 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(uint8_t* 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****/
      
    [/LEFT]
  2. #2
    2008/11/04
    491
    488

    پاسخ : مشکل با دریافت اطلاعات از SPI در میکرو STM32

    نقل قول نوشته اصلی توسط ahmadelectronic

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام دوستان
    یه برنامه توی کیل نوشتم که اطلاعات رو از SPI1 ارسال میکنم و توی SPI2 اون رو دریافت میکنم . موقع ازسال و دریافت اطلاعات هم وقفه رو فعال کردم.
    مشکل من اینجاست که اطلاعات درستی دریافت نمیکم (ارسال درست انجام میشه و وقفه های ارسال و دریافت هم عمل میکنن ولی دیتا درست دریافت نمیشه)
    سلام،
    من فرصت نکردم برنامه ات رو نگاه کنم،
    چیزی که به ذهن من میرسه، اینه که:
    سرعت انتقالتون چقدر است؟!
    توی STM32 پریفرال SPI1 روی باس داخلی APB2 است و بقیه SPI-2-3-4-... روی باس APB1 قرار دارند!
    و از اونجایی که حداکثر سرعت مجاز APB2 دو برابر حداکثر سرعت APB1 میباشد! رعایت نکردن سرعت حداکثر APB1 میتونه مشکل ساز باشه!!
    بررسی کن ببین مربوط به این موضوع نیست؟
    ویرایش توسط ubub : 2018/04/16 در ساعت 08:45
    ◙◙◙◙◙ میخوام به دوستان یه کتاب معرفی کنم! وقت کردید، بخونید - اسمش هست قرآن، سال نشر 10، نویسنده: خدا . ◙◙◙◙◙
نمایش نتایج: از 1 به 2 از 2

موضوعات مشابه

  1. ارسال و دریافت اطلاعات بین میکرو و کامپیوتر
    توسط mania59 در انجمن میکروکنترلرهای AVR
    پاسخ: 16
    آخرين نوشته: 2019/01/31, 19:16
  2. کد بهینه برای دریافت اطلاعات عکس از میکرو sd ونمایش در lcdn96
    توسط ARM_CORE در انجمن میکروکنترلرهای AVR
    پاسخ: 0
    آخرين نوشته: 2016/04/04, 16:23
  3. دریافت اطلاعات از ds1307 با چند عدد میکرو avr
    توسط haghshenasmahdi در انجمن میکروکنترلرهای AVR
    پاسخ: 0
    آخرين نوشته: 2015/07/02, 00:42
  4. پاسخ: 7
    آخرين نوشته: 2015/06/06, 23:15
  5. مشکل در ارسال و دریافت اطلاعات با پایه های TX و RX میکرو
    توسط amir_tm در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2015/04/15, 08:58

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •