Изменение настроек PLL для 24 МГц xtal

C_D
Пн 28 августа 2017 г., 21:33
Я пытаюсь использовать загрузчик STM32Duino на пользовательской плате, но я не могу заставить загрузчик запустить. Micro - это F103R8T7, он имеет светодиод на PC13 и подтягивающий резистор на PA12 для USB -сброса.

Я заметил, что у моей платы есть кристалл 24 МГц, и я предполагаю, что загрузчик не будет настроен для этого. Единственная ссылка, которую я могу найти в источнике, - это аппаратное обеспечение.c, это единственное, что мне нужно изменить в коде для кристалла 24 МГц?
/* Configure PLL */ #ifdef XTAL12M SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x00110400); /* pll=72Mhz(x6),APB1=36Mhz,AHB=72Mhz */ #else SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x001D0400); /* pll=72Mhz(x9),APB1=36Mhz,AHB=72Mhz */ #endif SET_REG(RCC_CR, GET_REG(RCC_CR) | 0x01000000); /* enable the pll */

victor_pv
Пн 28 августа 2017 г., 21:54
У USB есть настройка разделителя. Этот разделитель может быть установлен на PLL/1 или PLL/1.5.
USB должен работать на 48 МГц точно.
Таким образом, USB может работать, если PLL может создать частоту 48 МГц или 72 МГц, а разделитель устанавливается соответственно на 1 или 1.5.

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

Ddrown
Пн 28 августа 2017 г. 22:03
[C_D - Пн 28 августа 2017 г., 21:33] - Я пытаюсь использовать загрузчик STM32Duino на пользовательской плате, но я не могу заставить загрузчик запустить. Micro - это F103R8T7, он имеет светодиод на PC13 и подтягивающий резистор на PA12 для USB -сброса.

Я заметил, что у моей платы есть кристалл 24 МГц, и я предполагаю, что загрузчик не будет настроен для этого. Единственная ссылка, которую я могу найти в источнике, находится в конфигурации.c, это единственное, что мне нужно изменить в коде для кристалла 24 МГц?
/* Configure PLL */ #ifdef XTAL12M SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x00110400); /* pll=72Mhz(x6),APB1=36Mhz,AHB=72Mhz */ #else SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x001D0400); /* pll=72Mhz(x9),APB1=36Mhz,AHB=72Mhz */ #endif SET_REG(RCC_CR, GET_REG(RCC_CR) | 0x01000000); /* enable the pll */

Rogerclark
Пн 28 августа 2017 г. 22:34
Основной PLL должен быть изменен на 3 x вместо 9 x

USB -часы выведены из основных часов, поэтому не нужно менять, если вы исправите основные часы PLL и установите его на 24 x 3 = 72

Пса.

Если вы посмотрите на настройки для платы GD32, он имеет кристалл 12 МГц, так что вы должны увидеть, как сделать аналогичное изменение для кристалла 24 МГц

C_D
Пн 28 августа 2017 г., 23:30
Просто пробираясь через STM32Cubemx, он не любит вход более 16 МГц, но таблица DataShing действительно говорит о TP 25 МГц, так что я думаю, это нормально?

Это выглядит правильно?
Конфигурация часов.jpg
Конфигурация часов.JPG (113.49 киб) просмотрено 859 раз

victor_pv
Вторник 29 августа 2017 г. 1:28
Это, вероятно, должно быть.
Если 101 действительно идентичен 103, все остальное в порядке для XTAL 24 МГц.
Я не знаю, есть ли какая -либо другая разница между 101 и 103, но аппаратное обеспечение USB, похоже, там, по крайней мере, достаточно часто.
Вполне возможно, что существуют различные пересмотра 101, некоторые с USB, а некоторые без, то же, как и у некоторых 103C8T6, имеют 64 КБ вспышки, а некоторые - 128 КБ.
Также возможно, что 101 может не работать надежно на этих скоростях.
Если это так, то вы можете попробовать 48 МГц, как упомянуто.

Rogerclark
Вторник 29 августа 2017 2:09
@C_d

Да, эти строки, которые вам понадобятся

https: // github.com/rogerclarkmelbourne/ ... #L118-L122

Если вы посмотрите

https: // github.com/rogerclarkmelbourne/ ... #L576-L591

В этом перечислены настройки битов для различных умножений PLL

я.E 9 x - это

Rcc_pllmul_9 = (0x7 << 18),

и вам нужно 3 х

Rcc_pllmul_3 = (0x1 << 18)

(Обратите внимание, что REG также управляет другими вещами, поэтому вам придется изменить только биты 18 - 22

C_D
Пн сентября 04, 2017 3:26 утра
Хорошо, я делаю прогресс, но я еще не совсем работал.

Я выработал, как перекомпилировать загрузчик и загрузить его, используя мой stlink. Я успешно перекомпилировал и загружен в синюю таблетку 8 МГц, и это сработало.

Мне также удалось скомпилировать эскиз (количество мигания) для работы 24 МГц, взлома ...\Arduino_STM32\STM32F1\variants\generic_stm32f103r8\wirishboards_setup.cpp

Rogerclark
Пн, сентябрь 04, 2017 5:41
Если USB не работает, наиболее вероятная причина заключается в том, что ваша основная частота такта - это не то, что вы думаете

Вы могли бы запустить основные часы при 2 x 24 = 48, а светодиод мигает или 4 x 24 = 96, а светодиод мигает, но USB не будет работать ни с одним из них.


Тем не менее, вы также являетесь кристаллом, который находится за пределами спецификации MCU, который говорит, что 16 МГц - самая высокая частота, которую вы можете использовать.

http: // www.ул.com/content/ccc/resource/ ... 161566.PDF

Возможно, что иногда он может работать с внешним кристаллом 24 МГц, но это потенциально проблема, ожидающая, если вы не замените кристалл одним в рабочем диапазоне для MCU

victor_pv
Пн, сентябрь 04, 2017, 15:50
Можете ли вы опубликовать изменения, которые вы внесли в загрузчик, чтобы проверить, нужны ли они?

C_D
Пн, сентябрь 04, 2017, 19:57
[Rogerclark - Пн, сентябрь 04, 2017 5:41 утра] - ...Вы также являетесь кристаллом, который находится за пределами спецификации MCU, который говорит, что 16 МГц - самая высокая частота, которую вы можете использовать.
Ах, так это. Я уверен, что увидел где-то еще, что было 8-25 МГц, но я не могу вспомнить, где. На этой плате есть еще один IC, который использует кристалл 24 МГц, и я думаю, что дизайнер платы попытался уменьшить свою деятельность, используя тот же кристалл для микросхемы.
[Rogerclark - Пн, сентябрь 04, 2017 5:41 утра] - Если USB не работает, наиболее вероятная причина заключается в том, что ваша основная частота такта - это не то, что вы думаете
Да, это тоже моя мысль. Тот факт, что USB работает нормально в эскизе, заставляет меня поверить, что что -то все еще настроено неправильно в загрузчике.
[victor_pv - Пн, сентябрь 04, 2017, 15:50] - Можете ли вы опубликовать изменения, которые вы внесли в загрузчик, чтобы проверить, нужны ли они?
Единственное изменение, которое я сделал до сих пор, - это добавить #ifdef для xtal24m в оборудовании.в
/* Configure PLL */ #ifdef XTAL24M SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x00010400); /* pll=72Mhz(x3),APB1=36Mhz,AHB=72Mhz */ #elif XTAL12M SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x00110400); /* pll=72Mhz(x6),APB1=36Mhz,AHB=72Mhz */ #else SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x001D0400); /* pll=72Mhz(x9),APB1=36Mhz,AHB=72Mhz */ #endif SET_REG(RCC_CR, GET_REG(RCC_CR) | 0x01000000); /* enable the pll */

victor_pv
Вторник 05 сентября 2017 г. 12:42
Это неправильно (это умножение на 2, так что 48 МГц): SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x00010400); /* pll=72Mhz(x3),APB1=36Mhz,AHB=72Mhz */

Rogerclark
Вторник 05 сентября 2017 г. 12:50
Виктор

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

я.Е его бит -шаблон был неправильным.

ViewTopic.PHP?F = 32&t = 508&P = 33990#P33990

C_D
Вторник 05 сентября 2017 г. 1:04
[victor_pv - Вторник 05 сентября 2017 12:42] - Это неправильно ...
Это должно работать (умножается на 3): SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x00050400); /* pll=72Mhz(x3),APB1=36Mhz,AHB=72Mhz */

Rogerclark
Вторник 05 сентября 2017 г. 1:13
Я написал код, чтобы сделать это.

uint32_t v = 0x001D0400;// original x9 bit pattern uint32_t mask = (0B1111 << 18);// PLL mask uint32_t pattern = (0x1 << 18);// x 3 PLL bit pattern v = (v & ~mask); v = v | pattern; Serial.println(v,HEX);

C_D
Вторник 05 сентября 2017 г. 1:19
И подтвердил работу 8-)

Спасибо большое, ребята. Извините за то, что занял ваше время с глупой ошибкой, но с другой стороны, я знаю больше о том, что делает Arduino для STM32 работать сейчас!

Rogerclark
Вторник 05 сентября 2017 г. 1:37
Похоже на какой -то промышленный контроллер

Я надеюсь, что вы не используете загрузчик и т. Д. в каком -либо критическом приложении, связанном с миссией или безопасностью, потому что, как указано в репо, этот код должен рассматриваться как экспериментальный. Он никогда не был предназначен для использования в коммерческих приложениях, и вы используете его на свой собственный риск

C_D
Вторник 05 сентября 2017 г. 1:42
Не бойтесь, это только прототип :ржу не могу: И нет, это никого не убьет, если он загорется.

Но окружающая среда Arduino идеально подходит для меня, чтобы быстро разбить новые функции для игры и тестирования. Я на самом деле приехал сюда, приехав из MBED и диапазона Nucleo, потому что несколько лет назад серийная реализация USB была глюкой. Arduino для серийного кода USB STM32 никогда не пропускал ни одного удара :)

Rogerclark
Вторник 05 сентября 2017 г. 1:59
Вы можете рассмотреть возможность использования собственного Arduino Core GitHub от STM.com/stm32duino как использует HAL, и будет проще перенести ваш окончательный код в то, что не основано на Arduino.

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

Вы также должны заменить свой кристалл на 8 МГц или 16 МГц, так как 24 МГц выходит далеко за пределы максимальной рабочей частоты и может оказаться ненадежным в массовом производстве.

Большинство досок, кажется, используют 8 МГц (возможно, как самый дешевый и самый стабильный вариант)

C_D
Вторник 05 сентября 2017 г. 2:12
Да, кристалл 24 МГц был наверняка ошибкой. У меня есть несколько досок, с которыми я буду продолжать работать, теперь у меня работает загрузчик. Следующая версия наверняка вернется к 8 МГц.

Я тоже посмотрю в Сент.

victor_pv
Вторник 05 сентября 2017 г. 2:13
Это похоже на какого -то контроллера света, но не может понять, какие булавки будут, кроме термисторов.

C_D
Вторник 05 сентября 2017 г. 2:16
[victor_pv - Вторник 05 сентября 2017 г. 2:13 утра] - Это похоже на какого -то контроллера света, но не может понять, какие булавки будут, кроме термисторов.
Правильно по обоим пунктам, в нем есть как свет, так и термисторы, хотя освещение на самом деле не «контролируется» как таковое. Это может быть просто на отдельной доске, но все на одном для тестирования.

victor_pv
Вторник 05 сентября 2017 г. 5:01
Хорошо, это имеет больше смысла, я пытался выяснить, что заставили светодиодных водителей с термисторами, и куча того, что похоже на разъемы USB...

Проверьте справочное руководство, чтобы увидеть, поддерживается ли 24 МГц XTAL, если вы используете настройку /2 для ввода PLL, возможно, 24 - только теоретический предел только PLL, поэтому делят его на 2, прежде чем он входит, затем умножение на 6 может быть в пределах спецификаций.

Rogerclark
Вторник 05 сентября 2017 г. 5:36 утра
Виктор

В листе данных говорится

"Кристаллический осциллятор от 4 до 16 МГц"

Я предполагаю, что это означает, что цепь генератора E.глин. Резонансные компоненты внутри MCU (в основном конденсаторы) настроены на работу в этом диапазоне.

Это, вероятно, означает, что если MCU станет слишком холодным или слишком горячим, он не сможет запустить OSC

C_D
Вторник 05 сентября 2017 г. 20:01
Ах, да, так что я на самом деле не разгоняю ядро, я, внутренности MCU работают, как и предполагалось, это просто цепь осциллятора, которая работает за пределами спецификации. Я буду помнить об этом при тестировании этих досок и убедиться, что в будущих пересмотрах есть кристалл 8 МГц.

Виктор

У платы есть 7 -порточный USB -концентратор с одним из этих портов, проведенных в STM32. При подключении к хосту он позволяет общаться с STM32 через CDC, а также еще 6 нижестоящих портов для подключения дополнительных плат и или других периферийных устройств (USB -модем, Dongle Bluetooth и т. Д.). Хост - это односомерная компьютер, работающий на Linux, который обеспечивает сетевое подключение и запускает сенсорный экран HMI.

Роджер верен, он предназначен для управления промышленным оборудованием, эта конкретная версия имеет 6 термисторов и 8 цифровых входов (цифровой интенсивностью, пульсированной или частотной измерения), 4 цифровых выхода (цифровые или ШИМ) и 4 реле. Он также имеет IC мониторинга мощности переменного тока для отслеживания напряжения линии и рисунка тока устройств, подключенных к этим реле. Я предполагаю, что это прославленная ПЛК с более целенаправленным набором функций, который не запрограммирован в лестнице :ржу не могу:

Эта конкретная комбинация входов и выходов, вероятно, не будет существовать на конечном продукте, если она действительно выйдет из этапа прототипа, будет новая печатная плата с необходимыми функциями для приложения.