Рейтинг
28.46
голосов: 30

О блоге

Работа с ядром CortexM3 и периферией STM

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (266)

ploop _YS_ m3hc Krieger Tabke marvin_yorke Ultrin WildCat hexanaft Vga Alatar mzw Reverb grand1987 dievgen woogle PahanMenski anper citizen ZiB

Все читатели блога

VREFINT_CAL и иже с ним

Решил я воспользоваться встроенной опорой в STM32 и вроде бы ничего не предвещало борьбы с необъяснимой фигней…

Читать дальше
  • 0
  • 08 октября 2019, 10:14
  • GYUR22
  • 1

Работаем с микроконтроллерами STM32F7. Тренинг по STM32F7 от компании STMicroelectronics. Впервые на русском языке

Данная серия публикаций основана на материалах цикла STM32F7 Online Training от компании STMicroelectronics. В статьях представлено описание функциональных блоков и инструментов разработки для семейства микроконтроллеров STM32F7.

Логически материал разбит на 4 главы, охватывающие тематику системной периферии, памяти, безопасности, аналоговой периферии, цифровой периферии, таймеров, экосистемы. Главы не связаны между собой, и читатель может ознакомиться с ними в произвольном порядке:

Часть 1. Системная периферия. Есть описание линейки семейства, с характеристиками каждого чипа. А также расписано устройство контроллера. Ядро, Матрица соединений, контроллеры DMA, прерываний, питания, сброса и тактирования, порты ввода вывода, отладки и прочие. Все очень кратко, в обзорном режиме, но дает наглядное понимание, что там вообще есть и как это использовать.

Часть 2. Память и функции безопасности. Во второй части довольно подробно расписано как общаться с внутренней Flash памятью, как подключить внешнюю память, как управляться с контроллером внешней памяти. Расписана работа Quad SPI контроллера, необходимого для подключения памяти по SPI шине, а также вспомогательных блоков, таких как блок вычисления CRC, Хэшпроцессор, ускоритель шифрования AES и генератор случайных чисел. Описаны способы защиты памяти и механизмы обеспечивающие безопасную работу.

Часть 3. Периферия и таймеры. Довольно подробно расписано про АЦП, ЦАП, CAN, DCMI (интерфейс цифровой камеры), Дельта сигма модулятор, интерфейс DSIHOST — для работы с TFT дисплеями и LTDC контроллер (управление дисплеем по RGB), JPEG-кодек, Ethernet, HDMI, I2C, SPI, USART, USB, SDMMC, SAI и SPDIFRX аудио интерфейсы. Очень жирная глава.

Часть 4. Экосистема. Тут про Cube и отладочные платы под этот процессор.

USB HID для микроконтроллеров STM32F103 без использования библиотек

Однажды озадачившись подключением микроконтроллера к ПК через USB, я обнаружил, что это непростая задача. По сравнению с USART, SPI и.т.п., программирование USB оказалось на порядок сложнее. Поиск примеров в интернете практически не дал никаких результатов. Имеющиеся примеры, как правило, основаны на использовании больших и сложных библиотек, которые очень трудно применить, а тем более модифицировать под свои нужды. Также эти примеры обычно состоят из множества файлов, так что даже понять структуру проекта, а не то что принцип работы, USB из них не представляется возможным. Есть неплохие статьи по USB, однако ответа на вопрос, как реализовать обмен данными на конкретном контроллере они не дают. В итоге пришлось самостоятельно, путем длительных экспериментов пытаться запустить USB.
Используемый контроллер STM32F103C8T6. Это наверное самый распространенный и дешевый контроллер с модулем USB. Конкретно использовалась вот такая плата:
ru.aliexpress.com/item/STM32F103C8T6-ARM-STM32-DIY-KIT/32839140960.html?spm=a2g0v.search0104.3.14.1a477b81mKd6hC&ws_ab_test=searchweb0_0%2Csearchweb201602_9_10065_10068_319_317_10696_453_10084_454_10083_10618_10307_10301_537_536_10902_10059_10884_10889_10887_321_322_10915_10103_10914_10911_10910%2Csearchweb201603_58%2CppcSwitch_0&algo_pvid=551618bd-fcbf-49a9-9147-692e88feb8ce&algo_expid=551618bd-fcbf-49a9-9147-692e88feb8ce-5
Цена такой платы практически равна цене микросхемы отдельно. Реализуемый класс устройств HID. Преимущества HID известны. Это отсутствие необходимости использования драйверов на ПК и относительная простота реализации. К недостаткам можно отнести низкую скорость передачи данных. В качестве среды программирования использован CooCox. Программа со стороны ПК компилировалась в Borland C++ 5.5.
Программа для CooCox состоит из одного файла и не использует никаких библиотек (кроме RCC, которая нужна лишь ради функции SystemInit(); в начале программы). Также не используются прерывания, поскольку, на мой взгляд, их использование, затрудняло бы понимание кода и отладку. VID и PID взяты от какого-то STM-овского устройства. При их смене, нужно так-же сменить их и в программе на ПК, поскольку поиск устройства происходит по VID и PID.
Работа рассматриваемой пары программ состоит в следующем. Программа со стороны ПК посылает целое число в контроллер. Контроллер делает инкремент полученного числа и отправляет его назад в ПК. Затем этот цикл повторяется снова и снова. В окне программы выводится полученное число. Дополнительно реализовано управление светодиодом на плате (PC13).
Данная программа не претендует на полное соответствие протоколу USB. В ней реализована обработка ограниченного набора запросов (только тех, что реально попадались при отладке). Как показала практика, набор запросов может различаться на разных компьютерах. Кроме того несмотря на то что удалось добиться работоспособности данной программы, многие вопросы касающиеся USB для меня так и остались непонятными. Этот пример, скорее полуфабрикат, требующий дальнейшей доработки.
Файлы проекта:
drive.google.com/drive/folders/1b3E0YwgRlacK2K2Qykc7OxS11ocNuWig?usp=sharing
  • +8
  • 27 марта 2019, 17:29
  • VVK
  • 1

Очередная багофича HAL

Наткнулся на новый косяк библиотеки HAL в функции HAL_I2S_Transmit. Есть у нее параметр uint16_t Size, который удваивается в случае работы с данными 24 или 32 бита

// stm32f4xx_hal_i2s.c line 537
if((tmp1 == I2S_DATAFORMAT_24B) || (tmp1 == I2S_DATAFORMAT_32B))
{
  hi2s->TxXferSize  = (Size << 1U);
  hi2s->TxXferCount = (Size << 1U);
}
else
{
  hi2s->TxXferSize  = Size;
  hi2s->TxXferCount = Size;
}


Проблема в том, что переменные TxXferSize и TxXferCount имеют тип uint16_t. И если на вход HAL_I2S_Transmit передать размер 0x8000 и более, то после сдвига влево результат превращается в тыкву.

// stm32f4xx_hal_i2s.h line 110
typedef struct __I2S_HandleTypeDef
{
  SPI_TypeDef                *Instance;    /*!< I2S registers base address        */
  I2S_InitTypeDef            Init;         /*!< I2S communication parameters      */
  uint16_t                   *pTxBuffPtr;  /*!< Pointer to I2S Tx transfer buffer */
  __IO uint16_t              TxXferSize;   /*!< I2S Tx transfer size              */
  __IO uint16_t              TxXferCount;  /*!< I2S Tx transfer Counter           */

Микроконтроллеры STM32F7/STM32H7 семейства Value Line

Вебинар рассчитан на технических специалистов и тех, кто хорошо знаком с семейством STM32, интересуется как работать с кодом во внешней памяти на базе контроллеров с Cortex-M7. Мы покажем как настроить среду разработки, как использовать GCC в составе Atollic TrueStudio, как настроить процессор на максимальную производительность и расскажем о тонкостях работы с модулем защиты памяти.

Содержание
-Использование компилятора GCC в составе AtollicTrueStudio;
-Проверка эффективности компилятора и самого микроконтроллера STM32F7/STM32H7 Value line при различных стратегиях размещения кода:
-Внутренняя память FLASH;
-Внешняя QSPI flash;
-Внешняя SDRAM.



На сайте Компэла вы также найдете вопросы-ответы, которые задавались в процессе вебинара, а также исходный код и дополнительные материалы:
-Программные коды, использованные на вебинаре
-Разработка графических устройств на STM32. Выбираем графическую библиотеку
-Отладочные платы на базе микроконтроллеров STM32
-Новая доступная среда разработки для микроконтроллеров STM32
-STM32F7 & H7 Value line: бюджетные версии микроконтроллеров высокой производительности
-Микроконтроллеры STM32 теперь работают с голосовым сервисом Alexa

CS32F103C8T6, GD32F103CBT6 и другие китайские клоны STM32F103C8T6 и STM32F030C8T6

Сегодня наткнулся на такое чудо: https://ru.aliexpress.com/item/CS32F103C8T6-Completely-replace-STM32F103C8T6-STM32F103-LQFP-48-In-Stock-ARM-based-32-bit-MCU-with-Flash/32952782064.html
Известный китайский продавец «улучшенных» микроконтроллеров соблазняет ценой и уверяет что оно полностью совместимо с STM32F103C8T6.
При поверхностном знакомстве с даташитом создается впечатление что вроде бы так оно и есть.

Интересно что же у него внутри?
Подозреваю что китайцы одалживают неразрезанные кремниевые пластины с фабрики где делают STM32 и сами их корпусируют. Да и продавец у себя на сейте пишет что они electronic technology research company and SMT production plant.
Хотелось бы подтвердить или опровергнуть эту версию. Дайте знать в комментариях если найдете фото кристалла этого CS32F103C8T6.

Кноны встречаются также под именем «GD32F130C8T6» но внутри него свое, китайское ядро:
У GD32F103C8 только 64КБ флэш-памяти, а не 128КБ как у большинства STM32F103C8
Большим преимуществом GD32F103 является то, что он может работать на более высокой тактовой частоте 108 МГц вместо 72 МГц на STM32, кроме того, он может быть разогнан до 120 МГц с сохранением работоспособности USB.
Что интересно — у него zero wait state у флеша что позволяет работать значительно быстрее STM32 даже на частоте 72 МГц. Изначально все думали что у GD32 просто быстрая флеш-память. Однако было обнаружено что GD32 использует SRAM для памяти программ и что содержимое флэш-памяти копируется в SRAM во время запуска и затем процессор выполняет программу из ОЗУ.

Вместо 2-х настроек делителя тактовых импульсов (clock divider settings) доступно 4. Это позволяет GD32 работать на 48, 72, 96 и 120 МГц и иметь рабочий USB. (Обратите внимание, что при максимальной тактовой частоте 108 МГц соответствующая настройка делителя отсутствует. Таким образом, максимальная тактовая частота в пределах спецификации на которой процессор может работать с USB составляет 96 МГц — однако это все же быстрее, чем 72 МГц STM32F103.

Фото кристалла Giga Devices GD32F103CBT6:



Читать дальше

Если не дружат HAL и SDIO

Потомкам, которые это нагуглят. Если вы третий день пытаетесь запустить FatFS SDIO в HAL STM32F4 и ничего не получается, то включите DMA. Версия HAL 1.21



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

Захват изображения с USB камеры при помощи STM32

image
Для собственного самообразования решил подключить USB камеру (вебкамеру) к STM32. У меня уже была отладочная плата на базе STM324F429, способная выводить изображение на VGA монитор, так что для проверки работы камеры я использовал именно ее.


Читать дальше
  • +9
  • 29 сентября 2018, 22:18
  • citizen

ST прикупает Atollic и...


Новость надеюсь приятная — теперь Atollic TRUE Studio V9.0 для STM32 PRO версия бесплатна!


Читать дальше

STM32F4Discovery+LabWindowsCVI. Урок 1. Часть 0. Введение

Для тех, кому лень изучать С++ и С#...

Многие начинающие или даже имеющие за плечами большой опыт программирования программисты микроконтроллеров сталкиваются с проблемой написания более менее рабочего оконного приложения для управления микроконтроллером с ПК и отображения телеметрии. В большинстве случаев для этого нужно изучать языки программирования высокого уровня, такие как С++ и C#. Процесс изучения этих языков может привести программиста, который всю жизнь программировал только на С в ступор, потому что они очень сильно отличаются от обычного С, а изучение этих языков займет у него очень много времени.
Именно для таких людей компания NationalInstruments выпустила программу LabWindowsCVI, в которой весь код пишется на простом С и человек, который программировал только на С очень легко в ней разберется…

В этом топике хочу представить вам цикл уроков по программированию LabWindowsCVI с использованием отладочной платы STM32F4Discovery…

В процессе работы мы напишем простое приложение :

С помощью этого приложения мы сможем:
    -Управлять состоянием светодиодов;
    -Управлять яркостью синего светодиода;
    -Получать значения угловых ускорений со встроенного акселерометра;
    -Изменять значения на выходе ЦАП и изменять его с помощью АЦП.

Видео, демонстрирующее работу приложения представлено ниже:


Спасибо за внимание!