Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 - проблемы с тактированием
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 13:12:57

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 48 ]  1, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: 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;
 }
}
 
void init_pll(void)
{
    RCC_DeInit(); //    сброс настроек тактового генератора
    RCC_HSEConfig(RCC_HSE_OFF); //    отключение внешнего тактового генератора
    //RCC_HSEConfig(RCC_HSE_ON);
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_4); //    тактирование от HSI с делителем 2: 8 / 2 * 4 = 16МГц
    RCC_HSICmd(ENABLE);
    RCC_PLLCmd(ENABLE); //    Включаем PLL
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //    На системную шину подаем тактирование с множителя PLLMUL
}
 
void init_gpio()
{
 
  init_pll();

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    // Тактуем порт
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
 
  RCC_MCOConfig(RCC_MCO_PLLCLK_Div2);
}

P.S. Чип - STM32F103C8T6 (8Mhz)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Пт апр 28, 2017 14:31:29 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: -32
Зарегистрирован: Вс ноя 01, 2015 13:13:49
Сообщений: 616
Рейтинг сообщения: 1
VladimirVladimirovitch писал(а):
В чем может быть проблема? Куда уходит ресурс? Прерывания отключал - картина не меняется.
Должно же быть на 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? Где я мог забыть убрать делитель?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Пт апр 28, 2017 14:48:07 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: -32
Зарегистрирован: Вс ноя 01, 2015 13:13:49
Сообщений: 616
Рейтинг сообщения: 0
Нет там никаого делителя. Смотрите что накосячил компилятор. Но даже и это вам не поможет. Ещё раз - забудьте. Не тратьте зря время на преждевременную оптимизацию.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы 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 для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Пт апр 28, 2017 15:12:18 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: -32
Зарегистрирован: Вс ноя 01, 2015 13:13:49
Сообщений: 616
Рейтинг сообщения: 0
VladimirVladimirovitch писал(а):
В теории - на GPIO должно быть, как Вы заметили, 4Mhz. А у меня - 600KHz.

Это не только в теории, а и на практике, но при последовательном долговременном ногодрыге, чего у вас и нет. Смотрите листинг дизасма, считайте такты (хотя и это напрасный труд), если уж так заклинило.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Пт апр 28, 2017 18:35:54 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
Почему ядро тактируется частотой 16 МГц, а не положенной ему 72? Более того обычно нормально работает в разгоне выше 100 МГц.

Оптимизация по скорости включена?
Проверьте файлы из архива.


Вложения:
Test.zip [4.78 KiB]
Скачиваний: 224
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Пт апр 28, 2017 20:27:05 
Поставщик валерьянки для Кота

Карма: 16
Рейтинг сообщений: 329
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Сообщений: 2222
Откуда: Tashkent
Рейтинг сообщения: 0
Всё верно. Одна строчка на языке высокого уровня может разворачиваться в длинный список машинных инструкций. Хотите полной определённости - переходите на ассемблер.
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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 писал(а):
Всё верно. Одна строчка на языке высокого уровня может разворачиваться в длинный список машинных инструкций. Хотите полной определённости - переходите на ассемблер.

Да. Похоже что так. Четыре такта на запись выходит.
Пытаюсь с ассемблером разобраться, но пока не очень выходит :)
Гдеб простой пример найти, чтобы только в порт записать бит?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Пт апр 28, 2017 21:59:09 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
VladimirVladimirovitch писал(а):
А где это ставится в eclipse?
В настройках проекта в разделе компилятора.

VladimirVladimirovitch писал(а):
а что смотреть? на каких пинах?
На тех же. Скомпилирован этот код с оптимизацией максимальной скорости.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Пт апр 28, 2017 22:07:06 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 0
VladimirVladimirovitch писал(а):
Тактировал и 72Mhz. Получал на GPIO 5MHz. Начинаю догонять - как ниже uk8amk написал - 4 такта идет на выставление бита в порту. В этом вся и хрень похоже.

Для F1 вроде не 4 такта, а 6, через DMA - 9. Хотя может при низких частотах с 0 латентностью 4 такта и получится...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Пт апр 28, 2017 22:44:18 
Встал на лапы

Зарегистрирован: Чт мар 15, 2007 10:48:10
Сообщений: 126
Рейтинг сообщения: 0
Мурик писал(а):
Скомпилирован с оптимизацией максимальной скорости.

16.hex -
Изображение
2,4MHz Против моих 600KHz

72.hex -
Изображение
8MHz против моих 5

здорово. узнать бы теперь как оптимизация выставляется. в инете не нашел.
P.S. спасибо за помощь!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Пт апр 28, 2017 22:55:19 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 0
VladimirVladimirovitch писал(а):
8MHz против моих 5

Точно, 6 тактов - это был вывод в порт с чтением из памяти, т.е. 2 команды...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Сб апр 29, 2017 08:48:44 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
VladimirVladimirovitch писал(а):
здорово. узнать бы теперь как оптимизация выставляется.
В EmBitz, в котором компилировал, оптимизация выбирается в опциях сборки проекта.
СпойлерИзображение

Ищите что-то похожее в вашей IDE.


Вложения:
EmBitz.png [38.27 KiB]
Скачиваний: 815
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Сб апр 29, 2017 11:40:58 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
scorpi_0n писал(а):
считайте такты (хотя и это напрасный труд)
[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 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Сб апр 29, 2017 12:36:56 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 1
ARV писал(а):
налицо последствия "современного уровня" развития вычислительной техники....
...дураки те, кто до сих пор сидит на 8-битниках, в то время как весь прогрессивный мир заглядывается на 64-битные микроконтроллеры
STM32 значительно "современнее" чем 8-ти битные PIC и AVR. В них есть конвейер инструкций и возможна ситуация необходимости перезагрузки конвейера при ветвлении или вызове подпрограммы. Также возможна приостановка ядра на несколько тактов при занятости шины, например контроллером DMA. Все это не позволяет точно сказать за какое время будет выполнен код, поскольку возможны кратковременные приостановки ядра.

VladimirVladimirovitch писал(а):
Нашел
Там есть выпадающий список "Optimization Level". В нем нет -Ofast?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Сб апр 29, 2017 13:14:41 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: -32
Зарегистрирован: Вс ноя 01, 2015 13:13:49
Сообщений: 616
Рейтинг сообщения: 1
ARV писал(а):
налицо последствия "современного уровня" развития вычислительной техники: зачем считать такты, если можно взять кристалл на 100500 гигагерц и не парить мозг?

load/store, кэш, конвейер, занятость шины, ДМА, вложенные прерывания - считайте такты, никто же не против.
Цитата:
зачем думать об оптимизации, если памяти немеряно, мегагерцев несчитано?

Преждевременная оптимизация такое же зло как и goto, volatile не к месту, незнание архитектуры и беспощадный ногодрыг, по привычке, который не в тему.
Цитата:
дураки те, кто до сих пор сидит на 8-битниках, в то время как весь прогрессивный мир заглядывается на 64-битные микроконтроллеры...

Хорошо что вы это понимаете.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Сб апр 29, 2017 18:37:14 
Встал на лапы

Зарегистрирован: Чт мар 15, 2007 10:48:10
Сообщений: 126
Рейтинг сообщения: 0
Мурик писал(а):
Там есть выпадающий список "Optimization Level". В нем нет -Ofast?

Не. Списка нет. Я пишу в доп. опцию
Изображение

Добавлено after 3 hours 13 minutes 13 seconds:
Переписал на асме:
Код:
   asm("LDR   R0, =0x40010C10"); // пишем адрес BSRR для GPIOB
while(1)
// включаем/ выключаем 12пин
   {
   asm  (
         "MOV   R1, 0x1000\n"\
         "STR   R1, [R0]\n"\

         "MOV   R1, 0x10000000\n"\
         "STR   R1, [R0]");
   }
}


и получаю вообще сказочную хрень:
Изображение

ну как "лишние" такты убежали в периоде B еще понятно. Но куда убежали такты в периоде C... Чем может быть занята шина, если тактирование только на GPIOB?
Загадочный продукт этот stm32...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 - проблемы с тактированием
СообщениеДобавлено: Сб апр 29, 2017 20:45:16 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: -32
Зарегистрирован: Вс ноя 01, 2015 13:13:49
Сообщений: 616
Рейтинг сообщения: 0
Латентность флэша и конвейер никто не отменял. Главное что вам нужно запомнить, что время выполнения недерминировано. Можете НОПами ещё поиграться, для интереса. Или вообще загрузить прогу в ОЗУ.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 48 ]  1, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y