AnsweredAssumed Answered

Usart 2 does not work

Question asked by pereguda.anton on Jun 11, 2017
Latest reply on Jun 11, 2017 by Clive One

I am trying to use 2 usart in my program. When i am trying send_to_uart2('a'); nothing happens. In debug mode USART2->SR is always 0x000. Why?

 

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

void Delay(void)
{
volatile uint32_t i;
for (i = 0; i != 0x140000; i++)
;
}

void send_to_uart1(uint8_t data)
{
while (!(USART1->SR & USART_SR_TC))
;
USART1->DR = data;
}

void send_to_uart2(uint8_t data)
{
while (!(USART2->SR & USART_SR_TC))
;
USART2->DR = data;
}

uint8_t uart_data;

int main(void)
{
GPIO_InitTypeDef PORTA_init_struct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 | RCC_APB1Periph_USART2, ENABLE);

PORTA_init_struct.GPIO_Pin = GPIO_Pin_9;
PORTA_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
PORTA_init_struct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &PORTA_init_struct);

PORTA_init_struct.GPIO_Pin = GPIO_Pin_10;
PORTA_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
PORTA_init_struct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &PORTA_init_struct);

PORTA_init_struct.GPIO_Pin = GPIO_Pin_2;
PORTA_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
PORTA_init_struct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &PORTA_init_struct);

PORTA_init_struct.GPIO_Pin = GPIO_Pin_3;
PORTA_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
PORTA_init_struct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &PORTA_init_struct);

USART_InitTypeDef uart_struct1;
uart_struct1.USART_BaudRate = 9600;
uart_struct1.USART_WordLength = USART_WordLength_8b;
uart_struct1.USART_StopBits = USART_StopBits_1;
uart_struct1.USART_Parity = USART_Parity_No;
uart_struct1.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
uart_struct1.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &uart_struct1);
USART_Cmd(USART1, ENABLE);

USART_InitTypeDef uart_struct2;
uart_struct2.USART_BaudRate = 9600;
uart_struct2.USART_WordLength = USART_WordLength_8b;
uart_struct2.USART_StopBits = USART_StopBits_1;
uart_struct2.USART_Parity = USART_Parity_No;
uart_struct2.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
uart_struct2.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, &uart_struct2);
USART_Cmd(USART2, ENABLE);

while (1) {
send_to_uart2('a');
Delay();
send_to_uart1('b');
Delay();
}
}

Outcomes