Files @ 02d3447dac18
Branch filter:

Location: windsonde/Source/system/uart.c - annotation

ethanzonca
Add docs, remove startup delays
02d3447dac18
02d3447dac18
02d3447dac18
02d3447dac18
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
7ff1c5a59571
//
// uart: configure and initialize GPS uart
//

#include "stm32f0xx_hal.h"

#include "system/uart.h"
#include "config.h"
#include "system/gpio.h"

UART_HandleTypeDef huart1;
DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart1_tx;
uint8_t uart_initted = 0;

void uart_init(void)
{
    __GPIOB_CLK_ENABLE();
    __USART1_CLK_ENABLE();

    GPIO_InitTypeDef GPIO_InitStruct;

    // Init gpio pins for uart
    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL; //GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF1_USART1;
    HAL_GPIO_Init(GPIOA, &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);

    HAL_Delay(100);
	uint8_t switch_baud[] = "$PUBX,41,1,0003,0001,115200,0*1E\r\n";
	HAL_UART_Transmit(uart_gethandle(), switch_baud, sizeof(switch_baud)/sizeof(uint8_t), 1000);

    HAL_UART_DeInit(&huart1);
    huart1.Init.BaudRate = 115200;
    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_initted = 1;
}

void uart_deinit(void)
{
    if(uart_initted == 1)
    {
        //HAL_DMA_DeInit(&hdma_usart1_rx);
        //HAL_DMA_DeInit(&hdma_usart1_tx);
        HAL_UART_DeInit(&huart1);
        __HAL_RCC_USART1_CLK_DISABLE();

        uart_initted = 0;
    }
}

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;
}