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

STM32L4 прерывания от UART. Закипел.

vsnprintf линкер нашёл где-то тут:

Вместо всех sprintf-ов и snprintf-ов всегда использую:

extern "C" int _Printf( void *(*)(void *, int), void *, const char *, va_list *);

Она даёт на порядок больше возможностей. И собственно - это и есть базовая функция, которую вызывают все прочие библиотечные *printf-функции.

Имя дано для библиотеки IAR, но в других компиляторах думаю есть аналогичная.

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


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

:bb-offtopic: Судя по последним темам.

Раньше начинали с AVR или PIC. Теперь пришла вторая волна. Они начинают уже с Cortex-M0.

На глаз видны отличия в подходах и проблемы разные.

Раньше, всё же приходилось заглядывать в мануалы. И к чести Atmel можно сказать, что периферия была проста (как правило), даташиты лаконичны. Было много примеров. Можно было в одном примере посмотреть один модуль, в другом - другой и натягать проект. Ну а дальше уже кто как хотел. Если тяп-ляп, то так и оставить, а если кто вдумчивый, то переработать и получить приемлемый результат.

И что мы видим?

Появление HAL и, особенно куба, не убрало проблем, а нагородило их.

Неподготовленному программисту работать с ними достаточно тяжело. Да что говорить... И подготовленному непросто.

Кажущаяся простота подкупает, но, в результате, пользователь получает голимый 0. Сгенерированный проект, как правило не работает, и разборки идут не с камнем, а с кубом. Программист читает и ковыряет какую-то параллельную реальность. И абсолютно ничего не получает взамен. Ни знаний, ни опыта программирования, ни опыта работы с семейством, ни с камнем.

Ну уж лучше разбираться по примерам или библиотекам, как раньше. А то получишь только опыт работы борьбы с кубом.

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


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

Вместо всех sprintf-ов и snprintf-ов всегда использую:

extern "C" int _Printf( void *(*)(void *, int), void *, const char *, va_list *);

Она даёт на порядок больше возможностей. И собственно - это и есть базовая функция, которую вызывают все прочие библиотечные *printf-функции.

Имя дано для библиотеки IAR, но в других компиляторах думаю есть аналогичная.

А Вы в курсе, что в библиотеках IAR нет функции с таким именем? ;)

Откройте же EWARM_DevelopmentGuide.ENU.pdf, найдите где там написано про функцию __write и перестаньте закатывать солнце вручную.

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


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

А Вы в курсе, что в библиотеках IAR нет функции с таким именем? ;)

Откройте же EWARM_DevelopmentGuide.ENU.pdf, найдите где там написано про функцию __write и перестаньте закатывать солнце вручную.

Да ладно! А у меня компилит и глазом не моргнёт :biggrin:

И при чём тут __write??? Она совсем о другом.

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


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

Вот первый результат, когда удача улыбнулась:

 

__HAL_RCC_SPI1_CLK_DISABLE();

 

- только тогда удалось быстренько перескочить на ручное управление портом SPI1.

После этого:

 

HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5);

 

и сразу обычное для пина:

 

(в этом месте можно сразу уровень установить заранее при помощи HAL_GPIO_WritePin() )

GPIO_InitStruct.Pin = GPIO_PIN_5;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

 

теперь можно шевелить ногой SCK как обычно.

 

Обратный переход в режим SPI:

 

GPIO_InitStruct.Pin = GPIO_PIN_5;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;

GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

 

__HAL_RCC_SPI1_CLK_ENABLE();

 

Это на скорую руку, дальнейшая проверка покажет, насколько это правильно.

Обращение к передаче/приёму во время переключения не допустимо,

иначе SPI перестаёт реагировать на управляющие команды.

 

 

 

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


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

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

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

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

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

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

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

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

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

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