Виснет STM32F105RBT6 при приёме байта по USART

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Виснет STM32F105RBT6 при приёме байта по USART

Сообщение DENIS451 »

Виснет STM32F105RBT6 при приёме байта по USART

Настройка USART1:
Спойлер

Код: Выделить всё

{//настройка USART
//----------------------------------------------------------------------------------------			
//* Enable USART1 clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); 
 
/* NVIC Configuration */
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable the USARTx Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/* Configure the USART1 */
    USART_InitTypeDef USART_InitStructure;
 
    /* USART1 configuration ------------------------------------------------------*/
    /* USART1 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 Clock disabled
        - USART CPOL: Clock is active low
        - USART CPHA: Data is captured on the middle
        - USART LastBit: The clock pulse of the last data bit is not output to
            the SCLK pin
     */
    USART_InitStructure.USART_BaudRate = 115200;
    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 USART1 */
    USART_Cmd(USART1, ENABLE);
 
    /* Enable the USART1 Receive interrupt: this interrupt is generated when the
        USART1 receive data register is not empty */
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
//----------------------------------------------------------------------------------------		
}
Функция прерывания:
Спойлер

Код: Выделить всё

void USART1_IRQHandler(void)
{
/////////////////////////////////////////////////////////////////////////////////////////	
    if ((USART1->SR & USART_FLAG_RXNE) != (u16)RESET)
    {
            RXc = USART_ReceiveData(USART1);
            RX_BUF[RXi] = RXc;
            RXi++;
 
            if (RXc != 13) {
                if (RXi > RX_BUF_SIZE-1) {
                    clear_RXBuffer();
                }
            }
            else {
                RX_FLAG_END_LINE = 1;
            }
 
            //Echo
            USART_SendData(USART1, RXc);
    }
/////////////////////////////////////////////////////////////////////////////////////////		
}
В момент получения микроконтроллером первого же байта с PuTTY (видно в логическом анализаторе) всё подвисает, как если бы забыть написать обработчик прерывания.
Если написать в USART1_IRQHandler return в первой же строке ничего не меняется.
Отправляются байты нормально.

Что может быть не так?
Реклама
DENIS451
Прорезались зубы
Сообщения: 213
Зарегистрирован: Вт сен 09, 2008 18:17:27

Re: Виснет STM32F105RBT6 при приёме байта по USART

Сообщение DENIS451 »

Куда то исчезли два поста из этой темы!

Проблема решена, нужно писать extern "C" void USART1_IRQHandler(void) если используется C++
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Виснет STM32F105RBT6 при приёме байта по USART

Сообщение VladislavS »

Понял почему или просто "так надо"?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Виснет STM32F105RBT6 при приёме байта по USART

Сообщение Мурик »

DENIS451 писал(а):Куда то исчезли два поста из этой темы!
http://radiokot.ru/forum/viewtopic.php? ... 4#p3559944
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «ARM»