Это не является аналогом, так как не позволяет в ран-тайме менять baudrate. Речь идет про полный аналог библиотечной функции. Если упростить вот так, она не будет врать?
Леонид Иванович писал(а):Это не является аналогом, так как не позволяет в ран-тайме менять baudrate.
Не проще набить необходимые Вам скорости в хэдере ?
Ну если Вы собираетесь использовать нестандартные скорости и на ходу так же менять тактовую ,
то можно и вычислять - только не с SPL извращениями и не с Вашей такой же фигней.
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 15:44:53
a5021
dosikus писал(а):
Вместо простыни магических вычисления, все телодвижения выполняет препроцессор.
Более лютого быдлокода мне еще не приходилось видеть. Погрешности не пытались посчитать?
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 15:56:53
nahimovv
Более лютого говнопоста я тоже не видел! Считайте в столбик!
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 16:36:29
dosikus
Леонид Иванович писал(а):Это не является аналогом, так как не позволяет в ран-тайме менять baudrate.
С чего такие ляповатые выводы? Константы заменить на переменные - никак нельзя?
a5021 писал(а):
Более лютого быдлокода мне еще не приходилось видеть. Погрешности не пытались посчит..
Продолжаешь смешить окружающих...
У тебя это лучше всего выходит, а в эбедд тебе категорически нельзя...
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 19:00:16
GARMIN
Леонид Иванович писал(а):
dosikus писал(а):SPL, скопипасти сюда вычисление скорости USART - поржем всем форумом над тобой и "программистами" STM.
Скопипастил. Интересно было бы узнать, что там не так?
Леонид Иванович, как не странно, но при постоянной тактовой частоте процессора и скорости передачи приведённая однострочная формула полностью верна. Для нескольких частот и скоростей её можно вычислить заранее и представить в константах. Я проверял в железе, всё работает.
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 19:46:15
Леонид Иванович
dosikus писал(а):и не с Вашей такой же фигней.
Да, действительно, не работает. Вот и получается, что SPL нужна, там хоть функции работают. А написать их самостоятельно не каждому по силам.
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 19:49:20
dosikus
Леонид Иванович писал(а):
Да, действительно, не работает. Вот и получается, что SPL нужна, там хоть функции работают. А написать их самостоятельно не каждому по .
Не работает что ?
Вы там часом в BRR не при включенном UART пишете?
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 20:18:34
a5021
GARMIN писал(а):
Леонид Иванович, как не странно, но при постоянной тактовой частоте процессора и скорости передачи приведённая однострочная формула полностью верна.
Я проверял в железе, всё работает.
Верна-верна, еще как верна... На 921600 бодах уход скорости по формуле имени dosikus-а составит ~18%. А вот у SPL потери точности нет. Там 0.16% ухода дает само железо из за недостатка разрядности представления значения после запятой.
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 20:39:34
Леонид Иванович
Вот так работает. Только пока не знаю, где добыть значения APB1_Frequency, APB2_Frequency. Единственный способ - достать через функцию RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks), но это опять библиотека.
a5021, дело в том, что значение делителя масштабируется в 16 раз (или в 8 раз, если оверсемплинг на 8 ), потери точности нет.
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 20:42:10
dosikus
a5021 писал(а):
Верна-верна, еще как верна... На 921600 бодах уход скорости по формуле имени dosikus-а составит ~18
А теперь уеб..ок потрудись открыть даташит на F3 или F0, и найти там процедуру расчета .
To obtain 921.6 Kbaud with fCK= 48 MHz.
• In case of oversampling by 16:
USARTDIV = 48 000 000/921 600
BRR = USARTDIV = 52d = 0x34
•
И сравнить с тем что я выложил.
STM вовремя поняли свои ляпы и исправили, в отличии от тебя .
Только не надо пи..здеть что генератор в новых другой
Уеб..ок , расчет не мой , мне чужие лавры не нужны . Я просто умею и читать и осознавать прочитанное .
Звание почетного клоуна-аурдинщика ты уже заработал железно.
Леонид Иванович писал(а):Вот так работает. Только пока не знаю, где добыть значения APB1_Frequency, APB2_Frequency.
Вас снова несет в дебри .
Вы так часто меняет тактовую что аж необходимо ее на лету расчитывать?
Или Вас как любого нуба так и плющит создать универсальное дерьмо ?
Кстати тактовая UART не всегда от APB1 или 2....
Единственный способ - достать через функцию RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks), но это опять библиотека.
Если уж Вам так приспичило , можно и эту функцию вытащить и упростить . И не нужна будет SPL .
На SPL пусть клоуны с порядковым номером a5021 молятся...
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 20:57:45
Леонид Иванович
Я всего лишь за корректное сравнение. Если утверждается, что библиотечная функция написано плохо, то нужно представить ее функциональный аналог, а не одно выражение из констант.
А разве расчет делителя в F1 и F4 чем-то отличается от F0 и F3?
А когда тактирование может быть не от APB1 или APB2?
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 21:02:23
a5021
Леонид Иванович писал(а):дело в том, что значение делителя масштабируется в 16 раз (или в 8 раз, если оверсемплинг на 8 ), потери точности нет.
Оверсемплинг это только прием. С передачей то что делать? Уход больше процента это уже много.
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 21:08:11
Леонид Иванович
С передачей будет все нормально - делитель частоты USART имеет дробный коэффициент деления. Размерность дробной части случайно (почти совпадает с оверсемплингом на приеме.
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 21:11:12
dosikus
Леонид Иванович писал(а):Я всего лишь за корректное сравнение. Если утверждается, что библиотечная функция написано плохо, то нужно представить ее функциональный аналог, а не одно выражение из констант.
В большинстве реализаций нужна только одна скорость . С этим надеюсь спорить не будете ?
В большинстве оставшихся - ряд фиксированных стандартных .
Возможен вариант , я не спорю, когда вы будете переключать и скорость и тактовую. Ну максимум 2 тактовые и стандартный ряд на них.
Причем переключаясь вы знаете какая у Вас будет тактовая и какая на ней скорость .
Все выше приведенные случаи совершенно не требуют вычислений и легко реализуются на константах.
А разве расчет делителя в F1 и F4 чем-то отличается от F0 и F3?
Физически нет, только исправленным описанием в Referense manual.
А когда тактирование может быть не от APB1 или APB2?
STM32F0-
Bits 17:16USART2SW[1:0]:USART2 clock source selection (available only on STM32F07x devices)
This bit is set and cleared by software to select the USART2 clock source.
00: PCLK selected as USART2 clock source (default)
01: System clock (SYSCLK) selected as USART2 clock
10: LSE clock selected as USART2 clock
11: HSI clock selected as USART2 clock
Bits 1:0USART1SW[1:0]:USART1 clock source selection
This bit is set and cleared by software to select the USART1 clock source.
00: PCLK selected as USART1 clock source (default)
01: System clock (SYSCLK) selected as USART1 clock
10: LSE clock selected as USART1 clock
11: HSI clock selected as USART1 clock
STM32F3-
Bits 23:22UART5SW[1:0]:UART5 clock source selection
This bit is set and cleared by software to select the UART5 clock source.
00: PCLK selected as UART5 clock source (default)
01: System clock (SYSCLK) selected as UART5 clock
10: LSE clock selected as UART5 clock
11: HSI clock selected as UART5 clock
Bits 21:20UART4SW[1:0]:UART4 clock source selection
This bit is set and cleared by software to select the UART4 clock source.
00: PCLK selected as UART4 clock source (default)
01: System clock (SYSCLK) selected as UART4 clock
10: LSE clock selected as UART4 clock
11: HSI clock selected as UART4 clock
Bits 19:18USART3SW[1:0]:USART3 clock source selection
This bit is set and cleared by softwareto select the USART3 clock source.
00: PCLK selected as USART3 clock source (default)
01: System clock (SYSCLK) selected as USART3 clock
10: LSE clock selected as USART3 clock
11: HSI clock selected as USART3 clock
Bits 17:16USART2SW[1:0]:USART2 clock source selection
This bit is set and cleared by softwareto select the USART2 clock source.
00: PCLK selected as USART2 clock source (default)
01: System clock (SYSCLK) selected as USART2 clock
10: LSE clock selected as USART2 clock
11: HSI clock selected as USART2 clock
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 21:11:57
menzoda
a5021 писал(а):Уход больше процента это уже много.
Вот как раз для UART это не много.
Re: Кто сам изучил програмирование мк?
Добавлено: Пн янв 27, 2014 21:30:29
dosikus
Да и до кучи , в F0 и F3 есть еще и Auto baud rate detection .
Так что и вычислялка не понадобится ...