Files
@ e1db5d4a8be4
Branch filter:
Location: FeatherHAB/wsprhab/src/usart.c - annotation
e1db5d4a8be4
2.9 KiB
text/plain
Change LED blink rate based on GPS fix status
ddd34459834e ddd34459834e 0d9900312165 ddd34459834e 0d9900312165 0d9900312165 ddd34459834e ddd34459834e ddd34459834e 0d9900312165 ddd34459834e 0d9900312165 aa624684a65e aa624684a65e 0d9900312165 ddd34459834e ddd34459834e ddd34459834e 0d9900312165 0d9900312165 aa624684a65e aa624684a65e 0d9900312165 0d9900312165 0d9900312165 ddd34459834e ddd34459834e aa624684a65e ddd34459834e ddd34459834e ddd34459834e ddd34459834e ddd34459834e ddd34459834e aa624684a65e aa624684a65e aa624684a65e aa624684a65e ddd34459834e ddd34459834e aa624684a65e aa624684a65e aa624684a65e aa624684a65e 0d9900312165 0d9900312165 0d9900312165 aa624684a65e 0d9900312165 0d9900312165 0d9900312165 0d9900312165 0d9900312165 0d9900312165 aa624684a65e 0d9900312165 0d9900312165 0d9900312165 0d9900312165 0d9900312165 0d9900312165 0d9900312165 0d9900312165 0d9900312165 0d9900312165 0d9900312165 aa624684a65e aa624684a65e aa624684a65e aa624684a65e aa624684a65e 0d9900312165 aa624684a65e aa624684a65e aa624684a65e 0d9900312165 ddd34459834e ddd34459834e ddd34459834e ddd34459834e ddd34459834e aa624684a65e aa624684a65e aa624684a65e aa624684a65e aa624684a65e aa624684a65e aa624684a65e aa624684a65e aa624684a65e aa624684a65e | #include "stm32f0xx_hal.h"
#include "usart.h"
#include "config.h"
#include "gpio.h"
UART_HandleTypeDef huart1;
DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart1_tx;
void uart_init(void)
{
__GPIOB_CLK_ENABLE();
__HAL_RCC_USART1_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
// Init gpio pins for uart
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; //GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
GPIO_InitStruct.Alternate = GPIO_AF0_USART1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// Init UART periph
huart1.Instance = USART1;
huart1.Init.BaudRate = 9600;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT|UART_ADVFEATURE_DMADISABLEONERROR_INIT;
huart1.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
huart1.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR;
HAL_UART_Init(&huart1);
__DMA1_CLK_ENABLE();
// Init UART DMA
hdma_usart1_rx.Instance = DMA1_Channel3;
hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart1_rx.Init.Mode = DMA_CIRCULAR;
hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW;
HAL_DMA_Init(&hdma_usart1_rx);
__HAL_LINKDMA(&huart1,hdmarx,hdma_usart1_rx);
hdma_usart1_tx.Instance = DMA1_Channel2;
hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart1_tx.Init.MemInc = DMA_MINC_DISABLE;
hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart1_tx.Init.Mode = DMA_NORMAL;
hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
HAL_DMA_Init(&hdma_usart1_tx);
__HAL_LINKDMA(&huart1,hdmatx,hdma_usart1_tx);
// HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0, 0);
// HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
//HAL_NVIC_EnableIRQ(USART1_IRQn);
HAL_NVIC_DisableIRQ(USART1_IRQn);
}
UART_HandleTypeDef* uart_gethandle(void)
{
return &huart1;
}
DMA_HandleTypeDef* uart_get_txdma_handle(void)
{
return &hdma_usart1_tx;
}
DMA_HandleTypeDef* uart_get_rxdma_handle(void)
{
return &hdma_usart1_rx;
}
|