#include "main.h"

#define __USER_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__)               \
                        do{                                                      \
                              (__HANDLE__)->__PPP_DMA_FIELD__ = (__DMA_HANDLE__); \
                              (__DMA_HANDLE__)->Parent = (__HANDLE__);} while(0U)

struct UARTSettings
{
	USART_TypeDef *UARTx;
	uint32_t UART_Speed;
	GPIO_TypeDef *GPIOx;
	uint16_t GPIO_PIN_RX;
	uint16_t GPIO_PIN_TX;
	DMA_Channel_TypeDef *DMAChannel; // DMAChannel = 0 if doesnt need
};

void User_UART_Init(UART_HandleTypeDef* huart, DMA_HandleTypeDef *DMAhuart, struct UARTSettings *uuart);
void UART_GPIO_Init(GPIO_TypeDef *GPIOx, uint16_t GPIO_PIN_RX, uint16_t GPIO_PIN_TX);
void UART_DMA_Init(UART_HandleTypeDef *huart, DMA_HandleTypeDef *hdma_rx, DMA_Channel_TypeDef *DMAhuart);
