Сейчас у меня инициализация выглядит так:
Код: Выделить всё
//---------- выводов USART_RX-------------------------------------------------
RCC_APB2PeriphClockCmd(RX_CLOCK(USART_PORT_RX),ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = USART_RX;
GPIO_Init(GPIO(USART_PORT_RX), &GPIO_InitStructure);
//---------- выводов USART_TX-------------------------------------------------
RCC_APB2PeriphClockCmd(TX_CLOCK(USART_PORT_TX),ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = USART_TX;
GPIO_Init(GPIO(USART_PORT_TX), &GPIO_InitStructure);
//---------- USART----------------------------------------------------------
USART_DeInit(USART(USER_USART));
USART_Cmd(USART(USER_USART), DISABLE);
USART_StructInit(&USART_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
USART_InitStructure.USART_BaudRate = baud;
//USART_InitStructure.USART_BaudRate = 256000;
//USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_2;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_Mode =USART_Mode_Rx|USART_Mode_Tx; // USART_Mode_Tx; //USART_Mode_Rx | USART_Mode_Tx;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_Init(USART(USER_USART), &USART_InitStructure);
USART_Cmd(USART(USER_USART), ENABLE);
Код: Выделить всё
#define Remaping_Usart1 1 // 1-ремапинг 0-без ремапа
#define USART_RX GPIO_Pin_11
#define USART_PORT_RX C
#define RX_CLOCK(x) CONCAT(RCC_APB2Periph_GPIO,x)
#define USART_TX GPIO_Pin_10
#define USART_PORT_TX C
#define TX_CLOCK(x) CONCAT(RCC_APB2Periph_GPIO,x)
#define USER_USART 3
#define USART(x) CONCAT(USART, x)
//#define USART USART1
#define USART_CLOCK(x) CONCAT(RCC_APB2Periph_USART,x)
Переключить функционал с одного usart на другой очень просто и быстро, но подключить второй такой же достаточно трудоёмко.
1) решил сделать функцию со входными параметрами usart,rx,tx,remap,baud, но входных параметров оказывается многовато так как туда притягиваются порт Rx,Tx, RCC......
2) Задумал все входные параметры занести в структуру (с соответствием usart1 и его выводам и портам), а в функцию передавать указатель, но отказался от этого подхода так как не хочу отбирать flash, озу для размещения этой структуры.
Есть ещё какие либо варианты ?
PS: Сейчас для проекта используется 1-2 Usart, а позже планируется использовать 4-6 вот и хочу написать функцию сейчас что бы позже к ним не возвращаться.
