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





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









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









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





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

نمایش نتایج: از 1 به 10 از 10
  1. #1
    2016/06/25
    9
    3

    وقفه uart کتابخونه HAL

    سلام دوستان
    من با میکروکنترلر stm32f1 با کتابخونه SPL اوایل برنامه ای نوشته بودم که از وقفه سریال هی دریافت میکرد تا موقعی که کاراکتر اینتر رو دریافت کنه
    بعد ازینکه کاراکتر اینتر رو دریافت میکرد یه فلگ رو یک میکرد من تو برنامه اصلیم چک میکردم اون فلگ رو خوبم کار میکرد
    حالا میخوام با HAL اینکارو کنم
    اما نمیدونم چطوری
    سریال رو با HAL در حد دریافت و ارسال بدون وقفه کار کردم
    ممون میشم توضیح بدید کدش چطوری میشه
    وقفه سریال رو تو قسمت NVIC فعال کردم
  2. #2
    2008/10/24
    528
    140

    پاسخ : وقفه uart کتابخونه HAL

    وقت بخیر
    مثالی برای فعال سازی سریال تنظیم پورت و تنظیم سریال و تنظیم وقفه و فانکشن وقفه !! امیدوارم مفید باشد .

    کد:
    int main (void)
        
    {
        
        Usart_Configuration(buadrate);
        Init_NVIC();    
    
        
    }
    
    
    
    
    void Init_Usart(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure;                    
    
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);    
    
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ;                 //TX
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;               //alternate function out put
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //for 50Mhz
          GPIO_Init(GPIOA, &GPIO_InitStructure);                       //Init GPIOA    
    
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; 
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //output pushpull                       
          GPIO_Init(GPIOA, &GPIO_InitStructure);                       //Init GPIOA    
    
        GPIO_ResetBits(GPIOA,GPIO_Pin_4);                       //place in receive 485
    
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;              //RX
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //input flouting                       
          GPIO_Init(GPIOA, &GPIO_InitStructure);                       //Init GPIOA    
    }
    
    
    void Usart_Configuration(uint32_t BaudRate)
    {
        USART_InitTypeDef USART_InitStructure;                                    
    
        Init_Usart();           //init PORTA pin9 tx and pin10 rx
            
        USART_InitStructure.USART_BaudRate            = BaudRate ;                  
        USART_InitStructure.USART_WordLength          = USART_WordLength_8b;     
        USART_InitStructure.USART_StopBits            = USART_StopBits_1;         
        USART_InitStructure.USART_Parity              = USART_Parity_No ;         
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx; 
        USART_Init(USART1, &USART_InitStructure);                                
        
              /* Enable USARTy Receive and Transmit interrupts */
            USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
            USART_Cmd(USART1, ENABLE);                                                 
    }
    
    void Init_NVIC(void)
    {     
        NVIC_InitTypeDef    NVIC_InitStructure;
    
        #ifdef  VECT_TAB_RAM                                  //
        NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);          //0x20000000(RAM)
        #else  
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);         //0x08000000(FLASH)  
        #endif
        
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //Configure the NVIC Preemption Priority Bits
    
    
        /* Enable the USART1 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    }
    
    void USART1_IRQHandler(void)
    {
      if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
      {
            // to recive
      }
      
      if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
      { 
                // to transmit
       } 
      }
      if(USART_GetITStatus(USART1, USART_IT_TC) != RESET)
      {
            // to tranmit complete
      }  
    }
    ویرایش توسط taktrashe : 2017/07/20 در ساعت 17:52
  3. #3
    2016/06/25
    9
    3

    پاسخ : وقفه uart کتابخونه HAL

    سلام مهندس خیلی ممنون از توجهتون
    ولی عرض کردم
    با SPL رو خودم نوشتم
    الان با HAL میخوام
  4. #4
    2008/10/24
    528
    140

    پاسخ : وقفه uart کتابخونه HAL

    فکر کنم اگه با stm32cubeMx تولید بشه با hal تولید بشه ! مثال تولید کردم ولی تست نشده !!

    کد:
    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();
    
      /* Configure the system clock */
      SystemClock_Config();
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_USART1_UART_Init();
    
      /* Initialize interrupts */
      MX_NVIC_Init();
    
      /* USER CODE BEGIN 2 */
    
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
      /* USER CODE END WHILE */
    
      /* USER CODE BEGIN 3 */
    
      }
      /* USER CODE END 3 */
    
    }
    
    static void MX_NVIC_Init(void)
    {
      /* USART1_IRQn interrupt configuration */
      HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
      HAL_NVIC_EnableIRQ(USART1_IRQn);
    }
    
    /* USART1 init function */
    static 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();
      }
    
    
    void USART1_IRQHandler(void)
    {
      /* USER CODE BEGIN USART1_IRQn 0 */
    
      /* USER CODE END USART1_IRQn 0 */
      HAL_UART_IRQHandler(&huart1);
      /* USER CODE BEGIN USART1_IRQn 1 */
    
      /* USER CODE END USART1_IRQn 1 */
    }
  5. #5
    2016/06/25
    9
    3

    پاسخ : وقفه uart کتابخونه HAL

    ممنونم
    حالا من بخش دریافت رو تو کدوم قسمت کدم باید بنویسم؟چطوری باید دریافت کنم اصلا؟
  6. #6
    2008/10/24
    528
    140

    پاسخ : وقفه uart کتابخونه HAL

    توی فایلهای پروژه قسمت STM32F1xx_HAL_Driver یه فایل داره بنام stm32f1xx_hal_uart.c یک فانکشن داره بشکل زیر

    کد:
    /**
      * @brief  This function handles UART interrupt request.
      * @

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

    عضویت

    m huart: Pointer to a UART_HandleTypeDef structure that contains * the configuration information for the specified UART module. * @retval None */ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) { uint32_t tmp_flag = 0, tmp_it_source = 0; tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_PE); tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_PE); /* UART parity error interrupt occurred ------------------------------------*/ if((tmp_flag != RESET) && (tmp_it_source != RESET)) { huart->ErrorCode |= HAL_UART_ERROR_PE; } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_FE); tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR); /* UART frame error interrupt occurred -------------------------------------*/ if((tmp_flag != RESET) && (tmp_it_source != RESET)) { huart->ErrorCode |= HAL_UART_ERROR_FE; } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_NE); /* UART noise error interrupt occurred -------------------------------------*/ if((tmp_flag != RESET) && (tmp_it_source != RESET)) { huart->ErrorCode |= HAL_UART_ERROR_NE; } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE); /* UART Over-Run interrupt occurred ----------------------------------------*/ if((tmp_flag != RESET) && (tmp_it_source != RESET)) { huart->ErrorCode |= HAL_UART_ERROR_ORE; } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE); tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE); /* UART in mode Receiver ---------------------------------------------------*/ if((tmp_flag != RESET) && (tmp_it_source != RESET)) { UART_Receive_IT(huart); } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_TXE); tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_TXE); /* UART in mode Transmitter ------------------------------------------------*/ if((tmp_flag != RESET) && (tmp_it_source != RESET)) { UART_Transmit_IT(huart); } tmp_flag = __HAL_UART_GET_FLAG(huart, UART_FLAG_TC); tmp_it_source = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_TC); /* UART in mode Transmitter end --------------------------------------------*/ if((tmp_flag != RESET) && (tmp_it_source != RESET)) { UART_EndTransmit_IT(huart); } if(huart->ErrorCode != HAL_UART_ERROR_NONE) { /* Clear all the error flag at once */ __HAL_UART_CLEAR_PEFLAG(huart); /* Set the UART state ready to be able to start again the process */ huart->State = HAL_UART_STATE_READY; HAL_UART_ErrorCallback(huart); } }
    که هر قسمت رو میتونی کد بذاری و برای دریافت از سریال UART_FLAG_RXNE فلاگ هست البته فکر کنم خودش یک بافر هم تعریف میکنه ولی شما میتونی خودت تغییر بدی .
  7. #7
    2016/06/25
    9
    3

    پاسخ : وقفه uart کتابخونه HAL

    خیلی ممنون از شما لطف کردید
  8. #8
    2008/10/24
    528
    140

    پاسخ : وقفه uart کتابخونه HAL

    نقل قول نوشته اصلی توسط mp.pezhvak

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

    عضویت

    خیلی ممنون از شما لطف کردید
    خواهش میکنم امیدوارم مفید باشه !! برای تشکر از دگمه تشکر استفاده کنید !
  9. #9
    2008/12/26
    383
    114

    پاسخ : وقفه uart کتابخونه HAL

    نقل قول نوشته اصلی توسط mp.pezhvak

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

    عضویت

    ممنونم
    حالا من بخش دریافت رو تو کدوم قسمت کدم باید بنویسم؟چطوری باید دریافت کنم اصلا؟
    سلام
    در این قسمت HAL_UART_RxCpltCallback
    زیر برنامه وقفه

    این دستور فعال کردن وقفه
    __HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE)

    فیلم اموزشی

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

    عضویت



    برنامه نمونه

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

    عضویت


    ویرایش توسط mahdi8866 : 2017/07/22 در ساعت 05:41
  10. #10
    2016/08/22
    44
    8

    پاسخ : وقفه uart کتابخونه HAL

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

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

    عضویت

    سلام
    در این قسمت HAL_UART_RxCpltCallback
    زیر برنامه وقفه

    این دستور فعال کردن وقفه
    __HAL_UART_ENABLE_IT(&huart3, UART_IT_RXNE)

    فیلم اموزشی

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

    عضویت



    برنامه نمونه

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

    عضویت


    خیلی جالب بود.
    برای بخشهای دیگه مثل USB و ADC هم ویدئو اموزشی داری؟
نمایش نتایج: از 1 به 10 از 10

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

  1. مثال uart با وقفه
    توسط n340 در انجمن NXP
    پاسخ: 12
    آخرين نوشته: 2014/11/09, 11:32
  2. دريافت uart با وقفه
    توسط m4hd1r در انجمن NXP
    پاسخ: 5
    آخرين نوشته: 2014/07/24, 16:27
  3. خارج شدن از وقفه دریافت UART
    توسط soodi در انجمن NXP
    پاسخ: 11
    آخرين نوشته: 2014/03/09, 17:43
  4. آیا ارتباط spi ، وقفه uart رو بهم میریزه؟
    توسط ardavanzzz در انجمن میکروکنترلرهای AVR
    پاسخ: 11
    آخرين نوشته: 2012/06/19, 07:42
  5. وقفه UART در CCS و نمایش ارایه روی LCD
    توسط lpln852 در انجمن میکروکنترلرهای PIC
    پاسخ: 7
    آخرين نوشته: 2011/02/21, 13:58

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

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

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

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

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