Перейти к содержанию
    

STM 32 замена Cortex M7 на M4

Всем доброго времени суток. Не так давно столкнулся с контроллерами и многое не понимаю.

Подскажите, пожалуйста, если ранее использовали STM32F746xxx,а сейчас невозможно его купить, поэтому возникла задача перестроить серию F407. Как это можно реализовать? кол-во входов/выходов, память, UART насколько я понимаю, гораздо меньше у ARM Cortex М4 по сравнению с М7. но если готовы заняться переделкой всей платы, что надо учитывать? переделать плату придется, прошивка? если будет недостаточно входов/выходов, допускается ли использовать 2 контроллера ARM Cortex М4, прошить их отдельно и можно ли будет их связать как-то?

Простите, что задаю глупые вопросы, но я только начинаю погружаться в тему

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 Помигать светодиодом можно как на  M7,  так и на тиньке.

Поручите работу профи - дешевле выйдет в итоге.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Совместимость по пинам в основном присутствует имеется, нужно конкретно смотреть. Если такой же корпус, то иногда бывает разница в расположении VCAP как минимум. Т.е. небольшие изменения в плате. Если вменяемый разработчик писал на кубе, то перенос прошивки относительно простой: настроить пины и скопипастить в новый проект куски старого кода с минимальными изменениями. Переносили F4 на F103 в 2020-ом, из-за наличия у клиента залежей F103 и дефицита F4:
1. оптимизировали математику на целочисленную с фиксированной точкой
2. из-за отсутствия ЦАП в F103 сделали самодельный на резисторах и GPIO (R2R цап из 24 резисторов + DMA GPIO на 8 выходов), порядка нескольких килогерц. Ещё остался запас по производительности. Резисторы взяли 4-в-одном, поэтому всего-то 6 элементов на "эмулятор" ЦАП:

pcb-f103.jpg.41fa1d335ffcc48f431545481be8da61.jpg

Изменено пользователем rezistor2000

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, parovoz сказал:

но если готовы заняться переделкой всей платы, что надо учитывать?

Найти разработчика этой платы и поручить это дело ему. И не заниматься не своим делом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, parovoz сказал:

Всем доброго времени суток. Не так давно столкнулся с контроллерами и многое не понимаю.

Подскажите, пожалуйста, если ранее использовали STM32F746xxx,а сейчас невозможно его купить, поэтому возникла задача перестроить серию F407. Как это можно реализовать? кол-во входов/выходов, память, UART насколько я понимаю, гораздо меньше у ARM Cortex М4 по сравнению с М7. но если готовы заняться переделкой всей платы, что надо учитывать? переделать плату придется, прошивка? если будет недостаточно входов/выходов, допускается ли использовать 2 контроллера ARM Cortex М4, прошить их отдельно и можно ли будет их связать как-то?

Простите, что задаю глупые вопросы, но я только начинаю погружаться в тему

Дополнения:

Учитывать нужно: 

1) хватит ли производительности
2) наличие особой периферии (поддержка экрана и т.п.)
3) если недостаточно выходов периферии (например 3 порта, а нужно 5), то в некоторых случаях можно эмулировать порты через GPIO: софтварный I2C, USART
4) если недостаточно выходов физически (ножек микроконтроллера), то изучить возможность использования мультиплексоров, микросхем для расширения портов. У таких микросхем входов мало, а выходов много. Выходами можно управлять по очереди, задавая адрес на входных ножках.
5) да, можно использовать 2 контроллера, гонять между ними данные по стандартным портам (SPI, USART, I2C), но есть и альтернативы, где нужно углубляться. Например, односторонне GPIO 12bit + CLOCK 1bit DMA выход, а на приём DCMI 12bit. На форумах такие темы проскальзывают, в основном проблема для высоких скоростей обмена, чтобы успеть передать и не расходовать на это слишком много ресурсов микроконтроллера

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 часов назад, VladislavS сказал:

 Помигать светодиодом можно как на  M7,  так и на тиньке.

Поручите работу профи - дешевле выйдет в итоге.

Да, работой будет, конечно, профи заниматься. Но надо и мне потихоньку понимание в голове выстраивать. Да и не все же сразу профи становятся)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 часов назад, rezistor2000 сказал:

Дополнения:

Учитывать нужно: 

1) хватит ли производительности
2) наличие особой периферии (поддержка экрана и т.п.)
3) если недостаточно выходов периферии (например 3 порта, а нужно 5), то в некоторых случаях можно эмулировать порты через GPIO: софтварный I2C, USART
4) если недостаточно выходов физически (ножек микроконтроллера), то изучить возможность использования мультиплексоров, микросхем для расширения портов. У таких микросхем входов мало, а выходов много. Выходами можно управлять по очереди, задавая адрес на входных ножках.
5) да, можно использовать 2 контроллера, гонять между ними данные по стандартным портам (SPI, USART, I2C), но есть и альтернативы, где нужно углубляться. Например, односторонне GPIO 12bit + CLOCK 1bit DMA выход, а на приём DCMI 12bit. На форумах такие темы проскальзывают, в основном проблема для высоких скоростей обмена, чтобы успеть передать и не расходовать на это слишком много ресурсов микроконтроллера

Спасибо за подробный ответ! вот сейчас думаю заменять STM32F746ZGT на STM32F407ZGT6.

Корпус тот же, кол-во вх/вых такое же, распиновка практически та же (95 пин отличается. Uddusb, а у F407 - Udd. Я так понимаю, что питание USB). Оперативки меньше, а как это можно исправить, дополнительно модуль установить или ерунду написал? И если не хватит периферии, то, как Вы писали ранее, через GPIO, а как это реализовать? 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, parovoz сказал:

Оперативки меньше, а как это можно исправить, дополнительно модуль установить или ерунду написал? И если не хватит периферии, то, как Вы писали ранее, через GPIO, а как это реализовать? 

Вроде уже сказали:

5 часов назад, parovoz сказал:

Да, работой будет, конечно, профи заниматься.

Здесь никто не знает требований вашей программы ни по ногам ни по ОЗУ ни по другим ресурсам. Знает это только писавший программу для вашей платы. Почему у него не спрашиваете?

Кроме объёма "оперативки", программа может быть завязана ещё очень много на что. Вплоть до того, что может использоваться DMA, имеющий доступ только к определённым регионам ОЗУ. Или настройки кеширования. Или могут использоваться команды CM7, отсутствующие в CM4. Да и периферия у этих МК не одинаковая - кто знает что у вас там используется и как? И 100500 других моментов.

Непонятна цель ваших вопросов - Вы ожидаете что здесь кто-то угадает как построена ваша программа и от чего зависит её работа???  :wacko2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, parovoz сказал:

Спасибо за подробный ответ! вот сейчас думаю заменять STM32F746ZGT на STM32F407ZGT6.

Корпус тот же, кол-во вх/вых такое же, распиновка практически та же (95 пин отличается. Uddusb, а у F407 - Udd. Я так понимаю, что питание USB). Оперативки меньше, а как это можно исправить, дополнительно модуль установить или ерунду написал? И если не хватит периферии, то, как Вы писали ранее, через GPIO, а как это реализовать? 

 

 

Допустим, есть простой проект на F746, который мигает лампочкой и в цикле заполняет память числами 1,2,3,4,5. В кубе можно сделать новый проект для F407, настроить GPIO output для той же лампочки и скопировать код по заполнению массива. При нехватке памяти можно поставить внешнюю микросхему sdram (https://controllerstech.com/sdram-in-stm32/), в кубе настроить интерфейс памяти, развести плату. Для описанного выше примера в исходник добавится инициализация sdram. В linker script (*.LD) файле можно добавить секцию с адресом SDRAM, и в программе перенести некоторые из переменных и массивов в эту секцию, например uint8_t tempArray[16384] __attribute__((section(".my_sdram"))); Простая программа будет работать без изменений в основном коде, как было tempArray=12345, так и останется. В некоторых случаях можно обойтись и без внешней памяти, неизменяющиеся данные можно перенести во flash (добавить в виде константных массивов в программу), экономнее использовать память и т.д.

Через GPIO: https://www.st.com/resource/en/application_note/dm00110292-implementing-an-emulated-uart-on-stm32f4-microcontrollers-stmicroelectronics.pdf
https://electronics.stackexchange.com/questions/383004/can-spi-and-i2c-be-implemented-using-gpio-pins

Поищите stm32 bit bang i2c, stm32 bit bang spi, stm32 uart emulation. Так же от других фирм есть инструкции на эту тему, например

Microsoft Word - Ap0803110_Emulating_USART_via_software.doc (infineon.com)

Расскажу как это делалось на древнем микроконтроллере 90-х годов: для usart-а было выделено два gpio: вход (rx) и выход (tx). В программе был таймер с прерыванием, которое работало со скоростью 9600 раз в секунду (9600 Гц, или 9600 bps = скорость порта). При необходимости отправить данные выставлялся флаг needSend=1 и количество данных для отправки sendLen=..., В прерывании при наличии флага программа начинала переключать gpio выходного tx пина. На каждый байт по-моему было 10 прерываний. Старт бит, потом восемь раз для каждого бита (после отправки каждого бита в прерывании отправляемый байт сдвигался вправо на один бит), и стоп бит. Для приёма данных было что-то вроде EXTI на rx пине. Сразу после приёма стартового бита программа отсчитывала полтора бита (по времени, цикл на ассемблере с NOP-ами), чтобы по времени попасть на середину первого бита, и начинала считывать оставшиеся 9 бит (таймером или чем уже не помню). Ещё похожий способ был на приём, но с утроенной битовой скоростью, чтобы не выравниваться по стартовому биту:

https://www.analog.com/media/en/technical-documentation/application-notes/56916367ee_89.pdf

Изменено пользователем rezistor2000

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, rezistor2000 сказал:

В некоторых случаях можно обойтись и без внешней памяти, неизменяющиеся данные можно перенести во flash

Для всего этого нужно хорошо разбираться в исходном проекте. Который ТС собрался переносить. С этого ему и следует начать - с подробного изучения этого проекта. На исходном МК.

А здесь спрашивать советы насчёт "кота в мешке" - бессмысленно. Можно только наполучать кучу вредных советов, типа "ногодрыгательной эмуляции интерфейсов".  :biggrin:

 

9 часов назад, rezistor2000 сказал:

Поищите stm32 bit bang i2c, stm32 bit bang spi, stm32 uart emulation. Так же от других фирм есть инструкции на эту тему, например

Советуете ТСу заменить работу с аппаратными UART/I2C/SPI в исходном проекте, на ногодрыгательный колхоз?  :russian_ru:

А ничего, что он собирается переходить с более мощного МК, на более слабый? Даже если он сделает перенос нормально, с использованием аппаратных интерфейсов CM4, то не факт, что хватит производительности на новом МК. А Вы предлагаете ещё многократно(!) замедлить работу ПО. Кроме того что полностью перепахать его. Ведь в исходном ПО, если писал его действительно профи, работа этих интерфейсов вполне возможно осуществляется через DMA. А значит переделывать придётся всё.

9 часов назад, rezistor2000 сказал:

9600 bps = скорость порта

А если там не 9600 бод? Неужто в наш время кто-то ещё работает на 9600 бод?? :shok: Это всё равно, что на телеге по автобану. :biggrin:

 

PS: В моих последних проектах UART-ы обычно используются на 1Мбод. А некоторые - и больше. Это что-ж - потребуется 16МГц прерывание для полноценной эмуляции UART?!! :shok:

Да один такой UART положит всю остальную программу. :biggrin:

9 часов назад, rezistor2000 сказал:

Для приёма данных было что-то вроде EXTI на rx пине. Сразу после приёма стартового бита программа отсчитывала полтора бита (по времени, цикл на ассемблере с NOP-ами), чтобы по времени попасть на середину первого бита

Т.е. - вешала систему на 1.5/9600 = ~156мкс!!!  :shok:

Если вся программа занимается только приёмом с UART, то так ещё может пойдёт. Для проекта тяп-ляп. Если же программа делает ещё что то реалтаймовое - такой UART её тут же завалит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25.04.2022 в 14:57, jcxz сказал:

А если там не 9600 бод? Неужто в наш время кто-то ещё работает на 9600 бод?? 

Например MDB протокол, тот же модбас на некоторых устройствах можно выбрать 9600 и 19200...

25.04.2022 в 14:57, jcxz сказал:

PS: В моих последних проектах UART-ы обычно используются на 1Мбод. А некоторые - и больше.

И все должны использовать их на таких скоростях? Даже если координаты мышки передавать нужно?)))))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/24/2022 at 1:39 AM, parovoz said:

ранее использовали STM32F746xxx,а сейчас невозможно его купить, поэтому возникла задача перестроить серию F407

А где F407 доступна ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На али гора продается, но цены вообще безумные: от 14 баксов и выше!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...