Страница 1 из 2

Универсальная инициализацию usart

Добавлено: Пн фев 08, 2016 15:35:24
pokk
Добрый день, задался я такой задачей написать функцию, через которую можно было просто инициализировать любой usart.

Сейчас у меня инициализация выглядит так:

Код: Выделить всё

//--------------инициализация выводов 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 вот и хочу написать функцию сейчас что бы позже к ним не возвращаться.

Re: Универсальная инициализацию usart

Добавлено: Пн фев 08, 2016 17:30:26
oleg110592
USARTы в STM32 многофункциональные, как в такой универсальной функции включить Continuous communications using DMA, Single-wire half-duplex communications, Hardware flow control for modem and RS-485 transceiver и т.д. Получается нужна кучка функций на все случаи жизни. Имхо функции делать лучше по документации типа:

Код: Выделить всё

/* (1) oversampling by 16, 9600 baud */
/* (2) 8 data bit, 1 start bit, 1 stop bit, no parity, reception mode */
USART1->BRR = 480000 / 96; /* (1) */
USART1->CR1 = USART_CR1_RXNEIE | USART_CR1_RE | USART_CR1_UE; /* (2) */
две строчки всего то, а USART на прием уже работает, по приему сработает прерывание, если разрешить...

Re: Универсальная инициализацию usart

Добавлено: Пн фев 08, 2016 17:45:36
dosikus
А любители SPL и калокубов все такие, им и невдомек что можно все сделать просто и прозрачно без говнооберток. Мало того , один немец написал свою обертку над SPL... :))))))

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 15:54:20
pokk
Походу я размыто описал задачу, но теперь что-то устаканилось.
В общем хотелось бы сделать такое в h файле выбираем настройки для какого либо usart. И после как-то передаём настройки в функцию, которая производит инициализацию(запись в регистры).
Тогда что бы при необходимости использования ещё одного usart, мы могли просто скопировать настройки с первого, изменить их и передаём их опять в ту же функцию.
Без изменения сишного файла ну кроме как добавления ещё одной строки

Код: Выделить всё

UsartInit(usart1);
UsartInit(usart2);

где usart1,usart2 настройки сформированные в h файле.
Весь вопрос в том, что и как формировать в h файле и как это передать в функцию.

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 16:25:15
Pnjom-Penb
dosikus писал(а):Мало того , один немец написал свою обертку над SPL... :))))))
Вот потому-то и расклад такой - они делают Мерседесы и БМВ, а мы - новые ведра... :)))

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 16:37:48
oleg110592
в новом HAL такого уже нагородили, куб подобное генерит:

Код: Выделить всё

UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
.....
/* USART2 init function */
void MX_USART2_UART_Init (void)
{
  huart2.Instance = USART2;
  huart2.Init.BaudRate = 19200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  huart2.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED;
  huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  HAL_UART_Init (&huart2);
}
......
только громоздко это все, и если что-то не будет работать, трудновато разобраться будет

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 17:21:00
dosikus
Pnjom-Penb писал(а): они делают Мерседесы и БМВ, а мы - новые ведра... :)))
Да брось. :))) Не от большого ума все это.

Олег, чем дальше в лес , тем больше дров.

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 17:30:33
Pnjom-Penb
dosikus писал(а):Да брось. :))) Не от большого ума все это.
К сожалению, в моей шутке доля шутки даже меньше обычного. Я SPL не защищаю, но и против огульного отрицания. В частности, сам когда-то придумал некий специальный вид библиотек, чтобы выжимать из "мурзика" все, до последней капли... и уже через месяц-другой обнаружил, что это путь в никуда. Библиотеки, создающие АПИ высокого уровня - часто весьма оправданная вещь, так как время разработки/отладки гораздо дороже, чем скорострельность камушков и объемы памяти. А если это еще умножить на действительно многочисленный круг разработчиков ПО, то "часто" превращается в "практически всегда".

PS: "Тем толще партизаны", в данном случае. :)))

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 17:50:02
dosikus
Pnojm-Penb.ну собственно верно, каждый уважающий себя нуб просто обязан - написать макросы ногодрыга и обертки к SPL. Без велосипедов ну просто никуда. :)))

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 17:58:07
Pnjom-Penb
dosikus писал(а):каждый уважающий себя нуб просто обязан - написать макросы ногодрыга и обертки к SPL.
Если у этого нуба столько же потребителей-программеров, сколько у STM, то да - обязан, иначе он такие деньжищи обречет на смерть, что никто не посмотрит, что он нуб, и получит он тогда - заслуженнейших звездюлей! :)))

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 19:12:43
HHIMERA
Pnjom-Penb писал(а):Я SPL не защищаю, но и против огульного отрицания. В частности, сам когда-то придумал некий специальный вид библиотек, чтобы выжимать из "мурзика" все, до последней капли... и уже через месяц-другой обнаружил, что это путь в никуда. Библиотеки, создающие АПИ высокого уровня - часто весьма оправданная вещь, так как время разработки/отладки гораздо дороже, чем скорострельность камушков и объемы памяти. А если это еще умножить на действительно многочисленный круг разработчиков ПО, то "часто" превращается в "практически всегда".
Ну вот нафига было... эту чушь вытаскивать на свет божий??? Уже всё это обсуждали-переобсуждали...
Всё это путь недоПиСишников с загаженными мозгами... типа... взял КУБ... за пять минут накнопал проект с ЮСБ, СД-картой и офигенным ТФТ... дюймов на 10... всё работает зашибись (типа я крутой)... помогите чтобы мигал светодиод при смене трека... ))))))))
Ну или... путь Мегадаунов из секты Кодэнедовижэн... типа... а где в Кубе прога с микросекундами... чтобы проект с Меги с адынвирэ перетянуть на СТМ32... а то семисегментник мигает некрасиво... и вообще всё тормозит... )))))))

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 19:56:38
HHIMERA
dosikus писал(а):и тут такие ляпы.
Да у него эта хрень с головы не выветривается... обосновалась на постоянной основе...
Зацени разрыв шаблона... планетарного масштаба...

Код: Выделить всё

сам когда-то придумал некий специальный вид библиотек, чтобы выжимать из "мурзика" все, до последней капли... и уже через месяц-другой обнаружил, что это путь в никуда.
Как бы понятно... универсальность - зло!!!
И тут же...
Библиотеки, создающие АПИ высокого уровня - часто весьма оправданная вещь, так как время разработки/отладки гораздо дороже, чем скорострельность камушков и объемы памяти. А если это еще умножить на действительно многочисленный круг разработчиков ПО, то "часто" превращается в "практически всегда".
Оказывается... либы были не той системы... мушка была не спиляна... ))))))

Нарушение правил. п 2.2. Замечание. FAKIR. В следующий раз бан.

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 20:04:48
Pnjom-Penb
dosikus писал(а):вы принадлежите кагорте любителей го*нолиб?
Нет, просто я наблюдательный человек, допускающий отрицание на корню только одного - догматизма. Жизнь развивается далеко не в соответствии с чьими-либо пристрастиями к инструментам. :))) :dont_know:
dosikus писал(а):Весьма сожалею...
Это твой выбор, тебе с ним и работать.

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 20:09:06
dosikus
Ну да , и работаем весьма плодотворно.
Пока нужды ни в SPL ни в калокубе не испытываем.
Даже Emwin с контроллером TFT, RAM и ускорителем графики пользуем на 429.
Счас USB стек на F0 чистим от г***на.

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 20:27:54
Pnjom-Penb
dosikus писал(а):Ну да , и работаем весьма плодотворно.
С чем - со своим сожалением? :))) Я о нем говорил, а не об ф429.

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 20:36:11
godz320
pokk писал(а):Добрый день, задался я такой задачей написать функцию, через которую можно было просто инициализировать любой usart.

http://mikrocontroller.bplaced.net/word ... ge_id=1974

вот тут посмотрите, исходники.

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 20:44:32
FAKIR
Прекратили флуд - пишем по теме.

Подчистил...

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 20:51:22
dosikus
godz320 писал(а):
вот тут посмотрите, исходники.
Спасибо, уважаемый, это именно тот фриц с его обертками.

FAKIR, вынужден вас просить - извините это вовсе не флуд. Просмотрите пожалуйста исходники по ссылке.
Такой бред может изобразить только выходец с PC , далекий от эмбедда. Тем же самым занимается ТС.

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 21:46:20
godz320
dosikus писал(а): Такой бред
чайнику коротко не скажите в чем бред?

Re: Универсальная инициализацию usart

Добавлено: Вт фев 09, 2016 21:55:57
HHIMERA
Die Verbindungsstrecke sieht dann so aus :

PC <- USB -> STM32F4 <- UART -> Device (z.B. Mega8)
Да сама постановка задачи... уже бред... изначально... Исходники можно уже и не смотреть... даже...