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

STM32Cube и начальная инициализация.

STM32Cube по своему порядку вызывает функции инициализации MX_..._Init();, но в некоторых случаях, например с I2S порядок имеет большое значение и каждый раз после перестройки проекта Куб делает всё по своему и приходится менять местами функции инициализации вручную. Есть способ закрепить нужный мне порядок?

 

Модератор: внимательнее выбирайте раздел и используйте стандартный шрифт в сообщениях, кричащий шрифт использовать не стоит.

Изменено пользователем haker_fox
Перенёс тему в соответствующий раздел.

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


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

58 minutes ago, Oleg_IT said:

Есть способ закрепить нужный мне порядок?

Есть самый очевидный способ - отказаться от косячного куба. Ибо сюрпризы еще будут, порой в самых неожиданных местах.

 

Извините, не смог удержаться ))

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


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

5 hours ago, Oleg_IT said:

Есть способ закрепить нужный мне порядок?

Где то тут приводили очень элегантный способ - в пользвательских секциях кода до и после инициализации ставите #if 0 и #endif и дописываете нужные вам вызовы инициализации в правильном порядке после #endif

 

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


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

7 hours ago, Oleg_IT said:

Есть способ закрепить нужный мне порядок?

да. используйте cubeMX однократно для генерации проекта.  после этого вычищайте всю шелуху вида /*USER_CODE_BEGIN*/ /*USER_CODE_END*/ и далее пишите нормально. 

1 hour ago, xvr said:

в пользовательских секциях кода

Почему какая-то программа решает, где в исходниках мне писать код, а где не писать, и, при этом, называет меня пользователем?

 

Модератор: хоть и в завуалированном виде, но всё же считаю, что мат на форуме не допустим. Сообщение поправил. Думаю, что пункт правил 2.1.б освежить в памяти не помешает.

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


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

1 час назад, tgruzd сказал:

Почему какая-то программа решает, где в исходниках мне писать код, а где не писать, и, при этом, называет меня пользователем?

Если STM32Cube генерирует код с нуля, а вы используете этот код лишь единожды, модифицируя его под свои вкусы, то конфликт между его кодом и вашим никогда не возникнет.

Проблема возникает лишь в случае, если вы произвели модификацию автокода на свой лад, а затем на тот же проект запустили STM32Cube вторично для того, чтобы он переделал свой код под изменившиеся параметры и/или добавленные интерфейсы. Очевидно, что в последнем случае STM32Cube вынужден отличать тот код, который он в праве заменять на новый, от кода, которой добавили вы. Именно для этой цели внутри кода выделена защищенная область для пользовательского кода между  /*USER_CODE_BEGIN*/  и /*USER_CODE_END*/, код внутри которой STM32Cube обязан сохранить в неприкосновенности. Соответственно этому, добавленный вами код при повторном запуске STM32Cube (при повторной генерации автокода) никуда не пропадет, если вы напишете его в защищенной области. Но если вы разместите свой код в других областях автокода или произведете его модификацию, то при повторной генерации автокода STM32Cube ваши правки не сохранятся.

Короче говоря, при повторной генерации автокода весь прежний код заменяется на новый, за исключением пользовательской области между комментами  /*USER_CODE_BEGIN*/  и /*USER_CODE_END*/. Т.е. при этом STM32Cube не модифицирует ранее написанный им автокод, а пишет его заново (и потому не может сохранить правку автокода, совершенную пользователем).

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


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

20 hours ago, Xenia said:

Если STM32Cube генерирует код с нуля

Уверен, все тут прекрасно знают как работает куб и где он позволяет писать юзер код. Это - штатная работа куба.

Но речь, как я понимаю, шла о другом - НЕ штатной работе куба и как это обойти.

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


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

Большое спасибо за комментарии.

On 2/22/2023 at 9:40 AM, Forger said:

Есть самый очевидный способ - отказаться от косячного куба. Ибо сюрпризы еще будут, порой в самых неожиданных местах.

Можно и нужно отказаться в релиз версии, а когда идёт отладка и пока есть необходимость перестраивать проект отказываться от Куба не стоит, много времени экономит. Вручную, с нуля делать код для USB, I2S и даже для SPI, когда есть готовое решение вообще не правильно. Делал я как то давно HID на AVR, не благодарное занятие.

Может мне повезло или я не так много с ним работал, но сюрприз от Куба это единственный и то по не знанию, тем более есть решение от xvr и особенно от Andrey190.

On 2/22/2023 at 2:30 PM, tgruzd said:

да. используйте cubeMX однократно для генерации проекта.  после этого вычищайте всю шелуху вида /*USER_CODE_BEGIN*/ /*USER_CODE_END*/ и далее пишите нормально. 

Может даже не вычищать шелуху, а сделать новый проект, без Куба, и перенести всё нужное из отлаженного проекта, с плагиатом из Drivers, ... .

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


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

13 minutes ago, Oleg_IT said:

Вручную, с нуля делать код для USB, I2S и даже для SPI, когда есть готовое решение вообще не правильно.

Вы наверно удивитесь, но в мире существуют не только два известным вам решения: "магический" cube и "вручную" 

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

 

Кубом приходится пользоваться, когда вас включили в уже существуюший проект, построенный на кубе, или его надо доработать "малой кровью". Тогда да, нет смысла срочно соскакивать с куба, можно и перетерпеть ))

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


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

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

Можно и нужно отказаться в релиз версии, а когда идёт отладка и пока есть необходимость перестраивать проект отказываться от Куба не стоит

Т.е. - сперва всё написать, отладить, а потом выкинуть весь отлаженный код, переписать заново по-другому и сдать заказчику, то что получилось, неотлаженным??? :shok:  Странные у вас методы "отладки"...

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

Вручную, с нуля делать код для USB, I2S и даже для SPI, когда есть готовое решение вообще не правильно.

Что-ж там такого страшного в этих SPI/I2S, что без куба уже совсем невмоготу?? :russian_ru:  В двух конфигурационных регистрах уже совсем никак не разобраться самостоятельно? :cray:

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


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

10 hours ago, Oleg_IT said:

Вручную, с нуля делать код для USB, I2S и даже для SPI, когда есть готовое решение вообще не правильно.

А что мешает писать без Куба, но при необходимости подключать драйверы из HAL? Тогда и проблем с порядком инициализации вообще не будет.

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


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

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

А что мешает писать без Куба

Отсутствие готовых примеров в интернете и куча примеров с кубом => "миллионы мух не могут ошибаться".

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


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

43 minutes ago, Сергей Борщ said:

Отсутствие готовых примеров в интернете

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

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


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

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

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

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

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

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

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

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

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

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