Files
@ aa624684a65e
Branch filter:
Location: FeatherHAB/wsprhab/src/usart.c - annotation
aa624684a65e
2.9 KiB
text/plain
Update CMSIS and HAL library, fixes USART issues! Now the uart actually receives data from the GPS.
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;
}
|