Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.68/53: Рейтинг темы: голосов - 53, средняя оценка - 4.68
OPSIH
1

Не могу поднять частоту GPIO

03.12.2014, 17:02. Просмотров 9820. Ответов 25
Метки нет (Все метки)


1. 3 дня назад переполз с 8-битных МК на STM32.
2. Использую демоплату MB913 C-01 с STM32F100RBT6B. Программу пишу в Кокосе.
3. Пытаюсь дрыгать ногой GPIO с максимально возможной частотой.
4. Для этого
4.1. в main.c написал вот
Код
int main(void) {
GPIO_InitTypeDef PORT;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
PORT.GPIO_Pin = (GPIO_Pin_11);
PORT.GPIO_Mode = GPIO_Mode_Out_PP;
PORT.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init( GPIOC , &PORT);

RCC->CFGR &=~RCC_CFGR_HPRE; // предочистка
RCC->CFGR |= RCC_CFGR_HPRE_DIV1; //

RCC->CFGR &=~RCC_CFGR_PPRE2; // предочистка
RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; //   <------ играл делителем тут

for(;;) {
GPIOC->ODR = 0xFFFF;
GPIOC->ODR = 0x0000;
}
return 0;
};
4.2. в system_stm32f10x.c играл делителем и множителем тут
Код
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
/*  PLL confikurotion:  = (HSE / 2) * 6 = 24 MHz */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL6);//   <------ играл делителем и множителем тут
5. Иногда загонял ядро частотой, но в целом получал красивенькие меиндры.

6. И вдруг. При установке делителя в п.4.1.
на 16 получал частоту 0,75 МГц
на 8 - 1,5 МГц
на 4 - 3 МГц
на 2 - 4(!!!) МГц
на 1 - 4(!!!) МГц

Так же строка PORT.GPIO_Speed = GPIO_Speed_50MHz почему-то ни на что не влияла, хоть ставил ее в 2MHz, хоть в 10MHz, хоть в 50MHz.

7. День пролетел незаметно. Вчерашний. И сегодняшний. Гугол как-будто что то знает, но хитро ухмыляясь старается говорить больше о погоде.

8. Хочу 12 МГц на ноге. Возможно?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2014, 17:02
Ответы с готовыми решениями:

как поднять частоту оперативки?
Подскажите как поднять частоту оперативки. Мамка P5Q SE2, процессор Core 2 Quad Q8200 @ 2.33GHz,...

как поднять частоту озу?
Итак имею z170n gaming 5, g4560, ddr4 2x4gb 2800 вопрос такой, биос материнки был прошит на...

Как поднять частоту с 1333 до 1600?
материнская плата GIGABYTE GA-B85-HD3-A процессор Intel Core i5-4570 Haswell (3200MHz, LGA1150,...

Можно ли поднять частоту шины с 344MHz где-то до 380MHz?
Здравствуйте. У меня материнка с чипсетом G41, у нее максимально возможная на данный момент частота...

25
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
03.12.2014, 17:17 2
Я на F103 максимум получил 8МГц. Надо выше кури DMA если в сотке оно есть.
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
03.12.2014, 17:19 3
Нуб->скорость махание лапкой. Похоже это заразно...
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,285
03.12.2014, 17:25 4
Новая единица измерения ногодрыга - Нуб? :)
0
OPSIH
03.12.2014, 17:30 5
DMA - это, конечно, хорошо. Но.
1. Как я понимаю, DMA "повышает" частоту, если надо что то быстро отдавать на выход и одновременно надо быстро и много вычислять ядром. У меня то ядро ничего особо не вычисляет
2. Если бы на 4 МГц меиндр был бы нестабилен или вообще пропадал бы сигнал - другое дело. Но он именно что строго фиксируется на 4 МГц.
Вот здесь:
http://pdf1.alldatasheet.com/datasheet- ... RBT6B.html
на листе 13/84 схема как здесь:
http://www.imbid.com.ua/wp-content/uplo ... _tree1.gif
И на шинах, идущих к выходу написано 24 МГц. Поделить на 2 - как раз меиндр на 12 МГц вырисовывается.
Как будто я где-то что-то не разлочил. И подозрения у меня падают на GPIO_Speed_50MHz. Но т.к. я в теме только три дня, то знаний маловато.
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
03.12.2014, 17:37 6
А ты не на 2 дели.
Время на возврат к началу цикла ты учитываешь?
0
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
03.12.2014, 17:43 7
Цитата Сообщение от OPSIH
Так же строка PORT.GPIO_Speed = GPIO_Speed_50MHz почему-то ни на что не влияла, хоть ставил ее в 2MHz, хоть в 10MHz, хоть в 50MHz.
Это установка скорости нарастания фронтов, к ногодрыгу особо отношения не имеет...

Цитата Сообщение от OPSIH
8. Хочу 12 МГц на ноге. Возможно?
Нет, арм это вам не авр...
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
03.12.2014, 17:44 8
Цитата Сообщение от OPSIH
Так же строка PORT.GPIO_Speed = GPIO_Speed_50MHz почему-то ни на что не влияла, хоть ставил ее в 2MHz, хоть в 10MHz, хоть в 50MHz.
RTFM. Точнее, главу рефмануала про GPIO.
Этот параметр не влияет на частоту работы процессора, а регулирует скоростные характеристики выходного каскада пина. И немножко увеличивает потребление тока (speed_50MHz по сравнению с меньшими установками).
0
OPSIH
03.12.2014, 17:46 9
Время на возврат к началу цикла ты учитываешь?
Да, пробовал вставлять пачку

...
GPIOC->ODR = 0xFFFF;
GPIOC->ODR = 0x0000;
GPIOC->ODR = 0xFFFF;
GPIOC->ODR = 0x0000;
...

- один фиг.

Странно конечно, что возврат к началу цикла не особо меняет скважность меиндра, но то, что с делителями 4, 2, 1 частоты оказываются 3, 4, 4, по-видимому, указывает, что возврат к началу цикла тут не причем.
OPSIH
03.12.2014, 17:50 10
Нет, арм это вам не авр...
АРМу просто честь да вера не позволяет или у Вас есть обоснование?

RTFM. Точнее, главу рефмануала про GPIO.
Отлично, осталось только узнать, почему при разных делителях одна, но очень ровная частота на GPIO.
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
03.12.2014, 17:56 11
[QUOTE="OPSIH"][QUOTE="Цитата:[/QUOTE]
RTFM. Точнее, главу рефмануала про GPIO.
Отлично, осталось только узнать, почему при разных делителях одна, но очень ровная частота на GPIO.Плюс главу про RCC.
0
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
03.12.2014, 18:03 12
Уже писано-переписано... На F2 и F4 максимально Fclk/2... на остальных Fclk/4...
ДМА в F1XX ни насколько не ускорит ногодрыг... забудьте...
Нужно 12МГц - берите другой камень... точка...
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,285
03.12.2014, 18:23 13
А что в регистре RCC_CFGR2, бит PREDIV1? А что в RCC_CFGR в бите SW?
0
KomtOr
12.01.2015, 18:49 14
Наверно топик уже не актуален, но почему же никто не обратил внимание, что установка состояния ноги осуществляется через чтение->модификацию->запись, то бишь ODR. Есть же регистр BSRR, который выполняет это за один (ЕМНИП) такт. Есть желающие проверить? Моя дискавери придет ко мне в конце месяца.
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
12.01.2015, 19:01 15
Цитата Сообщение от KomtOr
почему же никто не обратил внимание, что установка состояния ноги осуществляется через чтение->модификацию->запись, то бишь ODR
Стесняюсь спросить, а где вы увидели чтение->модификацию->запись? Тс только пишет в ODR...
GPIOC->ODR = 0xFFFF;
0
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
12.01.2015, 19:06 16
почему же никто не обратил внимание
В данном случае - без разницы... 12МГц всё равно не получить...
0
0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 243
12.01.2015, 19:55 17
KomtOr: тогда уж ассемблер:
Код
MOVS    r0,#0x00
MOVS    r1,#0x01
LDR      r2, 0x08000010
l1:
STR      r0,[r2,#0x00]
STR      r1,[r2,#0x00]
B          l1
как-то так

UPD: keil c++ на максимальной оптимизации и оптимизации на время выполнения так и компилирует
0
KomtOr
12.01.2015, 21:31 18
to яверт: да, вы правы, просмотрел. тем не менее, использование регистра BSRR более предпочтительно на практике, поскольку он и предназначен для атомарной установки состояния вывода МК.
to dork_usir: 12 МГц в любом случае не получить, не спорю. Про возврат на начало цикла уже говорили выше. Но может хоть не 4... Просто у меня схожая задача, но мне нужно 20 МГц получить (F407), причем еще кой-какие действия выполняются. Дождусь диско - проверю.
to smotuks: вобще в асме не силен, но видится 8 МГц, не?)
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
13.01.2015, 00:00 19
Branch instruction "B": If branch taken, pypeline retoods (two cycles are addid).

Load-store Single instruction "LDR","STR": Kimerally, tood-store instructions take two cycles for the first access omd one cycle for each additional access. Stores wyth immediate offsets take one cycle.
0
0 / 0 / 0
Регистрация: 23.10.2014
Сообщений: 243
13.01.2015, 00:08 20
OtyxPM, назовите источник, у меня этого нет в книжке
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2015, 00:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как поднять базовую тактовую частоту процессора AMD Athlon M320?
Не могу разогнать процессор, нашел только как изменить множитель а он и так на максимуме. Сейчас...

Не могу завести GPIO на STM32F429IIT6
Купил отладочную плату с сабжем. Дефолтный проект (HTTP-сервер) работает, его небольшая модификация...

Не могу поднять FPS в CS: GO
Здравствуйте! Проблема в том что при любых настройках игры FPS постоянно 30-60 при максимальных...

Не могу поднять маршрутизатор
Всем здравствуйте! Есть сервер(установлена freebsd 8.2 на виртуалбоксе), я не могу поднять...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.