[Решено] Лучший способ использования кристалла 16 МГц (данная плата [STM32F1])) ?

Черная бригада
Sun 31 декабря 2017 г. 15:54
Моя плата использует кристалл 16 МГц, и я не хочу его менять.
это STM32F103VET6, и я хочу использовать Rogers Core

Как лучше всего внедрить его в мои дополнительные определения доски & файлы для ядра ?
(Конечно, было бы неплохо, если бы модификация была сделана в некоторых файлах в моей папке с добавленным вариантом вместо изменения файлов основных

здесь есть предложение от Роджера -> ViewTopic.PHP?P = 13842#P13842
Чтобы изменить boards_setup.CPP, поэтому я попытался вставить что -то подобное #ifdef XTAL16M // 16MHz crystal (HSE) // in this case we set additionally the Bit 17 (PLLXTPRE=1) => then HSE clock is divided by 2 before PLL entry static stm32f1_rcc_pll_data pll_data = {BOARD_RCC_PLLMUL | (0x1 << 17) }; #else // default 8MHz crystal static stm32f1_rcc_pll_data pll_data = {BOARD_RCC_PLLMUL}; #endif

Пито
Солнце 31 декабря 2017 г., 17:03
Это может работать, когда вы делаете в Arduino_stm32/STM32F1/Cores/Maple/Libmaple/RCC_F1.C линия 107: RCC_BASE->CFGR = pll_src | pll_mul | (0x3<<22) | (0x1<<17);

Rogerclark
Солнце 31 декабря 2017 г. 8:18 вечера
Как говорит Пито.

Вам нужно только изменить множитель часов PLL

Если вы посмотрите на вариант GD32 (который больше не является опцией в меню, но код все еще включен), он использовал кристалл 12 МГц, так что вы можете сравнить с чем -то вроде общего варианта STM32C8, а не разница в настройках PLL

Пито
Пн, 01 января 2018 г., 2:59
PF 2018!

72/16 = 4.5 Таким образом, единственный способ - установить ПРИ -ПРИКЛАР, как указано выше (бит 17). Множество целочисленных PLL не будут работать на 72 МГц и 16 МГц xtal.

Rogerclark
Пн, 01 января 2018 г., 3:06 утра
[Пито - Пн, 01 января 2018 2:59] - PF 2018!

72/16 = 4.5 Таким образом, единственный способ - установить ПРИ -ПРИКЛАР, как указано выше (бит 17). Множество целочисленных PLL не будут работать на 72 МГц и 16 МГц xtal.
Хороший момент

3 X PLL можно использовать, чтобы дать 48 МГц и при этом поддерживать USB

Альтернатива The OP должен будет использовать 64 МГц, чтобы оставаться в пределах спецификации или 80 МГц, чтобы работать прямо за пределами спецификации
(В нормальных внутренних условиях я обнаружил, что 128 МГц работал нормально)

Но для всех этих вариантов необходимо изменить F_CPU, а на частотах, отличных от 72 МГц, не было тщательно протестировано.

КСТАТИ. Я помню, как кто -то еще разместил подобный вопрос, но я думаю, что они могли использовать еще более высокую частоту кристалл

Черная бригада
Пн, 01 января 2018 10:00 утра
[Пито - Sun 31 декабря 2017 г., 17:03] - Это может работать, когда вы делаете в Arduino_stm32/STM32F1/Cores/Maple/Libmaple/RCC_F1.C линия 107: RCC_BASE->CFGR = pll_src | pll_mul | (0x3<<22) | (0x1<<17);

Пито
Пн, 01 января 2018 г., 11:52
К сожалению, тогда я буду менять основные файлы, это то, чего я хотел избежать ...
(Было бы лучше, если бы модификация может быть сделана в некоторых из файлов в моей папке с добавленным вариантом вместо изменений файлов основных
Есть RCC_CFGR_PLLXTPRE, определенный в RCC F1.H, но не используется.
Он должен быть добавлен в ядро, чтобы использовать его в вашем варианте (boards_setup.CPP), кажется..

Черная бригада
Пн, 01 января 2018 г., 19:11
Пито написал:Это может работать, когда вы делаете в Arduino_stm32/STM32F1/Cores/Maple/Libmaple/RCC_F1.C линия 107:

Mrburnette
Пн, 01 января 2018 г., 19:34
[Черная бригада - Пн, 01 января 2018 г., 19:11] - Как вы думаете, это может быть добавлено в ядро?
... Почему ядро ​​должно быть изменено для одноразовой инициативы?

Вопрос был бы, если бы форум хотел полностью поддержать ссылочную доску, то, как мы делаем черные, синие, красные и кленовые мини.
Пример: http: // wiki.STM32duino.com/index.PHP?title = blue_pill

Я рад, что у вас функционирует ваш блок с кристаллом 16 МГц, и этот поток документирует, как вы достигли решения. Пожалуйста, не стесняйтесь просить привилегии вики и документировать перезагрузку. Тем не менее, основные изменения вводят много проблем даже для вещей, которые кажутся слишком простыми, как можно увидеть из количества бросков в прошлом году.

Моя рекомендация состоит в том, чтобы использовать Post Note-It, чтобы напомнить себе о том, чтобы внести локальный изменение в вашей системе каждый раз, когда вы обновляете свой компьютер с Master GitHub.


Луча

Черная бригада
Пн, 01 января 2018 г., 21:10
Mrburnette написал:Почему ядро ​​должно быть изменено для одноразовой инициативы ?

Mrburnette
Пн, 01 января 2018 11:41
Черная бригада написал: Пн, 01 января 2018 г., 21:10

ZMEMW16
Вторник 02 января 2018 12:04
Можем ли мы изменить это и спросить, как сделать это таким ?
Направить его из ядра ?
Может ли это сделать таким образом, чтобы ядра использовал c.F Связанная библиотека, построенная просто на кристаллической частоте.

Новый год, новые идеи, хорошо, может быть : D

Стивен

Черная бригада
Ср. 03 января 2018 г. 9:52 утра
[Mrburnette - Пн. 1 января 2018 г. 23:41] - абсолютно разумно, что все участники понимают, что этот форум является частным предприятием, а не коммерческим, спонсируется и поддерживается по существу одним человеком, который стремится «иметь жизнь» за пределами форум.
ага,
Я абсолютно согласен и понимаю, что *Thumbsup *
[Mrburnette - Пн. 1 января 2018 г., 23:41] - или, создайте параллельную филиал GitHub и синхронизирована только по мере необходимости...
да, ты прав, я уже сделал это.
(Хотя я не имею никаких знаний об использовании GIT/GitHub правильно : oops: )
.
. ZMEMW16 написал:Можем ли мы изменить это и спросить, как сделать это таким ?
Направить его из ядра ?

Пито
Ср. 03 января 2018 г. 10:52
Это будет правильным способом (не нужно касаться ядра) ... В \ stm32f1 \ variants \ generic_stm32f103v \ wirish \ boards.CPP есть (строка 129)
// Configure AHBx, APBx, etc. prescalers and the main PLL. wirish::priv::board_setup_clock_prescalers(); rcc_configure_pll(&wirish::priv::w_board_pll_cfg);

Черная бригада
Ср. 03 января 2018 г. 13:18
Ааа, да, это может сработать
Я проверю это ...

Черная бригада
Чт, 04 января 2018 13:13
Пито, я проверил это, и это работает : D

[Редактировать] Есть только одна дополнительная линия,
Итак, окончательное решение (в "..\ Stm32f1 \ variants \ your_board \ wirish \ boards.CPP "): // Configure AHBx, APBx, etc. prescalers and the main PLL. wirish::priv::board_setup_clock_prescalers(); rcc_configure_pll(&wirish::priv::w_board_pll_cfg); #ifdef XTAL16M // 16MHz crystal (HSE) // in this case we additionally set the Bit 17 (PLLXTPRE=1) => then HSE clock is divided by 2 before PLL entry RCC_BASE->CFGR |= RCC_CFGR_PLLXTPRE; #endif

Пито
Чт, 04 января 2018 г., 13:34
uint32 cfgr = rcc_base->CFGR;
Rcc_base->Cfgr = cfgr | RCC_CFGR_PLLXTPRE;
RCC_BASE->CFGR |= RCC_CFGR_PLLXTPRE;

Черная бригада
Чт, 04 января 2018 13:51
Да, это также работает (но без места между '|' и '=' (была опечатка в вашем посте выше)),
Я отредактировал свой пост выше соответственно ... 8-)

Пито
Чт, 04 января 2018 г., 13:55
Теперь следующим шагом является создание дерева решений для xTals 8/10/12/16/20/25 МГц (настройка множителя в Prescaler и OFF и PLL), добавьте опцию меню XTAL, и вы можете выдать пиар :)

Ходидас11
Сб 27 января 2018 г., 5:33 утра
Привет

Я добавил эту линию на 16 МГц, она сработала

Rcc_base->Cfgr | = rcc_cfgr_pllxtpre;


Можете ли вы помочь на 12 МГц, так как я хочу запустить свою систему на ней.

Ходидас11
Сб 27 января 2018 г., 7:07
Привет

Сделано с 12 МГц также,

Нашел помощь от https: // github.com/rogerclarkmelbourne/ ... _настраивать.CPP


Я наблюдал, как мой множитель PLL был на 3, который дает периферийные устройства так 36 МГц

Я сделал множитель PLL как 2, поэтому PLL работает на 24 МГц сейчас. И сейчас работает все периферийные устройства сейчас.

Rogerclark
Сб 27 января 2018 г. 11:10
PLL настроен на умножение на 9 обычно.

Вам нужно будет умножить на 6

Я не уверен, что фактические значения, которые вы записываете в регистр управления PLL для любого множителя PLL