[Решен] загрузчик для мини-PLC с кристаллом STM32F103VE с 16 МГц

Черная бригада
Пн, 18 декабря 2017 г. 9:10 утра
Мой фактический «проект»-это изменение / включение Mini-PLC (DIN Rail / «Smart-Relay»),
так что это можно использовать всеми с Arduino-ide/STM32Duino через USB.
(как уже упоминалось уже в моем "Скажи привет" - Тема)

Этот Mini-PLC (коммерческий продукт / уже на рынке) использует STM32F103Vet6 (512 КБ Flash / 64 КБ ОЗУ / 100PIN).

Производитель очень заинтересован и кооператив, и он отправит мне образец устройства для оценки, можно ли использовать это устройство с Arduino/STM32Duino, но до сих пор они не прислали мне полную схему :рулон:

Я узнал, что до сих пор:
- На материнке есть своего рода разъем SWD
- нет сброса или какого-либо перемычки
- есть 1.5K подтягивание от USB D+ до 3.3В
- На порту PA15 используется «ID_USB», используемый (подключен к 5V USB-Plug через резистор)
- Boot0- и Boot1-Pin сжаты до GND
- Есть 2 светодиода, подключенные от 3.3V через резистор в порты PC8 и PC9

Итак, как настоящий нуб,
Я считаю, что в качестве первого шага я должен составить STM32DUINO-BOTEROADER
с параметрами, которые соответствуют моей «доске», верно ?

Итак, могу ли я опустить полную «кнопку» и «USB -диск» -сфуфф ? (Поскольку у меня нет "кленового оборудования" ?)
И просто напишите: #define HAS_MAPLE_HARDWARE 0 #define LED_BANK GPIOC #define LED_PIN 9 #define LED_ON_STATE 0 #define USER_CODE_RAM ((u32)0x20000C00) #define RAM_END ((u32)0x20005000)

Стивестронг
Пн, 18 декабря 2017 г. 9:23 утра
Если у вас есть разъем SWD, вам не обязательно нужен загрузчик.
Вы можете использовать Зонд Stlink загрузить новый SW, а также отладку.

Черная бригада
Пн, 18 декабря 2017 г. 9:36 утра
Просто для объяснения:
Я не «конечный пользователь» этого PLC.
SWD-соединитель находится внутри устройства (внутри корпуса), я могу его использовать,
Но «конечные пользователи» должны использовать интерфейс USB, который расположен «снаружи», доступный на передней панели (и не требуется дополнительного оборудования).

Я только что отредактировал свой первый пост, чтобы сделать это немного яснее:Мой фактический «проект»-это изменение / включение Mini-PLC (DIN Rail / «Smart-Relay»),
так что это можно использовать всеми с Arduino-ide/STM32Duino.

Стивестронг
Пн, 18 декабря 2017 г. 9:43 утра
ХОРОШО.
Затем я перенеслю этот поток в раздел загрузчика.
(и изменил заголовок, чтобы отразить предполагаемый объем.)

Стивестронг
Пн, 18 декабря 2017 г. 9:46 утра
Может быть, этот пост интересен для вас: http: // stm32duino.com/viewtopic.PHP?F = 32&t = 508

Черная бригада
Пн, 18 декабря 2017 г. 9:50 утра
Затем я перенеслю этот поток в раздел загрузчика.
(и изменил заголовок, чтобы отразить предполагаемый объем.)
хм... ХОРОШО,
Но это только первый вопрос о многих следующих вопросах, касающихся этого проекта, я думаю ... : |

Однако тогда я просто создам новые темы .. ;)

Черная бригада
Пн, 18 декабря 2017 г. 15:19
Помимо других моих вопросов выше:
в чтении репо написан "...Используйте GCC 4.8 (не 4.9 или новее,.. "
Это все еще действителен ?

Черная бригада
Сб 23 декабря 2017 г. 12:41
Пожалуйста, может кто -нибудь ответить на это ?
Действительно ли необходимо понизить мою руку-неэна-eabi-gcc до 4.8 ?
Это действительно очень очень старая версия (https: // Разработчик.рука.com/с открытым исходным кодом/g ... /Загрузки)
Я стараюсь построить загрузчик на Linux, как я могу «понизить» до ARM-None-Eabi-GCC до 4.8, при необходимости ?

Черная бригада
Сб 23 декабря 2017 г. 14:11
А пока я нашел это объявление
http: // stm32duino.com/viewtopic.PHP?f = 16&t = 1538
(Итак, утверждение "...Используйте GCC 4.8 (не 4.9 или новее,.. " больше не действителен)

Поэтому я полагаю, что было бы лучше изменить Readme репо, чтобы не запутать новичков, таких как я ... :)


беременный.Т.W.
Еще одно утверждение в ReadMe относительно кнопокПримечание. У большинства «универсальных» плат STM32F103 есть только кнопка сброса, а не кнопка пользователя / тестирования. Таким образом, код загрузчика всегда настраивает входной штифт кнопки в качестве пульсации, следовательно, если кнопка отсутствует на выводе кнопки (по умолчанию PC14), PIN -код должен оставаться в низком состоянии, и загрузчик будет предполагать, что кнопка не является нажатый.

ВАЖНЫЙ. Если у вас есть плата, на которой у вас есть внешнее оборудование, прикрепленное к выводу PC12, которая будет поднимать этот вывод, вам необходимо будет сделать новую цель сборки для вашей платы, которая использует другой вывод для кнопки, или полностью изменить код, чтобы, чтобы Кнопка игнорируется.
оставляет меня полностью в растерянности (текст сбивает с толку). : mrgreen:
Я этого не понимаю:
- Какие кнопки вы говорите о кнопке сброса или пользователя ?
- В коде я не вижу никакой ссылки на PC12 - поэтому неясно, что на самом деле здесь означает ?
- Поэтому, если я опускаю полную Button_bank gpiob -stuff ни PC14, ни PC12 не «касаются» (E.глин. конфигурировано как протяжение) с помощью кода Bootloader ?
(--> Смотрите мой аналогичный вопрос в первом посте в этой теме)

victor_pv
Sun 24 декабря 2017 г. 7:46
Я отвечу несколько вещей одновременно:
-Вы можете установить загрузчик и использовать USB для загрузки. Все, что нужно в 1K5 подтягивании резистора, и вы подтвердили, что он там. Мы используем трюк, чтобы вытащить линию USB, а затем пусть снова вверх, чтобы вызвать повторную деятельность.

-В репо Roger есть предварительные загрузчики Roger's. Вы можете скачать один из них:
https: // github.com/rogerclarkmelbourne/ ... Y_BINARES
PIN -код в имени означает, где подключен светодиод состояния (I.эн. generic_boot20_pb12.Bin скомпилируется для использования PB12 для светодиода статуса). Убедитесь, что вы выбираете тот, который либо соответствует выводу, или, по крайней мере, не сочетает вашу линию, которая является входом в вашу схему, которая может вызвать короткий Чтобы моргнуть светодиод статуса.
Bootloader совместим с любым MCU F103, он обнаруживает, сколько вспышки доступно и размер страницы.
О кнопке, есть кнопка пользователя, а не кнопка сброса. Оригинальные кленовые доски имели кнопку, если нажали на нажатию во время перезагрузки платы, загрузчик будет работать, а не перейти на эскиз пользователя, пока не будет загружен эскиз, либо плата снова не будет сброшена с помощью пользовательской кнопки, не нажатой. Этот режим назывался режим вечного загрузчика.
Если этот штифт в вашей схеме подтянут до уровня, на котором загрузчик будет думать, что кнопка нажимается, то каждый раз, когда плата перезагружается, загрузчик будет оставаться в режиме вечного загрузчика и не прыгает на эскиз пользователя.
Если это так, то определите порт кнопки и прикрепление к чему -то, что либо прикреплено кнопкой, либо не вытянута на активный уровень для ввода кнопки. Я не помню, как в макушке головы, но я думаю, что может быть возможно изменить, какой уровень активен в одном из #Defines в коде, тогда вы перекомпилируете его.

Обновлено: удалили некоторую информацию, так как вы уже нашли ее.

Черная бригада
Вт 26 декабря 2017 г. 16:47
Спасибо за много инфо,
Но снова мой вопрос Итак, могу ли я опустить полную «кнопку» и «USB -диск» -сфуфф ? (из #defines)
Еще один момент:
Должен ли я определить кристаллическую частоту, если она отличается от 8 МГц по умолчанию ?
Я вижу, что это сделано здесь для кристалла 12 МГц --> https: // github.com/rogerclarkmelbourne/ ... являются.C#L118
моя кристаллическая частота 16 МГц
Должен ли я добавить еще одну (разные) последовательность настройки PLL, а затем в «Аппаратное обеспечение.c " ?

Черная бригада
Ср 27 декабря 2017 г. 16:42
[Черная бригада - Вторник 26 декабря 2017 г. 16:47] - моя кристаллическая частота 16 МГц
Должен ли я добавить еще одну (разные) последовательность настройки PLL, а затем в «Аппаратное обеспечение.c " ?
Было бы нормально написать так (для 16 МГц HSE) ? /* Configure PLL */ #if defined XTAL16M // 16 MHz crystal (using the Bit 17 PLLXTPRE=1 => HSE clock divided by 2 before PLL entry) SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x001F0400); /* pll=72Mhz(x9/2),APB1=36Mhz,AHB=72Mhz */ #elif defined XTAL12M // 12 MHz crystal SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x00110400); /* pll=72Mhz(x6),APB1=36Mhz,AHB=72Mhz */ #else // 8 MHz crystal default SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x001D0400); /* pll=72Mhz(x9),APB1=36Mhz,AHB=72Mhz */ #endif

ZMEMW16
Чт 28 декабря 2017 г. 12:22
Если бы я сделал это, я бы запустил Cubemx, настройку для чипа и установил кристалл, генерировал как можно меньше кода.
Изучение кода настройки должно дать вам необходимую информацию,
Конечно, вполне может потребоваться какой -то перевод :ржу не могу:
SRP

Черная бригада
Ср. 03 января 2018 г. 10:44
[Черная бригада - Ср 27 декабря 2017 г. 16:42] -
[Черная бригада - Вторник 26 декабря 2017 г. 16:47] - моя кристаллическая частота 16 МГц
Должен ли я добавить еще одну (разные) последовательность настройки PLL, а затем в «Аппаратное обеспечение.c " ?
Было бы нормально написать так (для 16 МГц HSE) ? /* Configure PLL */ #if defined XTAL16M // 16 MHz crystal (using the Bit 17 PLLXTPRE=1 => HSE clock divided by 2 before PLL entry) SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x001F0400); /* pll=72Mhz(x9/2),APB1=36Mhz,AHB=72Mhz */ #elif defined XTAL12M // 12 MHz crystal SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x00110400); /* pll=72Mhz(x6),APB1=36Mhz,AHB=72Mhz */ #else // 8 MHz crystal default SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x001D0400); /* pll=72Mhz(x9),APB1=36Mhz,AHB=72Mhz */ #endif