diff --git a/src/usart.c b/src/usart.c --- a/src/usart.c +++ b/src/usart.c @@ -3,7 +3,6 @@ #include "usart.h" #include "config.h" #include "gpio.h" -#include "dma.h" UART_HandleTypeDef huart1; DMA_HandleTypeDef hdma_usart1_rx; @@ -11,43 +10,49 @@ DMA_HandleTypeDef hdma_usart1_tx; void uart_init(void) { - __USART1_CLK_ENABLE(); + __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_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; + 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 = GPS_BAUDRATE; + 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_ONEBIT_SAMPLING_DISABLED ; - huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + 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); - /* // Init UART DMA + + __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_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(huart,hdmarx,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; @@ -59,13 +64,28 @@ void uart_init(void) hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&hdma_usart1_tx); - __HAL_LINKDMA(huart,hdmatx,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_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; +} +