void uart3_init( void ) { /* init RCC */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); /* Enable USART3 interrupts */ NVIC_InitTypeDef nvic; nvic.NVIC_IRQChannel = USART3_IRQn; nvic.NVIC_IRQChannelPreemptionPriority = 2; nvic.NVIC_IRQChannelSubPriority = 1; nvic.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic); /* Init GPIOS */ GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE); GPIO_InitTypeDef gpio; /* GPIOC: GPIO_Pin_10 USART3 Tx push-pull */ gpio.GPIO_Pin = UART3_TxPin; gpio.GPIO_Mode = GPIO_Mode_AF_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(UART3_TxPort, &gpio); /* GPIOC: GPIO_Pin_11 USART3 Rx pin as floating input */ gpio.GPIO_Pin = UART3_RxPin; gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(UART3_RxPort, &gpio); /* Configure USART3 */ USART_InitTypeDef usart; usart.USART_BaudRate = UART3_BAUD; usart.USART_WordLength = USART_WordLength_8b; usart.USART_StopBits = USART_StopBits_1; usart.USART_Parity = USART_Parity_No; usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None; usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART3, &usart); /* Enable USART3 Receive interrupts */ USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); pprz_usart_set_baudrate(USART3, UART3_BAUD); /* Enable the USART3 */ USART_Cmd(USART3, ENABLE); // initialize the transmit data queue uart3_tx_extract_idx = 0; uart3_tx_insert_idx = 0; uart3_tx_running = FALSE; // initialize the receive data queuenn uart3_rx_extract_idx = 0; uart3_rx_insert_idx = 0; }
void uart_periph_set_baudrate(struct uart_periph* p, uint32_t baud) { /* Configure USART */ USART_InitTypeDef usart; usart.USART_BaudRate = baud; usart.USART_WordLength = USART_WordLength_8b; usart.USART_StopBits = USART_StopBits_1; usart.USART_Parity = USART_Parity_No; usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None; usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(p->reg_addr, &usart); /* Enable USART1 Receive interrupts */ USART_ITConfig(p->reg_addr, USART_IT_RXNE, ENABLE); pprz_usart_set_baudrate(p->reg_addr, baud); /* Enable the USART */ USART_Cmd(p->reg_addr, ENABLE); }