Программирование 32-х разрядных МК

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

китайцы пошли чуть дальше своего же клона ST-линка

https://aliexpress.ru/item/32676015777.html

че мучатся, паять, прошивать.

nik182
Offline
Зарегистрирован: 04.05.2015

Тут вариант либо ждать либо паять. Да и хитрые китайса ставит в стлинки их китайский клон стм, который отказывается перешиваться в jlink. А так 3 резистора и хоть stlink, хоть j-link  и сейчас.

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Тут вариант либо ждать либо паять.

ага, именно так. Эта самоделка мне очень пригодилась, когда захотелось побаловаться с СТМ8, а ждать СТ-линк с китая было лень

vganin
Offline
Зарегистрирован: 03.07.2019

Все. Ищу как в москве в наше непростое время купить или STLink или USB-TTL, может и JTAG подвернется.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

В ЧипДип загляни.

Для любителей USB загрузчиков с завода, в 103 камне его нет.

nik182 пишет:
И это не AVR. По spi не программируется.
Я бы не был так категоричен, в 103 камне нет, а в 4хх серии есть.

nik182
Offline
Зарегистрирован: 04.05.2015

Andy пишет:

В ЧипДип загляни.

Для любителей USB загрузчиков с завода, в 103 камне его нет.

nik182 пишет:
И это не AVR. По spi не программируется.
Я бы не был так категоричен, в 103 камне нет, а в 4хх серии есть.

Можно не голословное утверждение, а ссылку на конкретный мануал ST? Или буду считать что Вы всё врёте, потому что на запрос гуглю заливка программы stm32f4 через spi  ответов нет. 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

nik182 пишет:
Можно не голословное утверждение, а ссылку на конкретный мануал ST?
Держи, сыщик...

nik182
Offline
Зарегистрирован: 04.05.2015

Спасибо. 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Andy пишет:

Для любителей USB загрузчиков с завода, в 103 камне его нет.

Именно USB или UART? Загрузчик через UART с завода в 103 есть.

mixail844
Offline
Зарегистрирован: 30.04.2012

Jeka_M пишет:

Andy пишет:

Для любителей USB загрузчиков с завода, в 103 камне его нет.

Именно USB или UART? Загрузчик через UART с завода в 103 есть.

 

есть только USART :

 

dosikus
Offline
Зарегистрирован: 11.03.2017

Andy пишет:

 

nik182 пишет:
И это не AVR. По spi не программируется.
Я бы не был так категоричен, в 103 камне нет, а в 4хх серии есть.

 

Толку-то? Софта то нет.

USB - DFU bootloader есть из коробки в F0x2, работает даже без кварца.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

dosikus пишет:
Толку-то? Софта то нет.
Между нет и не знаю огромная разница.

SPI программатор

nik182
Offline
Зарегистрирован: 04.05.2015

Andy пишет:

dosikus пишет:
Толку-то? Софта то нет.
Между нет и не знаю огромная разница.

SPI программатор

А теперь расскажи - как мне или другому не знающему про spi  заливку лежащую передо мной блак пилл на f401 по spi залить готовый нех? Исходя из условия, что у меня несколько ардуин, блюпилов и usb-ttl-ов на столе, а этого SPI программатора нет.  Ну хоть одну ссылку на то как это сделать человеку не умеющему программировать загрузчики. 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

nik182 пишет:
по spi залить готовый нех..... а этого SPI программатора нет.
А как ты водку из холодильника достаешь, если её там нет? Идешь в магазин или завязываешь..., не?

dosikus
Offline
Зарегистрирован: 11.03.2017

Andy пишет:

dosikus пишет:
Толку-то? Софта то нет.
Между нет и не знаю огромная разница.

SPI программатор

 

Вы хоть читаете что даете? 

Сия шняга для шитья SPI флешек.

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

dosikus пишет:
Сия шняга для шитья SPI флешек.
Им расскажи, а то они не знают, думают, что и для АРМов тоже.

dosikus
Offline
Зарегистрирован: 11.03.2017

Еще раз , именно этот программатор для внешней SPI памяти . Выдранный вами кусок  - вами же не понят .

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Ой, ну ка расскажи, как ты понимаешь выдранный мной кусок. За одно на st.com напиши, что они лохи, ссылки дают не на АРМ программаторы.

dosikus
Offline
Зарегистрирован: 11.03.2017
На развлекайся...
 
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 для нового или измененного алгоритма.
 
 
 
 
 
А заодно подучи язык и все таки прочти документ который выложил....
Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Лошара, гугл транслейтом здесь каждый рукожоп умеет пользоваться, а вот ин.яз. не у каждого за душой. Диктую по буквам: программирует и внешние и внутренние флеш.

dosikus
Offline
Зарегистрирован: 11.03.2017

Значит и читать не умеешь.

В данном документе описаны алгоритмы программирования внешних SPI флэш с помощью микроконтроллеров ARM.

 

В секции Standalone Programming действительно описаны программаторы внутренней флеши ARM ,

 но они Карл, все SWD/JTAG  и ни как не  SPI.

Так ЧТО  ни читать ты не умеешь ни думать...

 

Ну и остается последнее , 

Andy, теперь просто обязан, конкретно, с картинками и видео  предоставить пруф собственноручного прошивания stm32 через SPI. То есть ему всего осталось сляпать железо USB<->SPI и написать софт проггера...

Иначе звание лохотаурдуньи он заслужил .

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

dosikus пишет:
но они Карл, все SWD/JTAG  и ни как не  SPI.
Согласен. Что скажешь на это?

dosikus
Offline
Зарегистрирован: 11.03.2017

Выше читай, все уже сказано. Но повторю - То есть ему всего осталось сляпать железо USB<->SPI и написать софт проггера.

На гите - недоделыш слива с одной платы на другую.

 

nik182
Offline
Зарегистрирован: 04.05.2015

Andy пишет:

nik182 пишет:
по spi залить готовый нех..... а этого SPI программатора нет.
А как ты водку из холодильника достаешь, если её там нет? Идешь в магазин или завязываешь..., не?

Для AVR беру 4 резистора и 2 диода подключаю с com порту ПК, подключаю к чипу, скачиваю из сети любую из утилит программирования и программирую чип без всякого магазина. Время на всё с нуля около часа. Для SWD stm - беру блюпилл припаиваю 4 резистора и 1 конденсатор, скачиваю hex и с помощью usb-ttl и stm-овской  утилиты заливаю в блюпилл. Полчаса без магазина. Опиши процедуру как залить через SPI?

Я уже сказал спасибо за информацию по возможности первой заливки через SPI, i2c,USB, CAN - а в сети я нашёл только одну попытку использовать SPI для загрузки в stm. Сыщик из меня никакой.      

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

STM32CubeProg умеет всё.

Supports debug and bootloader interfaces:

-ST-LINK debug probe (JTAG/SWD);

-ART, USB DFU, I2C, SPI, and CAN bootloader interface;

Только к нему один х нужна железка, которой у тебя нет.

dosikus
Offline
Зарегистрирован: 11.03.2017

Да вот такая маленькая неувязачка, вроде есть - а толку-то?????

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

ну да, ну да... жаба душит покупать такую железку

Проще из говна и палок.

dosikus пишет:
Иначе звание лохотаурдуньи он заслужил .
Ардуино происходит от двух итальянских слов Arduo=трудный и asino=жопа, в этом мне действительно далеко до тебя, можно сказать что я лох.

nik182
Offline
Зарегистрирован: 04.05.2015

Ты только по рекламным проспектам? Программером я уже больше года пользуюсь. Он предлагает только 3 опции. SPI нет.

Кроме той ссылки, что ты давал на программатор, не встречал что можно сделать что бы в выборе интерфейсов программирования появились дополнительные пункты?  

PS Написал и увидел твой пост. Вопросов больше не имею.

 

dosikus
Offline
Зарегистрирован: 11.03.2017

Из "говна и палок" , говоришь?

У меня сделаны и работают JLinkOB103 и JLinkOB072 .

Шьют и дебажут кучу arm а не только stm32 и имеют кучу плюшек.

То что ты привел ну ни как не претендует на 4и проводка...

nik182, а ты железку докупи , как Andy предлагает. ;) всего-то 4тыр.

 

nik182
Offline
Зарегистрирован: 04.05.2015

Зачем? J-linkа мне пока хватает. Мне интересно было можно ли рассчитывать на заливку обновлённых прошивок в уже корпусированное устройство как нибудь легче,чем я сейчас делаю. Легче не будет. И ладно. 

dosikus
Offline
Зарегистрирован: 11.03.2017

nik182,  а boot через UART чем не устраивает? На SPI больше лап нужно.

И это, смайлик -то не видишь что ли? :)))))))))

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

слушайте, а как называется режим прошивки когда в системе появляется маленький диск, на него кидаете файл и контролер прошивается, как в паяльнике тс-100 например, где почитать?

 

add

все сам нашел

STM32 USB Mass Storage Bootloader

nik182
Offline
Зарегистрирован: 04.05.2015

Там не только spi - про spi разговор зашёл через AVR.

nik182
Offline
Зарегистрирован: 04.05.2015

Нуклео подключашь и получаешь 3 в одном - stlink, виртуальный порт VCP и диск для кидания прошивки. У нуклео stlink V2.1 . С диском можно сделать только на 128к чипе - в 64к типа блюпил лезет только stlink + VCP. 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

dosikus пишет:
У меня сделаны и работают JLinkOB103 и JLinkOB072 .

Шьют и дебажут кучу arm а не только stm32 и имеют кучу плюшек.

От слов к делу, с картинками и т.п.

Может оказаться, что твои слова не более чем пустой звук, такой же как

dosikus пишет:
Толку-то? Софта то нет.

ssss
Offline
Зарегистрирован: 01.07.2016

Andy пишет:

От слов к делу, с картинками и т.п.

Шабат сегодня... бисера не дождёшься...Или тебя в гугле за постоянный бред забанили ???

 

ssss
Offline
Зарегистрирован: 01.07.2016

nik182 пишет:

Нуклео подключашь и получаешь 3 в одном - stlink, виртуальный порт VCP и диск для кидания прошивки. У нуклео stlink V2.1 .

Тебе что... СТЛинка мало ??? Возьми ДЖилинк... чего расфусоливать то... из пустого в порожнее... Нахрен ещё нуклео ???

nik182
Offline
Зарегистрирован: 04.05.2015

ssss пишет:

Тебе что... СТЛинка мало ??? Возьми ДЖилинк... чего расфусоливать то... из пустого в порожнее... Нахрен ещё нуклео ???

От нуклео можно отломить СТЛинк V2.1 который как раз умеет и диск и порт и стлинк. Когда однажды после втыкания в комп сгорел USB порт стмки стлика нуклии, я  перепаял стмку и вгрузил в неё стлинк V2, а он без порта и диска и включать питание на основной плате не умеет. Написал письмо в стм с вопросом что делать - получил ответ - покупай ещё одну нуклею и пользуй её стлинк для обеих. Через полгода появилась прошивка V2.1. Вобщем нуклия работает сейчас штатно. С диском, портом, стлинком и напряжение включает.  

dosikus
Offline
Зарегистрирован: 11.03.2017

Andy пишет:

т слов к делу, с картинками и т.п.

Может оказаться, что твои слова не более чем пустой звук, такой же как

 

По себе не цени.

JLinkOB072 с прототипом на F072.

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

ППЦ какое рукожопие. Даже нечего добавить.

dosikus
Offline
Зарегистрирован: 11.03.2017

Такое мог ляпнуть только тот кто своими руками в жизни ничего не сделал...

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Друзья, кто в теме, подскажите плиз: пытаюсь 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 корректные

dosikus
Offline
Зарегистрирован: 11.03.2017

andycat, Какой чип?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

STM32F303CCT6

 

dosikus
Offline
Зарегистрирован: 11.03.2017

Здесь расчет скорости, это для F0.

Посмотрю чем от F3 отличаются.



#define APBCLK 48000000UL #define BAUDRATE 115200UL
USART1->BRR =(APBCLK+BAUDRATE/2)/BAUDRATE;

 

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

APB1 - 36000000 - основное отличие как я понял, формула та же 

dosikus
Offline
Зарегистрирован: 11.03.2017

В F3  USART3 тактируется от APB1, см Clock Tree.

В регистре RCC_CFGR3 есть переключалка тактовой  USART3 -  USART3SW.

По денфолту тактируется от PCLK.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

достал этот регистр, у меня он равен 001D040A, SW=SWS=10 PLL used as system clock

значит считать надо от 72 МГц - правильно?

пошел пробовать...

 

nik182
Offline
Зарегистрирован: 04.05.2015

Скорость зависит от режима, соответственно разные формулы для разных режимов. Вот из драйвера 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; может оно и по сбросовому дефолту пройдёт нормально, но я б всё ж проверил. 

dosikus
Offline
Зарегистрирован: 11.03.2017

andycat пишет:

достал этот регистр, у меня он равен 001D040A, SW=SWS=10 PLL used as system clock

значит считать надо от 72 МГц - правильно?

пошел пробовать...

 

 

После ресета он должен быть равен 0. Значит кто-то портит.

Не проще сбросить 19 и 18 биты ?

RCC->CFGR3 &=~RCC_CFGR3_USART3SW;