Тут вариант либо ждать либо паять. Да и хитрые китайса ставит в стлинки их китайский клон стм, который отказывается перешиваться в jlink. А так 3 резистора и хоть stlink, хоть j-link и сейчас.
Для любителей USB загрузчиков с завода, в 103 камне его нет.
nik182 пишет:
И это не AVR. По spi не программируется.
Я бы не был так категоричен, в 103 камне нет, а в 4хх серии есть.
Можно не голословное утверждение, а ссылку на конкретный мануал ST? Или буду считать что Вы всё врёте, потому что на запрос гуглю заливка программы stm32f4 через spi ответов нет.
А теперь расскажи - как мне или другому не знающему про spi заливку лежащую передо мной блак пилл на f401 по spi залить готовый нех? Исходя из условия, что у меня несколько ардуин, блюпилов и usb-ttl-ов на столе, а этого SPI программатора нет. Ну хоть одну ссылку на то как это сделать человеку не умеющему программировать загрузчики.
P & E предоставляет алгоритмы для программирования последовательной флэш-памяти SPI, EEPROM, FRAM, nvRAM, MRAM, RAM и
другой памяти с помощью программного обеспечения для программирования GUI P & E PROGACMP [3.] или программирования из командной строки программное обеспечение CPROGACMP [20.] через любой из аппаратных интерфейсов P & E для микроконтроллеров ARM®. Смотрите P & E веб-сайт www.pemicro.com для различных интерфейсных кабелей и отдельного аппаратного обеспечения для программирования, которое поддерживает ARM контроллеры. P & E уже обеспечивает поддержку внутренней флэш-памяти многих микроконтроллеров ARM от разных производителей.
В одной простой процедуре, внутренняя флэш (для поддерживаемых производителей), а также
любые внешние запоминающие устройства, подключенные через интерфейс SPI, могут быть запрограммированы.
Последовательные алгоритмы SPI компании P & E предназначены для использования любых четырех выводов портов ввода / вывода для связи с устройствами памяти с последовательным интерфейсом SPI.
Это позволяет пользователю легко настраивать эти алгоритмы для своего конкретного оборудования. Пользователь
просто указывает адреса портов и номера контактов для каждого из четырех сигналов интерфейса SPI. Пользователь
конфигурирует свое устройство, используя 8, 16 и 32-битные команды записи в память, которые вставляются в программирование
Заголовок алгоритма. Эти команды используются для выключения сторожевого таймера, установки часов, включения и
инициализировать выводы ввода / вывода. Информация, необходимая для этого, легко доступна из кода, используемого для настройки
устройство во время нормальной работы. Примеры этой процедуры включены в данное руководство.
Алгоритмы программирования SPI серийного ARM компании P & E были протестированы на ARM Cortex-M0, M0 +, M3 и M4
контроллеры от разных производителей. Они также должны работать на других процессорах ARM, которые имеют те же
минимальный набор команд и интерфейс отладки. В дополнение к этому основному требованию микроконтроллер Cortex-M, подключенный к внешней памяти, должен иметь как минимум 2 КБ ОЗУ для загрузки и последующего выполнения.
процедуры программирования.
Все алгоритмы, предоставляемые P & E для программирования устройств памяти SPI, автоматически проверяют, что данные
правильно запрограммирован во время процесса программирования, поэтому нет необходимости делать отдельную проверку
команда. Тем не менее, отдельная команда проверки по-прежнему доступна при желании.
В настоящее время P & E имеет более 1100 алгоритмов для серийных SPI-компонентов различных производителей. Если вы не видите, что вы нужно просто создать запрос поддержки на веб-сайте P & E для нового или измененного алгоритма.
А заодно подучи язык и все таки прочти документ который выложил....
Лошара, гугл транслейтом здесь каждый рукожоп умеет пользоваться, а вот ин.яз. не у каждого за душой. Диктую по буквам: программирует и внешние и внутренние флеш.
В данном документе описаны алгоритмы программирования внешних SPI флэш с помощью микроконтроллеров ARM.
В секции Standalone Programming действительно описаны программаторы внутренней флеши ARM ,
но они Карл, все SWD/JTAG и ни как не SPI.
Так ЧТО ни читать ты не умеешь ни думать...
Ну и остается последнее ,
Andy, теперь просто обязан, конкретно, с картинками и видео предоставить пруф собственноручного прошивания stm32 через SPI. То есть ему всего осталось сляпать железо USB<->SPI и написать софт проггера...
по spi залить готовый нех..... а этого SPI программатора нет.
А как ты водку из холодильника достаешь, если её там нет? Идешь в магазин или завязываешь..., не?
Для AVR беру 4 резистора и 2 диода подключаю с com порту ПК, подключаю к чипу, скачиваю из сети любую из утилит программирования и программирую чип без всякого магазина. Время на всё с нуля около часа. Для SWD stm - беру блюпилл припаиваю 4 резистора и 1 конденсатор, скачиваю hex и с помощью usb-ttl и stm-овской утилиты заливаю в блюпилл. Полчаса без магазина. Опиши процедуру как залить через SPI?
Я уже сказал спасибо за информацию по возможности первой заливки через SPI, i2c,USB, CAN - а в сети я нашёл только одну попытку использовать SPI для загрузки в stm. Сыщик из меня никакой.
Ты только по рекламным проспектам? Программером я уже больше года пользуюсь. Он предлагает только 3 опции. SPI нет.
Кроме той ссылки, что ты давал на программатор, не встречал что можно сделать что бы в выборе интерфейсов программирования появились дополнительные пункты?
PS Написал и увидел твой пост. Вопросов больше не имею.
Зачем? J-linkа мне пока хватает. Мне интересно было можно ли рассчитывать на заливку обновлённых прошивок в уже корпусированное устройство как нибудь легче,чем я сейчас делаю. Легче не будет. И ладно.
слушайте, а как называется режим прошивки когда в системе появляется маленький диск, на него кидаете файл и контролер прошивается, как в паяльнике тс-100 например, где почитать?
Нуклео подключашь и получаешь 3 в одном - stlink, виртуальный порт VCP и диск для кидания прошивки. У нуклео stlink V2.1 . С диском можно сделать только на 128к чипе - в 64к типа блюпил лезет только stlink + VCP.
Тебе что... СТЛинка мало ??? Возьми ДЖилинк... чего расфусоливать то... из пустого в порожнее... Нахрен ещё нуклео ???
От нуклео можно отломить СТЛинк V2.1 который как раз умеет и диск и порт и стлинк. Когда однажды после втыкания в комп сгорел USB порт стмки стлика нуклии, я перепаял стмку и вгрузил в неё стлинк V2, а он без порта и диска и включать питание на основной плате не умеет. Написал письмо в стм с вопросом что делать - получил ответ - покупай ещё одну нуклею и пользуй её стлинк для обеих. Через полгода появилась прошивка V2.1. Вобщем нуклия работает сейчас штатно. С диском, портом, стлинком и напряжение включает.
Друзья, кто в теме, подскажите плиз: пытаюсь USART3 заставить работать с модемом (SIMCOM 7020 E) на скорости выше 9600, никак не получается, на модеме стоит AT+IPR=0, он как бы сам должен подстраиваться под скорость.
void initUARTmodem(void) { // init USART3 PB11-RxD PB10-TxD
fifoPosTXmodem = 0; fifoPosRXmodem = 0; fifoCountTXmodem = 0; fifoCountRXmodem = 0;
RCC->APB1ENR |= RCC_APB1ENR_USART3EN; //Подаем тактирование на уарт — 36Мгц
//Настраиваем порт Tx
GPIOB->MODER |= GPIO_MODER_MODER10_1; // 10 — режим альтернативной функции.
GPIOB->MODER &= ~GPIO_MODER_MODER10_0; // 10 — режим альтернативной функции.
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_10; // 0 - двухтактный выход или push-pull сокращено PP (после сброса)
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR10_1; // 01 — подтяжка к плюсу питания или pull-up сокращено PU
GPIOB->PUPDR |= GPIO_PUPDR_PUPDR10_0; // 01 — подтяжка к плюсу питания или pull-up сокращено PU
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10_1; // 11 — 50 MHz
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR10_0; // 11 — 50 MHz
GPIOB->AFR[1] |=(0x07 << 8); // Назначаем PB10 выводу альтернативную функцию AF7
// Настаиваем Rx
GPIOB->MODER |= GPIO_MODER_MODER11_1; // 10 — режим альтернативной функции.
GPIOB->MODER &= ~GPIO_MODER_MODER11_0; // 10 — режим альтернативной функции.
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR11_1; // 01 — подтяжка к плюсу питания или pull-up сокращено PU
GPIOB->PUPDR |= GPIO_PUPDR_PUPDR11_0; // 01 — подтяжка к плюсу питания или pull-up сокращено PU
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR11_1; // 11 — 50 MHz
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR11_0; // 11 — 50 MHz
GPIOB->AFR[1] |=(0x07 << 12); // Назначаем PB11 выводу альтернативную функцию AF7
// Настраиваем USART3 // http://we.easyelectronics.ru/STM32/nastroyka-uart-v-stm32-i-problemy-dvoichno-desyatichnoy-arifmetiki.html
/*unsigned long tmpuart = (SystemCoreClock) / 9600; // скорость тут ставится, но надо проверить реальную на осциллографе
tmpuart += 1;
tmpuart >>= 1;
USART3->BRR = tmpuart;*/
USART3->BRR = 0xEA6; // 9600 -> 234.375 - 324->0xEA 0.375*16=6=0x6
//USART3->BRR = 0x753; // 19200 -> 117.1875 - 117->0x75 0.1875*16=3=0x3
//USART3->BRR = 0x271; // 57600 -> 39.0625 - 39->0x27 0.0625*16=1=0x1
//USART3->BRR = 0x138; // 115200 -> 19.5 - 19->0x13 0.5*16=8=0x8
USART3->CR1 |= USART_CR1_UE|USART_CR1_TE|USART_CR1_RE; // Вкл. uart, приема и передачи
USART3->CR1 |= USART_CR1_RXNEIE; // Разрешаем генерировать прерывание по приему
NVIC_EnableIRQ (USART3_IRQn); // Включаем прерывание, указываем вектор
}
частота шины USART3 36 МГц, все проверил по инструкциям и даташитам, вроде все расчеты BRR корректные
Скорость зависит от режима, соответственно разные формулы для разных режимов. Вот из драйвера UART:
/** @brief BRR division operation to set BRR register in 8-bit oversampling mode.
* @param __PCLK__ UART clock.
* @param __BAUD__ Baud rate set by the user.
* @retval Division result
*/
#define UART_DIV_SAMPLING8(__PCLK__, __BAUD__) ((((__PCLK__)*2U) + ((__BAUD__)/2U)) / (__BAUD__))
/** @brief BRR division operation to set BRR register in 16-bit oversampling mode.
* @param __PCLK__ UART clock.
* @param __BAUD__ Baud rate set by the user.
* @retval Division result
*/
#define UART_DIV_SAMPLING16(__PCLK__, __BAUD__) (((__PCLK__) + ((__BAUD__)/2U)) / (__BAUD__))
/** @brief Check UART Baud rate.
* @param __BAUDRATE__ Baudrate specified by the user.
* The maximum Baud Rate is derived from the maximum clock on F3 (i.e. 72 MHz)
* divided by the smallest oversampling used on the USART (i.e. 8)
* @retval SET (__BAUDRATE__ is valid) or RESET (__BAUDRATE__ is invalid)
*/
#define IS_UART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 9000001U)
/** @brief Check UART assertion time.
* @param __TIME__ 5-bit value assertion time.
* @retval Test result (TRUE or FALSE).
*/
Еще в CR1 СR2 и СR3 кроме прерываний надо писать параметры СR1 WordLength | Parity | Mode | OverSampling ; CR2 StopBits; CR3 HwFlowCtl | OneBitSampling; может оно и по сбросовому дефолту пройдёт нормально, но я б всё ж проверил.
китайцы пошли чуть дальше своего же клона ST-линка
https://aliexpress.ru/item/32676015777.html
че мучатся, паять, прошивать.
Тут вариант либо ждать либо паять. Да и хитрые китайса ставит в стлинки их китайский клон стм, который отказывается перешиваться в jlink. А так 3 резистора и хоть stlink, хоть j-link и сейчас.
Тут вариант либо ждать либо паять.
ага, именно так. Эта самоделка мне очень пригодилась, когда захотелось побаловаться с СТМ8, а ждать СТ-линк с китая было лень
Все. Ищу как в москве в наше непростое время купить или STLink или USB-TTL, может и JTAG подвернется.
В ЧипДип загляни.
Для любителей USB загрузчиков с завода, в 103 камне его нет.
В ЧипДип загляни.
Для любителей USB загрузчиков с завода, в 103 камне его нет.
Можно не голословное утверждение, а ссылку на конкретный мануал ST? Или буду считать что Вы всё врёте, потому что на запрос гуглю заливка программы stm32f4 через spi ответов нет.
Спасибо.
Для любителей USB загрузчиков с завода, в 103 камне его нет.
Именно USB или UART? Загрузчик через UART с завода в 103 есть.
Для любителей USB загрузчиков с завода, в 103 камне его нет.
Именно USB или UART? Загрузчик через UART с завода в 103 есть.
есть только USART :
Толку-то? Софта то нет.
USB - DFU bootloader есть из коробки в F0x2, работает даже без кварца.
SPI программатор
SPI программатор
А теперь расскажи - как мне или другому не знающему про spi заливку лежащую передо мной блак пилл на f401 по spi залить готовый нех? Исходя из условия, что у меня несколько ардуин, блюпилов и usb-ttl-ов на столе, а этого SPI программатора нет. Ну хоть одну ссылку на то как это сделать человеку не умеющему программировать загрузчики.
SPI программатор
Вы хоть читаете что даете?
Сия шняга для шитья SPI флешек.
Еще раз , именно этот программатор для внешней SPI памяти . Выдранный вами кусок - вами же не понят .
Ой, ну ка расскажи, как ты понимаешь выдранный мной кусок. За одно на st.com напиши, что они лохи, ссылки дают не на АРМ программаторы.
Лошара, гугл транслейтом здесь каждый рукожоп умеет пользоваться, а вот ин.яз. не у каждого за душой. Диктую по буквам: программирует и внешние и внутренние флеш.
Значит и читать не умеешь.
В данном документе описаны алгоритмы программирования внешних SPI флэш с помощью микроконтроллеров ARM.
В секции Standalone Programming действительно описаны программаторы внутренней флеши ARM ,
но они Карл, все SWD/JTAG и ни как не SPI.
Так ЧТО ни читать ты не умеешь ни думать...
Ну и остается последнее ,
Andy, теперь просто обязан, конкретно, с картинками и видео предоставить пруф собственноручного прошивания stm32 через SPI. То есть ему всего осталось сляпать железо USB<->SPI и написать софт проггера...
Иначе звание лохотаурдуньи он заслужил .
Выше читай, все уже сказано. Но повторю - То есть ему всего осталось сляпать железо USB<->SPI и написать софт проггера.
На гите - недоделыш слива с одной платы на другую.
Для AVR беру 4 резистора и 2 диода подключаю с com порту ПК, подключаю к чипу, скачиваю из сети любую из утилит программирования и программирую чип без всякого магазина. Время на всё с нуля около часа. Для SWD stm - беру блюпилл припаиваю 4 резистора и 1 конденсатор, скачиваю hex и с помощью usb-ttl и stm-овской утилиты заливаю в блюпилл. Полчаса без магазина. Опиши процедуру как залить через SPI?
Я уже сказал спасибо за информацию по возможности первой заливки через SPI, i2c,USB, CAN - а в сети я нашёл только одну попытку использовать SPI для загрузки в stm. Сыщик из меня никакой.
STM32CubeProg умеет всё.
Supports debug and bootloader interfaces:
-ST-LINK debug probe (JTAG/SWD);
-ART, USB DFU, I2C, SPI, and CAN bootloader interface;
Только к нему один х нужна железка, которой у тебя нет.
Да вот такая маленькая неувязачка, вроде есть - а толку-то?????
ну да, ну да... жаба душит покупать такую железку
Проще из говна и палок.
Ты только по рекламным проспектам? Программером я уже больше года пользуюсь. Он предлагает только 3 опции. SPI нет.
Кроме той ссылки, что ты давал на программатор, не встречал что можно сделать что бы в выборе интерфейсов программирования появились дополнительные пункты?
PS Написал и увидел твой пост. Вопросов больше не имею.
Из "говна и палок" , говоришь?
У меня сделаны и работают JLinkOB103 и JLinkOB072 .
Шьют и дебажут кучу arm а не только stm32 и имеют кучу плюшек.
То что ты привел ну ни как не претендует на 4и проводка...
nik182, а ты железку докупи , как Andy предлагает. ;) всего-то 4тыр.
Зачем? J-linkа мне пока хватает. Мне интересно было можно ли рассчитывать на заливку обновлённых прошивок в уже корпусированное устройство как нибудь легче,чем я сейчас делаю. Легче не будет. И ладно.
nik182, а boot через UART чем не устраивает? На SPI больше лап нужно.
И это, смайлик -то не видишь что ли? :)))))))))
слушайте, а как называется режим прошивки когда в системе появляется маленький диск, на него кидаете файл и контролер прошивается, как в паяльнике тс-100 например, где почитать?
add
все сам нашел
STM32 USB Mass Storage Bootloader
Там не только spi - про spi разговор зашёл через AVR.
Нуклео подключашь и получаешь 3 в одном - stlink, виртуальный порт VCP и диск для кидания прошивки. У нуклео stlink V2.1 . С диском можно сделать только на 128к чипе - в 64к типа блюпил лезет только stlink + VCP.
Шьют и дебажут кучу arm а не только stm32 и имеют кучу плюшек.
Может оказаться, что твои слова не более чем пустой звук, такой же как
От слов к делу, с картинками и т.п.
Шабат сегодня... бисера не дождёшься...Или тебя в гугле за постоянный бред забанили ???
Нуклео подключашь и получаешь 3 в одном - stlink, виртуальный порт VCP и диск для кидания прошивки. У нуклео stlink V2.1 .
Тебе что... СТЛинка мало ??? Возьми ДЖилинк... чего расфусоливать то... из пустого в порожнее... Нахрен ещё нуклео ???
Тебе что... СТЛинка мало ??? Возьми ДЖилинк... чего расфусоливать то... из пустого в порожнее... Нахрен ещё нуклео ???
От нуклео можно отломить СТЛинк V2.1 который как раз умеет и диск и порт и стлинк. Когда однажды после втыкания в комп сгорел USB порт стмки стлика нуклии, я перепаял стмку и вгрузил в неё стлинк V2, а он без порта и диска и включать питание на основной плате не умеет. Написал письмо в стм с вопросом что делать - получил ответ - покупай ещё одну нуклею и пользуй её стлинк для обеих. Через полгода появилась прошивка V2.1. Вобщем нуклия работает сейчас штатно. С диском, портом, стлинком и напряжение включает.
т слов к делу, с картинками и т.п.
Может оказаться, что твои слова не более чем пустой звук, такой же как
По себе не цени.
JLinkOB072 с прототипом на F072.
ППЦ какое рукожопие. Даже нечего добавить.
Такое мог ляпнуть только тот кто своими руками в жизни ничего не сделал...
Друзья, кто в теме, подскажите плиз: пытаюсь USART3 заставить работать с модемом (SIMCOM 7020 E) на скорости выше 9600, никак не получается, на модеме стоит AT+IPR=0, он как бы сам должен подстраиваться под скорость.
частота шины USART3 36 МГц, все проверил по инструкциям и даташитам, вроде все расчеты BRR корректные
andycat, Какой чип?
STM32F303CCT6
Здесь расчет скорости, это для F0.
Посмотрю чем от F3 отличаются.
APB1 - 36000000 - основное отличие как я понял, формула та же
В F3 USART3 тактируется от APB1, см Clock Tree.
В регистре RCC_CFGR3 есть переключалка тактовой USART3 - USART3SW.
По денфолту тактируется от PCLK.
достал этот регистр, у меня он равен 001D040A, SW=SWS=10 PLL used as system clock
значит считать надо от 72 МГц - правильно?
пошел пробовать...
Скорость зависит от режима, соответственно разные формулы для разных режимов. Вот из драйвера UART:
Еще в CR1 СR2 и СR3 кроме прерываний надо писать параметры СR1 WordLength | Parity | Mode | OverSampling ; CR2 StopBits; CR3 HwFlowCtl | OneBitSampling; может оно и по сбросовому дефолту пройдёт нормально, но я б всё ж проверил.
достал этот регистр, у меня он равен 001D040A, SW=SWS=10 PLL used as system clock
значит считать надо от 72 МГц - правильно?
пошел пробовать...
После ресета он должен быть равен 0. Значит кто-то портит.
Не проще сбросить 19 и 18 биты ?
RCC->CFGR3 &=~RCC_CFGR3_USART3SW;