C_D
Пн 28 августа 2017 г., 21:33
Я пытаюсь использовать загрузчик STM32Duino на пользовательской плате, но я не могу заставить загрузчик запустить. Micro - это F103R8T7, он имеет светодиод на PC13 и подтягивающий резистор на PA12 для USB -сброса.
Я заметил, что у моей платы есть кристалл 24 МГц, и я предполагаю, что загрузчик не будет настроен для этого. Единственная ссылка, которую я могу найти в источнике, - это аппаратное обеспечение.c, это единственное, что мне нужно изменить в коде для кристалла 24 МГц?
Я заметил, что у моей платы есть кристалл 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.
Проверьте справочное руководство для всех деталей, которые он четко объясняет, что возможно, а не, и как его достичь (регистры, частоты и т. Д.)
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 МГц
USB -часы выведены из основных часов, поэтому не нужно менять, если вы исправите основные часы PLL и установите его на 24 x 3 = 72
Пса.
Если вы посмотрите на настройки для платы GD32, он имеет кристалл 12 МГц, так что вы должны увидеть, как сделать аналогичное изменение для кристалла 24 МГц
C_D
Пн 28 августа 2017 г., 23:30
Просто пробираясь через STM32Cubemx, он не любит вход более 16 МГц, но таблица DataShing действительно говорит о TP 25 МГц, так что я думаю, это нормально?
Это выглядит правильно?
Это выглядит правильно?
- Конфигурация часов.JPG (113.49 киб) просмотрено 859 раз
victor_pv
Вторник 29 августа 2017 г. 1:28
Это, вероятно, должно быть.
Если 101 действительно идентичен 103, все остальное в порядке для XTAL 24 МГц.
Я не знаю, есть ли какая -либо другая разница между 101 и 103, но аппаратное обеспечение USB, похоже, там, по крайней мере, достаточно часто.
Вполне возможно, что существуют различные пересмотра 101, некоторые с USB, а некоторые без, то же, как и у некоторых 103C8T6, имеют 64 КБ вспышки, а некоторые - 128 КБ.
Также возможно, что 101 может не работать надежно на этих скоростях.
Если это так, то вы можете попробовать 48 МГц, как упомянуто.
Если 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
Да, эти строки, которые вам понадобятся
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 МГц, взлома
Я выработал, как перекомпилировать загрузчик и загрузить его, используя мой 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
Вы могли бы запустить основные часы при 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
я.Е его бит -шаблон был неправильным.
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
И подтвердил работу
Спасибо большое, ребята. Извините за то, что занял ваше время с глупой ошибкой, но с другой стороны, я знаю больше о том, что делает Arduino для STM32 работать сейчас!
Спасибо большое, ребята. Извините за то, что занял ваше время с глупой ошибкой, но с другой стороны, я знаю больше о том, что делает Arduino для STM32 работать сейчас!
Rogerclark
Вторник 05 сентября 2017 г. 1:37
Похоже на какой -то промышленный контроллер
Я надеюсь, что вы не используете загрузчик и т. Д. в каком -либо критическом приложении, связанном с миссией или безопасностью, потому что, как указано в репо, этот код должен рассматриваться как экспериментальный. Он никогда не был предназначен для использования в коммерческих приложениях, и вы используете его на свой собственный риск
Я надеюсь, что вы не используете загрузчик и т. Д. в каком -либо критическом приложении, связанном с миссией или безопасностью, потому что, как указано в репо, этот код должен рассматриваться как экспериментальный. Он никогда не был предназначен для использования в коммерческих приложениях, и вы используете его на свой собственный риск
C_D
Вторник 05 сентября 2017 г. 1:42
Не бойтесь, это только прототип И нет, это никого не убьет, если он загорется.
Но окружающая среда Arduino идеально подходит для меня, чтобы быстро разбить новые функции для игры и тестирования. Я на самом деле приехал сюда, приехав из MBED и диапазона Nucleo, потому что несколько лет назад серийная реализация USB была глюкой. Arduino для серийного кода USB STM32 никогда не пропускал ни одного удара
Но окружающая среда 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 МГц (возможно, как самый дешевый и самый стабильный вариант)
Однако я не думаю, что в данный момент они поддерживают загрузчика, а также изменяют 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 может быть в пределах спецификаций.
Проверьте справочное руководство, чтобы увидеть, поддерживается ли 24 МГц XTAL, если вы используете настройку /2 для ввода PLL, возможно, 24 - только теоретический предел только PLL, поэтому делят его на 2, прежде чем он входит, затем умножение на 6 может быть в пределах спецификаций.
Rogerclark
Вторник 05 сентября 2017 г. 5:36 утра
Виктор
В листе данных говорится
"Кристаллический осциллятор от 4 до 16 МГц"
Я предполагаю, что это означает, что цепь генератора E.глин. Резонансные компоненты внутри MCU (в основном конденсаторы) настроены на работу в этом диапазоне.
Это, вероятно, означает, что если MCU станет слишком холодным или слишком горячим, он не сможет запустить OSC
В листе данных говорится
"Кристаллический осциллятор от 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 мониторинга мощности переменного тока для отслеживания напряжения линии и рисунка тока устройств, подключенных к этим реле. Я предполагаю, что это прославленная ПЛК с более целенаправленным набором функций, который не запрограммирован в лестнице
Эта конкретная комбинация входов и выходов, вероятно, не будет существовать на конечном продукте, если она действительно выйдет из этапа прототипа, будет новая печатная плата с необходимыми функциями для приложения.
Виктор
У платы есть 7 -порточный USB -концентратор с одним из этих портов, проведенных в STM32. При подключении к хосту он позволяет общаться с STM32 через CDC, а также еще 6 нижестоящих портов для подключения дополнительных плат и или других периферийных устройств (USB -модем, Dongle Bluetooth и т. Д.). Хост - это односомерная компьютер, работающий на Linux, который обеспечивает сетевое подключение и запускает сенсорный экран HMI.
Роджер верен, он предназначен для управления промышленным оборудованием, эта конкретная версия имеет 6 термисторов и 8 цифровых входов (цифровой интенсивностью, пульсированной или частотной измерения), 4 цифровых выхода (цифровые или ШИМ) и 4 реле. Он также имеет IC мониторинга мощности переменного тока для отслеживания напряжения линии и рисунка тока устройств, подключенных к этим реле. Я предполагаю, что это прославленная ПЛК с более целенаправленным набором функций, который не запрограммирован в лестнице
Эта конкретная комбинация входов и выходов, вероятно, не будет существовать на конечном продукте, если она действительно выйдет из этапа прототипа, будет новая печатная плата с необходимыми функциями для приложения.