2011-09-19 12:24 PM
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.
2011-09-20 03:38 AM
''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...
2011-09-20 04:00 AM
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
2011-09-20 05:40 AM
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 Trevor2011-09-26 01:24 PM
No one an Idea?
2011-09-26 02:08 PM
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.2012-04-13 03:28 AM
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.