Заголовок сообщения: STM32 - проблемы с тактированием
Добавлено: Пт апр 28, 2017 13:27:42
Встал на лапы
Зарегистрирован: Чт мар 15, 2007 10:48:10 Сообщений: 126
Рейтинг сообщения:0
Друзья, помогите разобраться с тактированием GPIO STM32. Пытаюсь получить минимальный по времени импульс. Но получаю при установке GPIO_Speed_50MHz ВСЕГО порядка 600KHz (RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_4). Выжимал макс. 5MHz на делитете 16).
При простом цикле: GPIOA->BSRR = GPIO_BSRR_BR9; GPIOA->BSRR = GPIO_BSRR_BS9; На PA8 (MCO - типа дебага проверок тактирования в stm32) вывожу половину реальной частоты тактирования RCC_MCO_PLLCLK_Div2, получаю как и требуется - 8MHz (16/2)
В чем может быть проблема? Куда уходит ресурс? Прерывания отключал - картина не меняется. Должно же быть на GPIO теже 8MHz?
Помогите разобраться плз. Вот код. Вроде все минимизировал для читаемости:
Код:
void main (void) { init_gpio(); while (1) { GPIOA->BSRR = GPIO_BSRR_BR9; GPIOA->BSRR = GPIO_BSRR_BS9; } }
В чем может быть проблема? Куда уходит ресурс? Прерывания отключал - картина не меняется. Должно же быть на GPIO теже 8MHz?
Не должно, ни при каких условиях. Забудьте просто. Максимальная последовательная долговременная частота ногодрыга при вашей тактовой 16МГц всего 4МГц - два такта на установку пина, два на сброс. Но даже и это никому не нужно, в этом просто нет никакого смысла.
Последний раз редактировалось scorpi_0n Пт апр 28, 2017 15:07:21, всего редактировалось 2 раз(а).
Заголовок сообщения: Re: STM32 - проблемы с тактированием
Добавлено: Пт апр 28, 2017 14:37:33
Встал на лапы
Зарегистрирован: Чт мар 15, 2007 10:48:10 Сообщений: 126
Рейтинг сообщения:0
scorpi_0n писал(а):
Максимальная последовательная непрерывная частота ногодрыга при вашей тактовой 16МГЦ всего 4МГц - два такта на установку пина, два на сброс.
Логично. 4Mhz это бы я понял. Но у меня - 600KHz. Вот в чем загадка. При простейшем и прозрачном коде. Почему с PLL на GPIO приходит 600KHz? Где я мог забыть убрать делитель?
Нет там никаого делителя. Смотрите что накосячил компилятор. Но даже и это вам не поможет. Ещё раз - забудьте. Не тратьте зря время на преждевременную оптимизацию.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Заголовок сообщения: Re: STM32 - проблемы с тактированием
Добавлено: Пт апр 28, 2017 15:02:14
Встал на лапы
Зарегистрирован: Чт мар 15, 2007 10:48:10 Сообщений: 126
Рейтинг сообщения:0
scorpi_0n писал(а):
Нет там никаого делителя. Смотрите что накосячил компилятор. Но даже и это вам не поможет. Ещё раз - забудьте. Не тратьте зря время на преждевременную оптимизацию.
Не. Немного не так. Я не про оптимизацию. Я сейчас только начал изучение stm32, и трачу время (уже 2 дня потратил чтобы теорию свести с практикой. Ногодрыгом делать ничего, по возможности, не буду. В теории - на GPIO должно быть, как Вы заметили, 4Mhz. А у меня - 600KHz. Пока не найду где косяк - идти дальше в постижении нет смысла - если сыпется тактирование в GPIO - дальше уже никакого доверия
Не пойму, как компилятор мог накосячить, если на PA8 четкий такт в 8MHz, а в порт дает 600Khz... Может проц статикой убит?
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
В теории - на GPIO должно быть, как Вы заметили, 4Mhz. А у меня - 600KHz.
Это не только в теории, а и на практике, но при последовательном долговременном ногодрыге, чего у вас и нет. Смотрите листинг дизасма, считайте такты (хотя и это напрасный труд), если уж так заклинило.
Всё верно. Одна строчка на языке высокого уровня может разворачиваться в длинный список машинных инструкций. Хотите полной определённости - переходите на ассемблер.
Заголовок сообщения: Re: STM32 - проблемы с тактированием
Добавлено: Пт апр 28, 2017 21:56:01
Встал на лапы
Зарегистрирован: Чт мар 15, 2007 10:48:10 Сообщений: 126
Рейтинг сообщения:0
Мурик писал(а):
Почему ядро тактируется частотой 16 МГц, а не положенной ему 72?
Тактировал и 72Mhz. Получал на GPIO 5MHz. Начинаю догонять - как ниже uk8amk написал - 4 такта идет на выставление бита в порту. В этом вся и хрень похоже.
Мурик писал(а):
Оптимизация по скорости включена?
Нет. А где это ставится в eclipse? не нашел
Мурик писал(а):
Проверьте файлы из архива.
Прошивку залил (./st-flash write 16.hex 0x8000000), а что смотреть? на каких пинах? на PA8 у меня в ней чето ничего нет. с 72.hex тоже тишина..
Добавлено after 4 minutes 55 seconds:
uk8amk писал(а):
Всё верно. Одна строчка на языке высокого уровня может разворачиваться в длинный список машинных инструкций. Хотите полной определённости - переходите на ассемблер.
Да. Похоже что так. Четыре такта на запись выходит. Пытаюсь с ассемблером разобраться, но пока не очень выходит Гдеб простой пример найти, чтобы только в порт записать бит?
Тактировал и 72Mhz. Получал на GPIO 5MHz. Начинаю догонять - как ниже uk8amk написал - 4 такта идет на выставление бита в порту. В этом вся и хрень похоже.
Для F1 вроде не 4 такта, а 6, через DMA - 9. Хотя может при низких частотах с 0 латентностью 4 такта и получится...
[offtopic]налицо последствия "современного уровня" развития вычислительной техники: зачем считать такты, если можно взять кристалл на 100500 гигагерц и не парить мозг? зачем думать об оптимизации, если памяти немеряно, мегагерцев несчитано? дураки те, кто до сих пор сидит на 8-битниках, в то время как весь прогрессивный мир заглядывается на 64-битные микроконтроллеры...[/offtopic]
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: STM32 - проблемы с тактированием
Добавлено: Сб апр 29, 2017 12:14:26
Встал на лапы
Зарегистрирован: Чт мар 15, 2007 10:48:10 Сообщений: 126
Рейтинг сообщения:0
Мурик писал(а):
Ищите что-то похожее в вашей IDE.
Нашел: Спойлер Спасибо. Выставил -Ofast. Значительно быстрее стало.
Добавлено after 4 minutes 50 seconds:
ARV писал(а):
зачем считать такты, если можно взять кристалл на 100500 гигагерц и не парить мозг?
Не совсем так. Я как раз и хочу разобраться с тактами. Просто некоторые вещи не очень понятны. Где в AVR компилируется С за один такт - в stm32 за четыре - шесть Пытаюсь вот на асме освоить : asm ("LDR R0, =0x40020C10"); asm("MOV R1, 0x1000"); asm("STR R1, [R0]"); asm("LDR R0, =0x40020C10"); asm("MOV R1, 0x1000 << (1*16)"); asm("STR R1, [R0]");
но чета пока не выходит
Последний раз редактировалось VladimirVladimirovitch Сб апр 29, 2017 15:14:45, всего редактировалось 1 раз.
налицо последствия "современного уровня" развития вычислительной техники.... ...дураки те, кто до сих пор сидит на 8-битниках, в то время как весь прогрессивный мир заглядывается на 64-битные микроконтроллеры
STM32 значительно "современнее" чем 8-ти битные PIC и AVR. В них есть конвейер инструкций и возможна ситуация необходимости перезагрузки конвейера при ветвлении или вызове подпрограммы. Также возможна приостановка ядра на несколько тактов при занятости шины, например контроллером DMA. Все это не позволяет точно сказать за какое время будет выполнен код, поскольку возможны кратковременные приостановки ядра.
VladimirVladimirovitch писал(а):
Нашел
Там есть выпадающий список "Optimization Level". В нем нет -Ofast?
налицо последствия "современного уровня" развития вычислительной техники: зачем считать такты, если можно взять кристалл на 100500 гигагерц и не парить мозг?
load/store, кэш, конвейер, занятость шины, ДМА, вложенные прерывания - считайте такты, никто же не против.
Цитата:
зачем думать об оптимизации, если памяти немеряно, мегагерцев несчитано?
Преждевременная оптимизация такое же зло как и goto, volatile не к месту, незнание архитектуры и беспощадный ногодрыг, по привычке, который не в тему.
Цитата:
дураки те, кто до сих пор сидит на 8-битниках, в то время как весь прогрессивный мир заглядывается на 64-битные микроконтроллеры...
ну как "лишние" такты убежали в периоде B еще понятно. Но куда убежали такты в периоде C... Чем может быть занята шина, если тактирование только на GPIOB? Загадочный продукт этот stm32...
Латентность флэша и конвейер никто не отменял. Главное что вам нужно запомнить, что время выполнения недерминировано. Можете НОПами ещё поиграться, для интереса. Или вообще загрузить прогу в ОЗУ.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения