Changeset - ddd34459834e
[Not reviewed]
default
0 5 0
Ethan Zonca - 10 years ago 2016-03-31 21:20:26
ez@ethanzonca.com
Add GPS code
5 files changed with 69 insertions and 148 deletions:
0 comments (0 inline, 0 general)
inc/gps.h
Show inline comments
 
@@ -21,48 +21,52 @@
 
 * Kyle Ripperger
 
 * Matthew Kroening
 
 *
 
 */
 

	
 

	
 
#ifndef GPS_H_
 
#define GPS_H_
 

	
 
#include <stdint.h>
 

	
 
// Hardware config
 
#define GPS_USART USART1
 
/*#define GPS_USART USART1
 
#define GPS_IRQ NVIC_USART1_IRQ
 

	
 
#define GPS_TX_PIN GPIO_PIN_6
 
#define GPS_RX_PIN GPIO_PIN_7
 
#define GPS_RXTX_PORT GPIOB
 
#define GPS_TX_PORT GPIOB
 
#define GPS_TX_PIN GPIO6
 
#define GPS_TX_AF GPIO_AF0
 

	
 
#define GPS_ONOFF_PORT GPIOF
 
#define GPS_ONOFF_PIN GPIO_PIN_1
 
#define GPS_RX_PORT GPIOB
 
#define GPS_RX_PIN GPIO7
 
#define GPS_RX_AF GPIO_AF0
 

	
 
#define GPS_ONOFF_PORT GPIOA
 
#define GPS_ONOFF_PIN GPIO1
 
#define GPS_ONOFF GPS_ONOFF_PORT, GPS_ONOFF_PIN
 

	
 
*/
 
// Messages (REMOVEME?)
 
#define GGA_MESSAGE
 
#define RMC_MESSAGE
 
#define UKN_MESSAGE
 

	
 
void gps_poweron(void);
 
void gps_poweroff(void);
 
void gps_init(void);
 
void gps_sendubx(uint8_t* data, uint8_t size);
 
char* get_longitudeTrimmed(void);
 
char* get_longitudeLSBs(void);
 
char* get_latitudeTrimmed(void);
 
char* get_latitudeLSBs(void);
 
char* get_timestamp(void);
 
char* get_gpsaltitude(void);
 
char* get_speedKnots(void);
 
char* get_course(void);
 
char* get_hdop(void);
 
char* get_sv(void);
 
char* get_dayofmonth(void);
 
uint8_t gps_hasfix(void);
 
void gps_process(void);
 
void parse_gps_transmission(void);
 
void XORbyteWithChecksum(uint8_t byte);
 

	
 
#endif /* GPS_H_ */
inc/usart.h
Show inline comments
 
#ifndef __usart_H
 
#define __usart_H
 
 
#include "stm32f0xx_hal.h"
 
 
extern UART_HandleTypeDef huart1;
 
void MX_USART1_UART_Init(void);
 
void uart_init(void);
 
UART_HandleTypeDef* uart_gethandle(void);
 
 
#endif 
src/gps.c
Show inline comments
 
// TODO: Transition to using https://github.com/cuspaceflight/joey-m/blob/master/firmware/gps.c requesting UBX data
 

	
 
#include "stm32f0xx_hal.h"
 

	
 
#include <string.h>
 

	
 
#include "config.h"
 
#include "usart.h"
 
#include "gps.h"
 
/*
 

	
 
void serial0_sendString(const char* string) {
 
	while(*string != 0x00)
 
	{
 
		usart_send_blocking(USART1, *string);
 
		string++;
 
	}
 
}
 
*/
 
// Circular buffer for incoming data
 
uint8_t nmeaBuffer[NMEABUFFER_SIZE];
 

	
 
// Location of parser in the buffer
 
uint8_t nmeaBufferParsePosition = 0;
 

	
 
// Location of receive byte interrupt in the buffer
 
volatile uint16_t nmeaBufferDataPosition = 0;
 

	
 
// holds the byte ALREADY PARSED. includes starting character
 
int bytesReceived = 0;
 

	
 
@@ -35,31 +27,31 @@ int skipBytes = 0;
 

	
 
//used to index data arrays during data collection
 
int numBytes = 0;
 

	
 
//variables to store data from transmission
 
//least significant digit is stored at location 0 of arrays
 
char tramsmissionType[7];
 

	
 

	
 
void gps_poweron(void)
 
{
 
    // NOTE: pchannel
 
    HAL_GPIO_WritePin(GPS_ONOFF, 0);
 
    gpio_clear(GPS_ONOFF);
 
}
 

	
 
void gps_poweroff(void)
 
{
 
    // NOTE: pchannel
 
    HAL_GPIO_WritePin(GPS_ONOFF, 1);
 
    gpio_set(GPS_ONOFF);
 
}
 

	
 
char timestamp[12];	//hhmmss.ss
 
char* get_timestamp() 
 
{
 
	return timestamp;
 
}
 
	
 
char latitude[14];	//lllll.lla
 
char latitudeTmpTRIM[8];
 
char latitudeTmpLSB[4];
 
char* get_latitudeTrimmed() 
 
@@ -102,27 +94,27 @@ char* get_sv()
 
char hdop[6];		//xx.x
 
char* get_hdop() 
 
{
 
	return hdop;
 
}
 

	
 
char altitude[10];	//xxxxxx.x
 
char* get_gpsaltitude()
 
{
 
	return altitude;
 
}
 

	
 
//char wgs84Height[8];	//sxxx.x
 
//char lastUpdated[8];	//blank - included for testing
 
//char stationID[8];	//blank - included for testing
 
char wgs84Height[8];	//sxxx.x
 
char lastUpdated[8];	//blank - included for testing
 
char stationID[8];	//blank - included for testing
 
char checksum[3];	//xx
 

	
 
char knots[8];		//xxx.xx
 
char* get_speedKnots() 
 
{
 
	return knots;
 
}
 

	
 
char course[8];		//xxx.x
 
char* get_course() 
 
{
 
	return course;
 
@@ -171,155 +163,89 @@ enum decodeState {
 
	RMC_LATITUDE,
 
	RMC_LONGITUDE,
 
	RMC_KNOTS,
 
	RMC_COURSE,
 
	RMC_DATE,
 
	RMC_MAG_VARIATION,
 
	
 
}decodeState;
 

	
 

	
 
void usart1_isr(void)
 
{
 
//	uint8_t recv = usart_recv(GPS_USART);
 
//    HAL_UART_Receive(huart1, uint8_t *pData, uint16_t Size, uint32_t Timeout);
 

	
 
	uint8_t recv = usart_recv(GPS_USART);
 
	//ECHO debug: usart_send_blocking(GPS_USART, recv);
 
//	nmeaBuffer[nmeaBufferDataPosition % NMEABUFFER_SIZE] = recv;
 
	nmeaBuffer[nmeaBufferDataPosition % NMEABUFFER_SIZE] = recv;
 
	nmeaBufferDataPosition = (nmeaBufferDataPosition + 1) % NMEABUFFER_SIZE;
 
}
 

	
 

	
 
UART_HandleTypeDef huart1;
 
DMA_HandleTypeDef hdma_usart1_rx;
 
DMA_HandleTypeDef hdma_usart1_tx;
 

	
 

	
 

	
 

	
 
void gps_init() 
 
{
 
    uart_init();
 
    timestamp[0] = 0x00;
 
    latitude[0] = 0x00;
 
    longitude[0] = 0x00;
 
    numSatellites[0] = 0x00;
 
    hdop[0] = 0x00;
 
    knots[0] = 0x00;
 
    course[0] = 0x00;
 
    dayofmonth[0] = 0x00;
 

	
 
    // Initialize GPS pins
 
    __GPIOF_CLK_ENABLE();
 
    GPIO_InitTypeDef GPIO_InitStruct;
 
    GPIO_InitStruct.Pin = GPS_ONOFF_PIN;
 
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 
    GPIO_InitStruct.Pull = GPIO_NOPULL;
 
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
 
    HAL_GPIO_Init(GPS_ONOFF_PORT, &GPIO_InitStruct);
 

	
 

	
 
    __USART1_CLK_ENABLE();
 
    GPIO_InitStruct.Pin = GPS_TX_PIN|GPS_RX_PIN;
 
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 
    GPIO_InitStruct.Pull = GPIO_PULLUP;
 
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
 
    GPIO_InitStruct.Alternate = GPIO_AF0_USART1;
 
    HAL_GPIO_Init(GPS_RXTX_PORT, &GPIO_InitStruct);
 

	
 
/*  
 
    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.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);
 

	
 
    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(huart,hdmatx,hdma_usart1_tx);
 
*/
 
//    HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
 
//    HAL_NVIC_EnableIRQ(USART1_IRQn);
 
 
 

	
 
    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_ONEBIT_SAMPLING_DISABLED ;
 
    huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
 
    HAL_UART_Init(&huart1);
 

	
 

	
 
    gps_poweron();
 
    HAL_Delay(100); // Make sure GPS is awake and alive
 

	
 
    // Disable GLONASS mode
 
    uint8_t disable_glonass[20] = {0xB5, 0x62, 0x06, 0x3E, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x01, 0x06, 0x08, 0x0E, 0x00, 0x00, 0x00, 0x01, 0x01, 0x8F, 0xB2};
 

	
 
    gps_sendubx(disable_glonass, 20);
 

	
 
    // Enable power saving
 
    uint8_t enable_powersave[10] = {0xB5, 0x62, 0x06, 0x11, 0x02, 0x00, 0x08, 0x01, 0x22, 0x92};
 
    gps_sendubx(enable_powersave, 10);
 

	
 

	
 
    // Set dynamic model 6 (<1g airborne platform)
 
    uint8_t airborne_model[] = { 0xB5, 0x62, 0x06, 0x24, 0x24, 0x00, 0xFF, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0x05, 0x00, 0xFA, 0x00, 0xFA, 0x00, 0x64, 0x00, 0x2C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0xDC };
 
    gps_sendubx(airborne_model, sizeof(airborne_model)/sizeof(uint8_t));
 

	
 
}
 

	
 

	
 
void gps_sendubx(uint8_t* dat, uint8_t size)
 
{
 
    HAL_UART_Transmit(&huart1, dat, size, 100);
 
    uint8_t sendctr;
 
    for(sendctr = 0; sendctr < size; sendctr++)
 
    {
 
        usart_send(GPS_USART, dat[sendctr]);
 
    }
 
}
 

	
 
// Could inline if program space available
 
static void setParserState(uint8_t state)
 
{
 
	decodeState = state;
 

	
 
	// If resetting, clear vars
 
	if(state == INITIALIZE)
 
	{
 
		calculatedChecksum = 0;
 
	}
 
	
 
	// Every time we change state, we have parsed a byte
 
	nmeaBufferParsePosition = (nmeaBufferParsePosition + 1) % NMEABUFFER_SIZE;
 
}
 

	
 

	
 

	
 
//// MKa GPS transmission parser START
 
void gps_process(void){
 
void parse_gps_transmission(void){
 
	
 
	// Pull byte off of the buffer
 
	char byte;
 
	
 
	while(nmeaBufferDataPosition != nmeaBufferParsePosition) 
 
	{
 
		byte = nmeaBuffer[nmeaBufferParsePosition];
 
		
 
		if(decodeState == INITIALIZE) //start of transmission sentence
 
		{
 
			if(byte == '$') 
 
			{
 
@@ -521,66 +447,66 @@ void gps_process(void){
 
		}
 
	
 
		//WGS84 Height
 
		else if (decodeState == GGA_WGS84)
 
		{
 
			if (byte == ',' && skipBytes == 0) //discard this byte
 
			{
 
				skipBytes = 1;
 
				setParserState(GGA_WGS84);
 
			}
 
			else if(byte == ',') //end of this data type
 
			{
 
				//wgs84Height[numBytes] = 0x00;
 
				wgs84Height[numBytes] = 0x00;
 
				setParserState(GGA_LAST_UPDATE);
 
				skipBytes = 0; //prep for next phase of parse
 
				numBytes = 0;
 
			}
 
			else //store data
 
			{
 
				//wgs84Height[numBytes] = byte; //adjust number of bytes to fit array
 
				wgs84Height[numBytes] = byte; //adjust number of bytes to fit array
 
				numBytes++;
 
				setParserState(GGA_WGS84);
 
			}
 
		}
 
	
 
		//last GGA DGPS update
 
		else if (decodeState == GGA_LAST_UPDATE)
 
		{
 
			if (byte == ',') //end of this data type
 
			{
 
				//lastUpdated[numBytes] = 0x00;
 
				lastUpdated[numBytes] = 0x00;
 
				setParserState(GGA_STATION_ID);
 
				numBytes = 0; //prep for next phase of parse
 
			}
 
			else //store data - this should be blank
 
			{
 
				//lastUpdated[numBytes] = byte; //adjust number of bytes to fit array
 
				lastUpdated[numBytes] = byte; //adjust number of bytes to fit array
 
				numBytes++;
 
				setParserState(GGA_LAST_UPDATE);
 
			}
 
		}
 
	
 
		//GGA DGPS station ID
 
		else if (decodeState == GGA_STATION_ID)
 
		{
 
			if (byte == ',' || byte == '*') //end of this data type
 
			{
 
				//stationID[numBytes] = 0x00;
 
				stationID[numBytes] = 0x00;
 
				setParserState(GPS_CHECKSUM);
 
				numBytes = 0; //prep for next phase of parse
 
			}
 
			else //store data - this should be blank
 
			{
 
				//stationID[numBytes] = byte; //adjust number of bytes to fit array
 
				stationID[numBytes] = byte; //adjust number of bytes to fit array
 
				numBytes++;
 
				setParserState(GGA_STATION_ID);
 
			}
 
		}
 
		///parses GGA transmissions END
 
	
 
		/// $GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh
 
		///parses RMC transmissions
 
		//time
 
		// emz: commented setter, GMC time better?
 
		else if(decodeState == RMC_TIME)
 
		{
src/main.c
Show inline comments
 
@@ -79,48 +79,47 @@ void encode_wspr(void)
 
 
TIM_HandleTypeDef htim1;
 
 
int main(void)
 
{
 
    HAL_Init();
 
 
    sysclk_init();
 
    gpio_init();
 
    dma_init();
 
    adc_init();
 
    i2c_init();
 
    gps_init();
 
 
    // Disable ICs
 
    HAL_GPIO_WritePin(OSC_NOTEN, 1);
 
    HAL_GPIO_WritePin(TCXO_EN, 0);
 
 
 
    // Start timer for WSPR
 
    __TIM1_CLK_ENABLE();
 
    htim1.Instance = TIM1;
 
    htim1.Init.Prescaler = 512; // gives 64uS ticks from 8MHz ahbclk
 
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
 
    htim1.Init.Period = ctc; // Count up to this value (how many 64uS ticks per symbol)
 
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
 
    htim1.Init.RepetitionCounter = 0;
 
    HAL_TIM_Base_Init(&htim1);
 
    HAL_TIM_Base_Start_IT(&htim1);
 
    HAL_NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn, 0, 0);
 
    HAL_NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
 
 
    HAL_Delay(100);
 
 
 
//    MX_USART1_UART_Init();
 
 
    jtencode_init();
 
    //gps_init();
 
 
    uint32_t led_timer = HAL_GetTick();
 
    uint32_t last_gps  = HAL_GetTick();
 
    uint32_t last_wspr  = 0xfffff; // start immediately. 
 
 
    HAL_GPIO_TogglePin(LED_BLUE);
 
    HAL_Delay(100);
 
    HAL_GPIO_TogglePin(LED_BLUE);
 
    HAL_Delay(100);
 
    HAL_GPIO_TogglePin(LED_BLUE);
 
@@ -130,58 +129,57 @@ int main(void)
 
 
 
    while (1)
 
    {
 
        if(HAL_GetTick() - last_wspr > 120000)
 
        {
 
            encode_wspr();
 
            last_wspr = HAL_GetTick();
 
        }
 
        
 
        if(HAL_GetTick() - led_timer > 100)
 
        {
 
            HAL_GPIO_TogglePin(LED_BLUE);
 
//            HAL_GPIO_TogglePin(LED_BLUE);
 
            led_timer = HAL_GetTick();
 
        }
 
        if(HAL_GetTick() - last_gps > 3000)
 
        {
 
//            gps_process();
 
            last_gps = HAL_GetTick();
 
        }
 
 
        enter_sleep();
 
    }
 
 
}
 
 
 
void enter_sleep(void)
 
{
 
    //HAL_SuspendTick();
 
    HAL_TIM_Base_Stop_IT(&htim1);
 
    HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
 
    HAL_TIM_Base_Start_IT(&htim1);
 
    //HAL_ResumeTick();
 
}
 
 
 
void enter_deepsleep(void) 
 
{
 
    // Request to enter STOP mode with regulator in low power mode
 
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
 
    // After wake-up from STOP reconfigure the PLL
 
    sysclk_init();
 
}
 
 
 
 
// Initialize system clocks
 
void sysclk_init(void)
 
{
 
    RCC_OscInitTypeDef RCC_OscInitStruct;
 
    RCC_ClkInitTypeDef RCC_ClkInitStruct;
 
    RCC_PeriphCLKInitTypeDef PeriphClkInit;
 
 
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSI14;
 
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
 
    RCC_OscInitStruct.HSI14State = RCC_HSI14_ON;
 
    RCC_OscInitStruct.HSICalibrationValue = 16;
 
    RCC_OscInitStruct.HSI14CalibrationValue = 16;
src/usart.c
Show inline comments
 
#include "stm32f0xx_hal.h"
 
 
#include "usart.h"
 
 
#include "config.h"
 
#include "gpio.h"
 
#include "dma.h"
 
 
/* USER CODE BEGIN 0 */
 
 
/* USER CODE END 0 */
 
 
//UART_HandleTypeDef huart1;
 
//DMA_HandleTypeDef hdma_usart1_rx;
 
//DMA_HandleTypeDef hdma_usart1_tx;
 
 
/* USART1 init function */
 
/*
 
void MX_USART1_UART_Init(void)
 
{
 
UART_HandleTypeDef huart1;
 
DMA_HandleTypeDef hdma_usart1_rx;
 
DMA_HandleTypeDef hdma_usart1_tx;
 
 
  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_ONEBIT_SAMPLING_DISABLED ;
 
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
 
  HAL_UART_Init(&huart1);
 
 
}
 
*/
 
/*
 
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
 
void uart_init(void)
 
{
 
 
  GPIO_InitTypeDef GPIO_InitStruct;
 
  if(huart->Instance==USART1)
 
  {
 
    __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.Alternate = GPIO_AF0_USART1;
 
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
 
  
 
    // Init UART periph
 
    huart1.Instance = USART1;
 
    huart1.Init.BaudRate = GPS_BAUDRATE;
 
    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;
 
    HAL_UART_Init(&huart1);
 
 
 /* // 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.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);
 
 
    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(huart,hdmatx,hdma_usart1_tx);
 
 
*/
 
    HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
 
    HAL_NVIC_EnableIRQ(USART1_IRQn);
 
  }
 
}
 
*/
 
 
UART_HandleTypeDef* uart_gethandle(void)
 
{
 
    return &huart1;
 
} 
0 comments (0 inline, 0 general)