Easyelectronics.ru

Электроника для всех
Текущее время: 24 окт 2020, 20:41

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 02:27 
Заглядывает иногда

Зарегистрирован: 20 ноя 2010, 02:55
Сообщения: 154
Доброго времени суток.
Приобрел STM32F4 Discovery, помигал светодиодом. Начал разбираться с системой тактирования, сгенерил файлик system_stm32f4xx.c с помощью STM32F4xx_Clock_Configuration с HCLK 168Mhz, но в действительности частота в 10 раз меньше, вот код:
Код:
#include <stm32f4xx.h>
#include <stm32f4xx_conf.h>

#include <stm32f4xx_rcc.h>
#include <stm32f4xx_gpio.h>

void Delay(volatile uint32_t nCount) {
    for (; nCount != 0; nCount--);
}

int main(void) {
   SystemInit();
   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD , ENABLE);

   GPIO_InitTypeDef GPIO_InitStructure;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
   GPIO_Init(GPIOD, &GPIO_InitStructure);

   while (1) {
      GPIO_SetBits(GPIOD, GPIO_Pin_12);
      Delay(500000);
      GPIO_ResetBits(GPIOD, GPIO_Pin_12);
      Delay(500000);
   }

   return 0;
}


В итоге частота мигания светодиодом составляет 16.7966Hz! т.е процессор работает с частотой 16.8Mhz вместо 168Mhz.
В качестве источника PLL используется HSE с Discovery (8Mhz)
Код:
#define PLL_M      8
#define PLL_N      336

/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 03:01 
Старожил

Зарегистрирован: 14 мар 2012, 13:58
Сообщения: 1727
Под Вашу дискавери есть пакет готовых примеров. В том числе, чтобы и помигать. Насколько я знаю, они уже все на 168 МГц.

Вы уверены полагаете, что Ваш delay() отсчитает от 500000 до нуля за 500000 машинных циклов?


Последний раз редактировалось dima2611 21 сен 2012, 03:11, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 03:07 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
вот это
Код:
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

Прозрачно намекает - "максимальная тактовая частота для ноги будет 100 МегаГерц".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 10:33 
Заглядывает иногда

Зарегистрирован: 20 ноя 2010, 02:55
Сообщения: 154
dima2611 писал(а):
Под Вашу дискавери есть пакет готовых примеров. В том числе, чтобы и помигать. Насколько я знаю, они уже все на 168 МГц.

Вы уверены полагаете, что Ваш delay() отсчитает от 500000 до нуля за 500000 машинных циклов?


Ну не за 5 000 000 же, 10 циклов на вычитание и сравнение с 0? Многовато


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 11:46 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
Ну у вас во первых цикл ожидания выполняется дважды(это на предмет 10 тактов). Во вторых, даташит http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/DM00037051.pdf говорит нам :
Цитата:
Up to 136 fast I/Os up to 84 MHz
, обратите внимание на частоту(up to - не более, не выше чем 84 мегагерца. учитывая что один период сигнала состоит из 2х фаз частота сигнала автоматом падает до 42х мегаГерц при наилучшем раскладе)! В третьих вы юзаете AHB1, а она в 2 раза тормознее AHB2. И неясно как в коде установлены все прескаллеры для шин.
И в последних - хотите померять частоту - поставьте задержку равную 1.
Это все таки не AVR где задержки можно лепить на циклах с нопами потому что количество тактов- тупо фиксировано. Время работы функции помещенной в рам и во флэш - тут будет отличаться. Кстати и в АВР паузы вполне себе делаются на таймерах ( в кортексе тем более - таймеров просто завались).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 12:15 
Заглядывает иногда

Зарегистрирован: 20 ноя 2010, 02:55
Сообщения: 154
balu_dark писал(а):
Ну у вас во первых цикл ожидания выполняется дважды(это на предмет 10 тактов).
Во вторых, даташит http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/DM00037051.pdf говорит нам :
Цитата:
Up to 136 fast I/Os up to 84 MHz
, обратите внимание на частоту(up to - не более, не выше чем 84 мегагерца. учитывая что один период сигнала состоит из 2х фаз частота сигнала автоматом падает до 42х мегаГерц при наилучшем раскладе)! В третьих вы юзаете AHB1, а она в 2 раза тормознее AHB2. И неясно как в коде установлены все прескаллеры для шин.
И в последних - хотите померять частоту - поставьте задержку равную 1.
Это все таки не AVR где задержки можно лепить на циклах с нопами потому что количество тактов- тупо фиксировано. Время работы функции помещенной в рам и во флэш - тут будет отличаться. Кстати и в АВР паузы вполне себе делаются на таймерах ( в кортексе тем более - таймеров просто завались).


Ну на это и было рассчитано. 2*500 000 = 1 000 000/ 168MHz/1 000 000 = ~168Hz - скорость мигания светодиодом, даже до 42MHz очень далеко. На деле же 16.8Hz.
Прескейлеры для шин выставлены, так чтобы все шины работали на максимальной частоте.
Пробовал уменьшить задержку, но частота растет линейно, уменьшаю на 1000 задержку, частота возрастает в 1000 раз.
Неужели m4 действительно надо 10 циклов на 1 проход цикла задержки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 12:22 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
В какой памяти работает этот код? Хотите максимальную скорость - запускайте код из РАМ. Флэш не работает на 168мгц - лезет куча задержек. Поэтому я и написал что нопами в армах никто не делает задержки - сильно другие условия всего. Пользуйте таймер и будет счастие. Не говоря уже о возможности автоматической смены состояния пина.


Последний раз редактировалось balu_dark 21 сен 2012, 12:31, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 12:30 
Заглядывает иногда

Зарегистрирован: 20 ноя 2010, 02:55
Сообщения: 154
balu_dark писал(а):
В какой памяти работает этот код?

А как это узнать? ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 12:32 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
BuTbKa писал(а):
balu_dark писал(а):
В какой памяти работает этот код?

А как это узнать? ))

ну какбы либо при отладке глянуть из какой области памяти работает код, либо из опций компилятора.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 12:32 
Старожил
Аватара пользователя

Зарегистрирован: 11 сен 2010, 12:35
Сообщения: 260
Откуда: Россия, Москва
А частоту померить просто... Есть у них волшебный выход MCO - на который можно вывести системную тактовую

_________________
Wikipedia: Я знаю всё!
Google: Я найду всё!
ВКонтакте: Я знаю всех!
Internet: Без меня вы ничто!
Электричество: Ну, ну...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 12:34 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6096
Откуда: Москва
Да, только чем ее смотреть-то на такой частоте? Разве что делитель соорудить...

Впрочем вполне можно будет увидеть, что больше 16.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 15:47 
Заглядывает иногда

Зарегистрирован: 20 ноя 2010, 02:55
Сообщения: 154
Спасибо за советы, буду смотреть вечером, что и как.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 21 сен 2012, 16:09 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
Вопросы тактирования поднимали тут http://forum.easyelectronics.ru/viewtopic.php?f=35&t=11747.
И еще - пока не могу найти название топика, был интересный топик по аналогичной проблеме - там мы дрыгали ногой и даже осциллограммы снимали при различном тактировании периферии. Вспомню - скину сюда линк. Это все тут на нашем форуме было. Возможно в STM32 для начинающих.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F4 - Тактовая частота ядра Cortex M4
СообщениеДобавлено: 24 сен 2012, 10:17 
Заглядывает иногда

Зарегистрирован: 20 ноя 2010, 02:55
Сообщения: 154
Всем спасибо, разобрался. Действительно ядро работает на 168Mhz.
А цикл задержки выполнялся 10 тактов.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 


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


Кто сейчас на конференции

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB