diff options
author | Eugene Krashtan <Eugene.Krashtan@opensynergy.com> | 2019-03-11 12:47:58 +0200 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2019-03-24 12:10:11 -0400 |
commit | b822f389237981043a8033aa4232e8b084137b2c (patch) | |
tree | fec159e50a3314cabbe18352e26c10db39c6f621 /src/stm32f0/serial.c | |
parent | 74c6a85cde9327b13a52b1d142b698e00e2d6122 (diff) | |
download | kutter-b822f389237981043a8033aa4232e8b084137b2c.tar.gz kutter-b822f389237981043a8033aa4232e8b084137b2c.tar.xz kutter-b822f389237981043a8033aa4232e8b084137b2c.zip |
stm32f0: New target STM32F0 added.
Signed-off-by: Eugene Krashtan <Eugene.Krashtan@opensynergy.com>
Diffstat (limited to 'src/stm32f0/serial.c')
-rw-r--r-- | src/stm32f0/serial.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/stm32f0/serial.c b/src/stm32f0/serial.c new file mode 100644 index 00000000..103a0d70 --- /dev/null +++ b/src/stm32f0/serial.c @@ -0,0 +1,98 @@ +/* + * Serial communication for STM32F042 boards. + * + * Copyright (C) 2019 Eug Krashtan <eug.krashtan@gmail.com> + * This file may be distributed under the terms of the GNU GPLv3 license. + * + */ + +#include "stm32f0xx_hal.h" +#include <string.h> +#include "autoconf.h" // CONFIG_SERIAL_BAUD +#include "board/serial_irq.h" // serial_rx_byte +#include "sched.h" // DECL_INIT + +UART_HandleTypeDef huart2; +static uint8_t rxbuf, txbuf; + +void USART2_IRQHandler(void) +{ + HAL_UART_IRQHandler(&huart2); +} + +/** + * @brief USART2 Initialization Function + * @param None + * @retval None + */ +void UartInit(void) +{ + huart2.Instance = USART2; + huart2.Init.BaudRate = CONFIG_SERIAL_BAUD; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = UART_STOPBITS_1; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + HAL_UART_Init(&huart2); + + HAL_UART_Receive_IT(&huart2,&rxbuf,(uint16_t)1); +} +DECL_INIT(UartInit); + +void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) +{ + if (huart == &huart2) { + serial_rx_byte(rxbuf); + HAL_UART_Receive_IT(&huart2,&rxbuf,(uint16_t)1); + } +} + +void serial_enable_tx_irq(void) +{ + while(huart2.gState != HAL_UART_STATE_READY); + if(serial_get_tx_byte(&txbuf) == 0) { + HAL_UART_Transmit_IT(&huart2,&txbuf,(uint16_t)1); + } +} + +void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) +{ + if (huart == &huart2) + serial_enable_tx_irq(); +} + +/** +* @brief UART MSP Initialization +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==USART2) + { + /* Peripheral clock enable */ + __HAL_RCC_USART2_CLK_ENABLE(); + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USART2 GPIO Configuration + PA2 ------> USART2_TX + PA3 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF1_USART2; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + /* USART2 interrupt Init */ + HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(USART2_IRQn); + } +} |