реклама на сайте
подробности

 
 
> Проблема с флагом USART_FLAG_RXNE в USART3
Salamander
сообщение Mar 9 2015, 18:50
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Господа, есть проблемка.
ПРи попытке переделать рабочий и отлаженный код на STM3F103REt6 с USART1 на USART3 зависает прием.
Точнее, базовые операции работают, через Terminal я с контроллером разговариваю. Но когда заливаю прошивку через USART по протоколу YModem, не сбрасывается флаг USART_FLAG_RXNE
Вот функция из-за которой происходит зависание, то есть она вызывается в цикле и нулевой результат, возвращаемый ею приводит к зависанию цикла и прекращению его лишь после таймаута:
Код
uint32_t SerialKeyPressed(uint8_t *key)
{

  if ( USART_GetFlagStatus(EVAL_COM3, USART_FLAG_RXNE) != RESET)
  {
    *key = (uint8_t)EVAL_COM3->DR;
    return 1;
  }
  else
  {
    return 0;
  }
}


Вот настройка USART

Код
oid BT_USART_Init(void)
{
  USART_InitTypeDef USART_InitStructure;
      NVIC_InitTypeDef  NVIC_InitStructure;

RCC->APB1ENR |= RCC_APB1ENR_USART3EN;
    
    /* Enable Clock and clock For REMAP - RCC_APB2Periph_AFIO                                             */

                     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO, ENABLE); // Alternate Function

                 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);

    
    
    /* Configure USART Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Configure USART Rx as input floating */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* USART resources configuration (Clock, GPIO pins and USART registers) ----*/
  /* USART configured as follow:
        - BaudRate = 115200 baud  
        - Word Length = 8 Bits
        - One Stop Bit
        - No parity
        - Hardware flow control disabled (RTS and CTS signals)
        - Receive and transmit enabled
  */
    
    
  USART_InitStructure.USART_BaudRate = 38400;
  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(USART3, &USART_InitStructure);  
    USART_Cmd(USART3, ENABLE);
    
            //       NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
           //     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
             //     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
             //     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
             //
          //        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);  /* Enable Receive interrupt */

}


При перенастройке на USART3 я учел, что он тактируется от APB1, вроде бы других отличий от USART1 не имеется...
В чем может быть проблема?

Сообщение отредактировал Salamander - Mar 9 2015, 19:02
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 08:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016