Пользовательский STM32F103C8T6

Далласта
Пт 20 мая 2016 г., 19:06
Привет, ребята!

Недавно я разработал пользовательскую плату STM32 для применения RS485. Я использовал Atmega 168 раньше, и у меня были проблемы со скоростью, поэтому я решил, что пришло время двигаться.
Плата - это просто STM32F103C8T6 с магнитным энкодером AS5048A и трансивером SN65HVD78. Он считывает энкодер через SPI и отправляет информацию в сервопривод Dynamixel, используя протокол Dynamixel. У меня есть булавки SWD, чтобы программировать.
Поскольку у меня уже есть код для Arduino IDE, поэтому я подумал, что я должен изменить на своем коде, чтобы перенести его. Еще один вопрос, который у меня есть, это то, как я установил часы на микроконтроллере (на устройствах AVR вы используете предохранители памяти)? Я использую кристалл 16 МГц для достижения 72 МГц.
Если хотите, я могу отправить коды, LIBS и схема совета директоров.
Вот изображение досок (у меня есть две разные модели, чтобы поместиться в разных местах). Сейчас я пабаю их и жду, когда прибудутся несколько компонентов.
Изображение
Я бы очень много сделал, если бы кто -нибудь мог мне здесь помочь.
Спасибо!

Сжимать
Пт 20 мая 2016 г., 21:19
Обычно платы STM с использованием 8 МГц XTAL и программируемый PLL создают 72 МГц. Существует сложная система часов по сравнению с AVR, которая имеет разные периферийные устройства. Arduino Core делает все для настройки часов, но, как я уже сказал, лучше использовать кристалл 8 МГц.
Я предлагаю прочитать хотя бы первые главы книги Джеффри Брауна отсюда: http: // www.CS.Индиана.edu/~ geobrown/book.PDF
Очень важно знать что -то о MCU, все будет проще.
Что касается совместимости Arduino, я могу сказать, что большинство библиотек, не связанных с оборудованием напрямую, будет работать почти неприкасаемо. Все здесь, сериал, i2c, spi. Некоторый код с внешними прерывами и торговыми таймерами, можно понадобиться некоторую переделку.

Далласта
Сб 21 мая 2016 г. 12:28
Сламмер написал:Обычно платы STM с использованием 8 МГц XTAL и программируемый PLL создают 72 МГц. Существует сложная система часов по сравнению с AVR, которая имеет разные периферийные устройства. Arduino Core делает все для настройки часов, но, как я уже сказал, лучше использовать кристалл 8 МГц.
Я предлагаю прочитать хотя бы первые главы книги Джеффри Брауна отсюда: http: // www.CS.Индиана.edu/~ geobrown/book.PDF
Очень важно знать что -то о MCU, все будет проще.
Что касается совместимости Arduino, я могу сказать, что большинство библиотек, не связанных с оборудованием напрямую, будет работать почти неприкасаемо. Все здесь, сериал, i2c, spi. Некоторый код с внешними прерывами и торговыми таймерами, можно понадобиться некоторую переделку.

Martinayotte
Сб 21 мая 2016 г. 13:18
В случае F4XXX это довольно ясно, код находится в ядрах/Maples/Libmaple/RCCF2.C: /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ #ifdef ARDUINO_STM32F4_NETDUINO2PLUS int PLL_M = 25; // The NETDUINO has a 25MHz external oscillator #else int PLL_M = 8; #endif int PLL_N = 336; /* SYSCLK = PLL_VCO / PLL_P */ int PLL_P = 2; /* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ int PLL_Q = 7;

Rogerclark
Сб 21 мая 2016 г. 13:52
Как говорит Мартин..

Это определено для каждого варианта на F1.

Afik, никто другой не использует 16 МГц. Большинство советов используют 8 МГц, хотя по меньшей мере 1 плата STM32 использует 12 МГц, а доски GD32, которые я использую 12 МГц.

Просто чтобы заставить доску работать с вашим существующим кристаллом, просто взломайте общий файл варианта платы F130C
https: // github.com/rogerclarkmelbourne/ ... _настраивать.CPP

Однако я не знаю, как вы настраиваете мультипликатор из 16, чтобы дать вам 72 МГц. Вам понадобится мульт -из 4.5

Это может быть возможно, но я не уверен

Значения определены в

https: // github.com/rogerclarkmelbourne/ ... Рис/RCC.час

Но вам нужно будет посмотреть в основной ссылке на F103 (Google RM0008) или нажмите здесь http: // www2.ул.com/resource/en/referenc ... 171190.PDF

И посмотрите, поддержано ли это, и если да, то, как вы его установили.

Но в долгосрочной перспективе получите около 8 МГц кристаллов ;-)

Вассилис
Сб 21 мая 2016 г. 14:23
@Dallasta
Открыть MXBLUEPILLF103C8.МОК файл с STM32Cubemx и посмотрите, как установлена ​​конфигурация часов 8 МГц на MCU STM32F103C8 (вкладка на конфигурацию часов).

Пито
Солнце 22 мая 2016 г. 6:15 утра
Перед ПЛЛ на ПЛ. Для того, чтобы включить Прескалер на: PLLXTPRE: HSE Divider для записи PLL
Установить и очистить программное обеспечение для разделения HSE перед вводом PLL. Этот бит можно написать только
Когда PLL отключен.
0: часы HSE не разделены
1: часы HSE, разделенные на 2

Сигнал32
Солнце 22 мая 2016 г. 12:43
Пито написал:Перед ПЛЛ на ПЛ. Для того, чтобы включить Прескалер на: PLLXTPRE: HSE Divider для записи PLL
Установить и очистить программное обеспечение для разделения HSE перед вводом PLL. Этот бит можно написать только
Когда PLL отключен.
0: часы HSE не разделены
1: часы HSE, разделенные на 2

Rogerclark
Солнце 22 мая 2016 г. 13:23
Можете ли вы опубликовать фрагмент кода, когда вы получаете его работу, используя ядро, основанное на Libmaple, о том, что вы сделали, чтобы он работал

Далласта
Солнце 22 мая 2016 г. 18:38
Спасибо за помощь, ребята!
Теперь я действительно думаю об использовании кристаллов 8 МГц...
Какова конфигурация по умолчанию для часов? Я действительно не хочу взламывать вещи и надеюсь, что они будут работать. У меня не так много времени, чтобы закончить этот проект (приготовьтесь, robocup идет!). Если я использую кристалл 8 МГц, прокалиры уже настроены на 72 МГц?

Rogerclark
Пн 23 мая 2016 г., 4:36
Да

Используйте 8 МГц, и вам не нужно будет изменять код.

Я подозреваю, что использовать 16 МГц, изменение, которое вам нужно сделать, составляет всего 1 бит в одном регистре, но мне нужно было прочитать большое руководство на STM32F103, чтобы выяснить, какой бит позволил Div 2 на входных часах

Стевех
Пн 23 мая 2016 г., 22:57
Signal32 написал: Это здорово! Теперь я могу использовать 3225 кристаллов 16 МГц, которые в ~ 5 раз дешевле, чем 8 МГц. Спасибо!

Сигнал32
Пн 23 мая 2016 г., 11:55 вечера
Стевех написал:Signal32 написал: Это здорово! Теперь я могу использовать 3225 кристаллов 16 МГц, которые в ~ 5 раз дешевле, чем 8 МГц. Спасибо!

Rogerclark
Вторник 24 мая 2016 г. 2:33
Если вы хотите попытаться использовать свои кристаллы 16 МГц

Я думаю, вам нужно изменить

Stm32f1 \ cores \ maple \ libmaple \ rcc_f1.в

Конкретно
void rcc_configure_pll(rcc_pll_cfg *pll_cfg) { stm32f1_rcc_pll_data *data = pll_cfg->data; rcc_pll_multiplier pll_mul = data->pll_mul; uint32 cfgr; /* Check that the PLL is disabled. */ ASSERT_FAULT(!rcc_is_clk_on(RCC_CLK_PLL)); cfgr = RCC_BASE->CFGR; cfgr &= ~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL); cfgr |= pll_cfg->pllsrc | pll_mul; RCC_BASE->CFGR = cfgr; }

Grumpyoldpizza
Ср. 01 июня 2016 12:06
Signal32 написал:Стевех написал:Signal32 написал: Это здорово! Теперь я могу использовать 3225 кристаллов 16 МГц, которые в ~ 5 раз дешевле, чем 8 МГц. Спасибо!

Стевех
Ср. 01 июня 2016 г., 17:30
Не будет нажимать на стабильность и шум на 16 МГц меньше 8 МГц?

И на STM32F4 (и другие?) внутренние часы, которые работают при Power Up (HSI) и запускают весь код запуска C, составляет 16 МГц. Переключение на часы HSE, остается на уровне 16 МГц до (или если (или если) не будет использоваться. Обратите внимание, что у кода запуска C на скорости HSI возникает проблема, что если у вас есть много BSS, чтобы быть нулевым и/или огромное количество инициализированных переменных (кроме Const), все работают со скоростью HSI и могут замедлить процесс запуска - если это фактор. Это в одном из моих проектов, где процессор должен добраться до первой строки кода в главном.в < 10 мс.

У меня есть приложение на 415, которое работает на скорости 16 МГц для питания (оборудование диктовалось), затем на PLL при 64 МГц для большинства обработок. Когда пришло время, я переключаюсь на 168 МГц на несколько сотен MSEC. Затем назад. Для переключения я перепрограммирую некоторые периферийные устройства (дебюта UART, SPI), чтобы они оставались на той же скорости линии, независимо от переключения скорости на 168, а затем обратно на 64 МГц.



Точка, выбор кристалла 8 МГц имеет другие факторы, которые могут применяться к некоторым случаям.

Далласта
Ср. 01 июня 2016 г., 8:58 вечера
Спасибо, ребята, за помощь, кристалл 8 МГц, кажется, работает нормально.
Но у меня все еще есть некоторые сомнения по поводу программирования. Сегодня я попытался сделать серийную работу (загрузку по ссылке ST и без загрузки), и я не смог этого сделать. Мое оборудование использует USART2, и, возможно, это была проблема. Может кто -нибудь мне помочь?
Я все еще очень новичок с контроллерами ARM, я только что имел дело с устройствами AVR.
Также была проблема с ШИМ, я не знаю, почему, но, похоже, он просто превращает булавку в нормальную булавку ввода.
Спасибо!

Rogerclark
Ср. 01 июня 2016 г., 21:23
Я думаю, что stlink upload включен USB -серийный сериал,

так серийно = USB -сериал
Serial1 - аппаратный сериал 1
Serial2 - аппаратный сериал 2
и т. д

Если вы не хотите USB -сериал, вам нужно будет сменить доски.TXT для удаления встроенных определений для USB -серийных материалов

или попробуйте загрузку через последовательный, так как в режиме загрузки не включен USB -серийный

Далласта
Ср. 01 июня 2016 г. 22:15
Rogerclark написал:Я думаю, что stlink upload включен USB -серийный сериал,

так серийно = USB -сериал
Serial1 - аппаратный сериал 1
Serial2 - аппаратный сериал 2
и т. д

Если вы не хотите USB -сериал, вам нужно будет сменить доски.TXT для удаления встроенных определений для USB -серийных материалов

или попробуйте загрузку через последовательный, так как в режиме загрузки не включен USB -серийный

Стевех
Чт, 02 июня 2016 г., 2:01
выиграть 7 здесь. ST-Link отображается в списке USB-диспетчера устройств как «Универсальные серийные устройства шины \ stmicroelectronics stlink dongle."
Не в серийных портах "портов"

Rogerclark
Чт, 02 июня 2016 г. 2:06 утра
Стевех написал:выиграть 7 здесь. ST-Link отображается в списке USB-диспетчера устройств как «Универсальные серийные устройства шины \ stmicroelectronics stlink dongle."
Не в серийных портах "портов"

Стевех
Чт, 02 июня 2016 г., 4:02
Ах, я вижу. Я просто использую ST-Link каждый день, но для загрузки и SWD. Итак, я не знаю, чего не знаю! : |

Сжимать
Чт, 02 июня 2016 г., 7:03
Stlink of Boards - это v2.1, в то время как ключи v2. USB CDC Serial поддерживается только в V2.1.

Rogerclark
Чт, 02 июня 2016 г., 7:15 утра
Сламмер написал:Stlink of Boards - это v2.1, в то время как ключи v2. USB CDC Serial поддерживается только в V2.1.

Grumpyoldpizza
Пн, 06 июня 2016 12:15
Rogerclark написал:Сламмер написал:Stlink of Boards - это v2.1, в то время как ключи v2. USB CDC Serial поддерживается только в V2.1.

Сжимать
Пн, 06 июня 2016 12:21
Я могу использовать часть ST-Link My Nucleo-401RE для программирования BluePill (103RE) с устройством хранения (скопируйте бинарное устройство для хранения) обычно.
Хорошо, название тома, созданное ST-Link, всегда с 401RE, но это работает. Вы имеете в виду, что stlink v2 в каждом нуклео.1 работает только (в качестве устройства хранения) для конкретных вариантов семейства STM32?

Grumpyoldpizza
Пн, 06 июня 2016 12:32
Сламмер написал:Я могу использовать часть ST-Link My Nucleo-401RE для программирования BluePill (103RE) с устройством хранения (скопируйте бинарное устройство для хранения) обычно.
Хорошо, название тома, созданное ST-Link, всегда с 401RE, но это работает. Вы имеете в виду, что stlink v2 в каждом нуклео.1 работает только (в качестве устройства хранения) для конкретных вариантов семейства STM32?

Сжимать
Пн, 06 июня 2016 г., 14:12
Grumpyoldpizza написал: С другой стороны, это может быть просто маркетинг, так как ST-Link на досках Nucleo в основном-это нечто другое, что автономное устройство ST-Link.

Grumpyoldpizza
Пн, 06 июня 2016 г., 15:15
Сламмер написал:Grumpyoldpizza написал: С другой стороны, это может быть просто маркетинг, так как ST-Link на досках Nucleo в основном-это нечто другое, что автономное устройство ST-Link.

Вассилис
Пн, 06 июня 2016 г., 16:53
У меня есть ощущение, что перемычки SB12-SB15 должны быть отменены, если вы не хотите ломать доску на две части, для изоляции ST-Link V2.1 из основного ядра MCU.
Nucleo-Board-Bottom-side.jpg
нуклеорановая сторона.JPG (253.3 киб) просмотрено 1379 раз

Сжимать
Пн, 06 июня 2016 г., 8:45 вечера
Нет удаления резисторов, нет разрыва доски.
Просто удалите два перемычки на CN2 (см. Фото). Единственная проблема, с которой я столкнулся с ядревой связкой, состоит в том, что для сброса целевой системы требуется сброс сброса (или вы должны сбросить вручную на кнопку или иначе) . Обратите внимание, что VCC не может включить целевую плату из ST-Link (в отличие от дешевых ключей St. Обратите внимание на TX & RX в CN3, эти сигналы идут в USB-CDC.

randybb
Пн июня 06, 2016, 8:48 вечера
Но эти прыгуны только для интерфейса SWD. Если вы также хотите использовать последовательный интерфейс, вам нужно удалить упомянутые резисторы 0 Ом.

Сжимать
Пн, 06 июня 2016 г., 8:57 вечера
Да! правильный! Сериал доступен либо путем удаления SB14/SB15, либо путем разрыва ST Link с платы.
Цена доски настолько низкая, и я думаю, что кто-то может купить ее, только для части ST-Link (и оставьте остальное в качестве бонуса).

Рик Кимбалл
Пн, 06 июня 2016 г., 21:14
randybb написал:Но эти прыгуны только для интерфейса SWD. Если вы также хотите использовать последовательный интерфейс, вам нужно удалить упомянутые резисторы 0 Ом.

Вассилис
Втюд 07 июня 2016 г., 6:27 утра
Рик Кимбалл написал:randybb написал:Но эти прыгуны только для интерфейса SWD. Если вы также хотите использовать последовательный интерфейс, вам нужно удалить упомянутые резисторы 0 Ом.

Сжимать
Вт, 07 июня 2016 г., 13:41
Рик Кимбалл написал:Я просто подтягиваю перемычку питания к целевому чипу, и он не будет читать и не писать на серийных булавках. Ох, и я использую там питание, чтобы включить целевой чип за целевой доски

Рик Кимбалл
Вторник 07 июня 2016 г., 15:49
Я не видел никаких проблем с этим. Однако это не означает, что ваши результаты будут такими же

Testato
Пн 26 сентября 2016 12:47
Сламмер написал:Нет удаления резисторов, нет разрыва доски.
Просто удалите два перемычки на CN2 (см. Фото). Единственная проблема, с которой я столкнулся с ядревой связкой, состоит в том, что для сброса целевой системы требуется сброс сброса (или вы должны сбросить вручную на кнопку или иначе) . Обратите внимание, что VCC не может включить целевую плату из ST-Link (в отличие от дешевых ключей St. Обратите внимание на TX & RX в CN3, эти сигналы идут в USB-CDC.

Rogerclark
Пн 26 сентября 2016 г., 21:13
Прошивка STLINK читается защищена, но я видел его копии на некоторых российских сайтах, так как кто -то выяснил, кто взломать программу Windows, которая выполняет обновление прошивки, и извлекла незашифрованный двоичный файл из памяти Windows.

Re: USB -массовое хранилище

STM32F103 не имеет никаких встроенных профилей USB (в отличие от F4).
Вы можете написать код так, чтобы его форма USB -устройства вы хотите, но вы запустили код в MCU, чтобы сделать это.

Если вам хочется написать загрузчик массового хранилища, пожалуйста, продолжайте, но помните, что вы не сможете использовать HAL, CMSIS и т. Д., Поскольку код должен быть сверхмолким (меньше 0x2000, чтобы сравниваться с существующим загрузчиком DFU)

Сжимать
Пн 26 сентября 2016 г., 21:43
Взломная прошивка предназначена для Stlink/V2, а не для V2.1
V2.1 добавляет несколько очень важных функций, таких как загрузка массового хранения и USB/серийный пропуск, поскольку я понимаю, что никто не клонировал V2.1 (это включено на все доски Nucleo), поскольку все китайские клоны поддерживают операции V2.
Если мы сравним размер кода Blackmagic (который также является устройством отладчика/последовательного пастру), я не думаю, что это можно было бы включить эту функциональность в кодовую память типичной F103C8 в качестве загрузчика (и иметь запасную память для реальной приложение)

randybb
Пн 26 сентября 2016 г., 21:47
На нуклео STM32F103CБеременный.

Rogerclark
Пн 26 сентября 2016 г. 22:54
Я подозреваю, что Stlink v2.Я бы соответствовал C8, тем более что большинство C8 действительно CB ;-)

Но я думаю, что дело в том, что STLINK (даже V2) не предназначен как загрузчик, его отладчик, и он будет серьезно ограничивать количество доступного пространства кода, оставшееся для приложений.

BMP в значительной степени такой же, как и Stlink, за исключением массового хранения, и BMP также довольно большой (я.e Это не было бы полезно в качестве загрузчика)

Я думаю, что загрузчик массового хранилища был бы здорово, но, используя HAL и т. Д. или любая другая либерация.глин. LiboPencm3 будет нецелесообразным из -за размера, я сомневаюсь, что его практично

Октавио
Ср 30 августа 2017 г., 19:19
Требуются внешние кристаллы 8 МГц и 32 кГц, или это может работать (Arduino Bootloader и Libs) только с внутренним RC?
USB не используется.

Пито
Ср 30 августа 2017 г. 8:54
USB не используетсяЭто может работать, когда частота генератора RC известна как минимум с точностью 1-2% - из -за серийного UART и, конечно, Millis () и друзей.
STM32Duino Bootloader основан на USB, но вы можете использовать ST-Link/J-Link или последовательная загрузка.