Skip to main content
primagen23
Associate II
September 19, 2011
Question

USART2 makes trouble

  • September 19, 2011
  • 6 replies
  • 1150 views
Posted on September 19, 2011 at 21:24

Hi,

i own an stm32f103 Board. USART1 is configured as TX via DMA and RX Polling.

I tried to configure the USART2 port TX polling and RX polling.

Confusing thing is that after sending on char to console the board resets in loop and the Console of USART2 prints after each reset a square symbol.

Configuration of USART2:

RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN); RCC->APB1ENR |= RCC_APB1ENR_USART2EN; GPIO_CONF_OUTPUT_PORT(A,2,ALT_PUSH_PULL,50); GPIO_CONF_INPUT_PU_PD(A,GPIO_CM3); GPIOA->BSRR = GPIO_BSRR_BS3; USART2->CR1 = USART_CR1_UE; //Enable USART ((u16)0x2000) USART2->CR2 = 0; //Stopbits USART2->CR1 |= USART_CR1_TE; // Transmitter Enable ((u16)0x0008) USART2->BRR= 0x45; //Baudrate 115200 USART2->CR1 |= USART_CR1_RE; USART2->CR1 |= USART_CR1_RXNEIE; NVIC_SET_PRIORITY(USART2_IRQChannel, 2); NVIC_ENABLE_INT(USART2_IRQChannel); send routine:

int u2_putchar(int c) { while (!(USART2->SR & USART_SR_TXE)); USART2->DR = (c & 0xFF); return(c); } and in main i call u2_putchar(4); Without this call evrything works.

    This topic has been closed for replies.

    6 replies

    Andrew Neil
    Super User
    September 20, 2011
    Posted on September 20, 2011 at 12:38

    ''i own an stm32f103 Board''

    What board, exactly?

    USART2->CR1 |= USART_CR1_RE;

     

    USART2->CR1 |= USART_CR1_RXNEIE;

     

    You didn't comment those lines - what do you think they do...?

    NVIC_SET_PRIORITY(USART2_IRQChannel, 2);

     

    NVIC_ENABLE_INT(USART2_IRQChannel);

    You've enabled the interrupt - but you haven't shown your handler...

    A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.
    primagen23
    Associate II
    September 20, 2011
    Posted on September 20, 2011 at 13:00

    What board, exactly?

    TN100 Modul from Dizic. Quite unknown i think.

    USART2->CR1 |= USART_CR1_RE;

    USART2->CR1 |= USART_CR1_RXNEIE;

    You didn't comment those lines - what do you think they do...?

    i didnt comment them because RX is needed too. Below the handler for RX/TX

    void USART2_handler(void)__attribute__((interrupt));

    void uart2_rx_interrupt(void);

    void USART2_handler(void)

    {

    uart2_rx_interrupt();

    }

    void uart2_rx_interrupt(void)

    {

    uint8_t c;

    c = USART2->DR;

    if(uart2_input_handler != NULL)

    {

    uart2_input_handler(c);

    }

    }

    int u2_putchar(int c)

    {

    while (!(USART2->SR & USART_SR_TXE));

    USART2->DR = (c & 0xFF);

    return(c);

    NVIC_SET_PRIORITY(USART2_IRQChannel, 2);

     

    NVIC_ENABLE_INT(USART2_IRQChannel);

    You've enabled the interrupt - but you haven't shown your handler...

    i think now i shown evry handler. But where is now the problem

    ________________

    Attachments :

    TN100_Demo_rev_A_Schematic.pdf : https://st--c.eu10.content.force.com/sfc/dist/version/download/?oid=00Db0000000YtG6&ids=0680X000006I0bd&d=%2Fa%2F0X0000000bb5%2F4PZ.5P98giHa_dqhV_shsNrtu.wfZQm9r_oiIZRFvJI&asPdf=false
    trevor23
    Associate III
    September 20, 2011
    Posted on September 20, 2011 at 14:40

    You havn't shown ''uart2_input_handler''.

    Where do you clear the interrupt?

    Please include everything otherwise it takes a long time to ''extract'' the information required to help you.

    Regards

    Trevor
    primagen23
    Associate II
    September 26, 2011
    Posted on September 26, 2011 at 22:24

    No one an Idea?

    Tesla DeLorean
    Guru
    September 26, 2011
    Posted on September 26, 2011 at 23:08

    No one an Idea?

    It's a forum, it's more probable that no one is interested. There are far more people who contribute problems, than contribute solutions.

    I've have 3 USART's running with DMA and interrupts, works fine. You might however want to actually confirm/qualify the source of the interrupt, or if RXNE is actually set before randomly reading the data register.

    Confusing thing is that after sending on char to console the board resets in loop and the Console of USART2 prints after each reset a square symbol.

    I'm confused by this description. You get odd random square characters when you reset the board? Getting some unframed junk at reset is not a unique phenomena. The board resets when it receives a character? Please restate the problem clearly.
    Tips, Buy me a coffee, or three.. PayPal VenmoUp vote any posts that you find helpful, it shows what's working..
    primagen23
    Associate II
    April 13, 2012
    Posted on April 13, 2012 at 12:28

    Problem is solved. How can i close this thread?

    In Debugger i see that rx interrupt loops.

    I checked the soldering and see that pin rx is contacting an jtag line.