اطلاعیه

Collapse
No announcement yet.

stm32f107 64pin مشکل uart

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

    stm32f107 64pin مشکل uart

    با سلام
    من تا حالا با پرسورهای nxp کار می کردم و بخاطر برخی مسایل ( قیمت و .. ) تصیمی گرفتم پروژه جدیدم رو با st کار کنم یک برد با stm32f107 زدم البته 64 پین .
    ولی برد با استفاده از usart1 اصلا پرگرام نمیشه ( با برنامه falsh loader ) البته پینهای ریست و boot رو هم استفاده می کنم .
    ولی با دیباگر stdlink پرگرام میشود و تمام قسمتهای سخت افزاری مشکلی ندارد .
    ولی وقتی هم با دیباگر پراگرام شد ؛ uart1 , uart5 در rx l مشکل دارم ولی tx هر دو پروت به خوبی کار می کنه .
    اصلا در هیچکدام از اینتراپتهای دریافت پورت سریال برنامه وارد نمیشه .
    بدلیل اینکه با flash loader هم مشکل دارم فکر می کنم باید مشکل سخت افزاری باشه ولی هرچقدر چک می کنم در سخت افزاری چیزی پیدا نکردم .
    در صورت امکان بفرمایید مشکل از کجا می تونه باشه

    http://s8.picofile.com/file/8351393292/CPU_SchDoc.html

    #2
    پاسخ : stm32f107 64pin مشکل uart

    مشکل پرگرام کردن و ارتباط با falsh loader حل شد و بخاطر مشکل دار بودن پایه ریست بود ( احتمالا )
    ولی برنامه هنوز هم در هیچ کدام از اینتراپتهای پورت سریال وارد نمی شود .
    برنامه را با stm32cube درست کردم و ide که استفاده می کنم sw4stm32 است :




    کد:
    void MX_USART1_UART_Init(void)
    {
    
      huart1.Instance = USART1;
      huart1.Init.BaudRate = 115200;
      huart1.Init.WordLength = UART_WORDLENGTH_8B;
      huart1.Init.StopBits = UART_STOPBITS_1;
      huart1.Init.Parity = UART_PARITY_NONE;
      huart1.Init.Mode = UART_MODE_TX_RX;
      huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
      huart1.Init.OverSampling = UART_OVERSAMPLING_16;
      if (HAL_UART_Init(&huart1) != HAL_OK)
      {
        _Error_Handler(__FILE__, __LINE__);
      }
    
    }



    کد:
    void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
    {
    
      GPIO_InitTypeDef GPIO_InitStruct;
      if(uartHandle->Instance==UART5)
      {
      /* USER CODE BEGIN UART5_MspInit 0 */
    
      /* USER CODE END UART5_MspInit 0 */
        /* UART5 clock enable */
        __HAL_RCC_UART5_CLK_ENABLE();
      
        /**UART5 GPIO Configuration    
        PC12     ------> UART5_TX
        PD2     ------> UART5_RX 
        */
        GPIO_InitStruct.Pin = GPIO_PIN_12;
     //   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    
        GPIO_InitStruct.Pin = GPIO_PIN_2;
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT ;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
           HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
        HAL_NVIC_SetPriority(UART5_IRQn,0, 0);
           HAL_NVIC_EnableIRQ(UART5_IRQn);
    
      /* USER CODE BEGIN UART5_MspInit 1 */
    
      /* USER CODE END UART5_MspInit 1 */
      }
      else if(uartHandle->Instance==USART1)
      {
      /* USER CODE BEGIN USART1_MspInit 0 */
    
      /* USER CODE END USART1_MspInit 0 */
        /* USART1 clock enable */
        __HAL_RCC_USART1_CLK_ENABLE();
      
        /**USART1 GPIO Configuration    
        PA9     ------> USART1_TX
        PA10     ------> USART1_RX 
        */
        GPIO_InitStruct.Pin = GPIO_PIN_9;
           GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
           GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
           HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
           GPIO_InitStruct.Pin = GPIO_PIN_10;
           GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
           GPIO_InitStruct.Pull = GPIO_NOPULL;
           HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
       // USART_ITConfig(USART1, UART_IT_RXNE, ENABLE);
        /* USART1 interrupt Init */
        HAL_NVIC_EnableIRQ(USART1_IRQn);
        HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
    
         /* USER CODE BEGIN USART1_MspInit 1 */
    
      /* USER CODE END USART1_MspInit 1 */
      }
    }


    کد:
    void USART1_IRQHandler(void)
    {
      /* USER CODE BEGIN USART1_IRQn 0 */
        //USART1_IRQn
      /* USER CODE END USART1_IRQn 0 */
      HAL_UART_IRQHandler(&huart1);
      HAL_UART_Receive_IT(&huart1, bufferrx, 1);
      /* USER CODE BEGIN USART1_IRQn 1 */
    
      /* USER CODE END USART1_IRQn 1 */
    }
    جدیدترین ویرایش توسط dariush_abbasi868; ۰۹:۰۰ ۱۳۹۷/۱۱/۲۱.

    دیدگاه


      #3
      پاسخ : stm32f107 64pin مشکل uart

      سلام
      دستور usart_itconfig رو از حالت کامنت بیرون بیارید و داخل کیوب بخش nvic به وقفه پورت سریال یک priority اختصاص بدید

      دیدگاه


        #4
        پاسخ : stm32f107 64pin مشکل uart

        با سلام و با تشکر
        دستور usart_itconfig رو از یک جای دیگر و رای یک IDE دیگر بود که اضاقه کردم ولی ظاهرا اصلا وجود ندارد در اینجا و ERROR می دهد ، ضمن اینکه کد CUBE هم چنین چیزی خروجی نمی دهد به هیمن خاطر کامنتش کردم .
        PRIORTY وقفه ها دستی داده شود و با CUBE هم اصلا ح شد ولی فرقی نکرد

        دیدگاه

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