Сообщения

Использование UART + DMA при заранее неизветном количестве принимаемых символов (STM32)

У контроллеров STM32, в большинстве своем, отсутствует как таковой буфер приемника UART. Исходя из этой особенности, приходится создавать кольцевой буфер и использовать прерывания. При низкой тактовой частоте ядра и высоких скоростях UART это оказывается очень накладно как по производительности, так и по энергопотреблению.  Всего этого можно избежать при помощи DMA, но как? Ведь при настройке DMA указывается фиксированный размер буфера, в который копируются принятые данные. К тому же у DMA есть прерывания только при полном и половинном заполнении буфера. Фактически, если вы уверены, что длина принимаемых данных не превысит длину буфера, прерывания от DMA можно не использовать вовсе. А обойтись только прерыванием IDLE от UART. Флаг прерывания IDLE в интерфейсе UART выставляется в случае, если после стоп-бита последнего переданного символа на линии RX нет данных в течении времени приема одного символа. Флаг IDLE сбрасывается программно.

Разборка ноутбука Xiaomi Mi notebook pro 15.6 (сушим клавиатуру)

Изображение
   На днях произошла ужасная вещь - на клавиатуру ноутбука вылилось небольшое, но достаточное для глюков количество воды. Хорошо, что вода оказалось чистой, и особенно то, что в Красноярске вода содержит мало примесей (за несколько лет в чайнике нет ни капли накипи).    Что нужно делать, если что-то подобное случилось с Вами: Быстро перевернуть ноутбук, позволить жидкости вытечь из клавиатуры ( при этом стоит следить, чтобы жидкость в этот момент не стекала на матрицу. Вытереть тряпкой остатки воды (спорный пункт!) Я взял баллон со сжатым воздухом и продул под всеми клавишами, при этом вылетело много жидкости. Возможно, таким образом можно лишь усугубить ситуацию, загнав жидкость потоком воздуха куда не следует. Теперь нужно разобрать ноутбук и просушить клавиатуру. Других вариантов нет.    Имейте ввиду, что если Вы конкретно залили клавиатуру, то можете попрощаться с ноутбуком и вот почему: Клавиатур пока нет ни в России, ни в Китае! Я обзвонил много сервисных центр

SPI в STM32F0 как не сесть в лужу или правильная инициализация и отправка данных. Часть 2

Изображение
   Продолжая тему работы с интерфейсом SPI в микроконтроллерах STM32F0, хотелось бы затронуть не только инициализацию, но и отправку данных. Решение для одной неочевидной проблемы невозможно найти на просторах интернета. Сложно даже сформулировать запрос в гугле на эту тему. Поэтому можно засесть и ломать голову пару дней, а то и неделю.    Как я уже и говорил, все это не относится к разработчикам, использующим SPL или HAL.

SPI в STM32F0 как не сесть в лужу или правильная инициализация и отправка данных. Часть 1

   Довольно странные и неочевидные вещи творятся с SPI в микроконтроллерах STM32. Конечно, если Вы используете SPL или HAL, то Вам не о чем беспокоиться, там все уже сделано за Вас. А вот если Вы пытаетесь разобраться с микроконтроллером на более низком уровне и, возможно, уже наткнулись на некоторые странности в работе интерфейса, то продолжайте читать, возможно Вы найдете ответы на свои вопросы в моей статье.

IAR EWARM 8.22 (8.20, 8.10, 8.0) и китайский J-Link V8

   Если Вы купили китайский клон J-link, и он у Вас отказывается работать, то эта статья для Вас.    Большинство продаваемых китайцами клонов J-link не поддерживают последнюю версию драйвера. Да что там последнюю, даже с версией V5.xx ругаются на то, что серийный номер не верный. В этом случае приходится устанавливать драйвер V4.40b, которым китайцы, хоть и не охотно, но делятся (ссылка на гугл диск в конце).

Библиотека SSD1306 для STM32, использующая HAL

   Когда нет нужных библиотек, но очень надо, приходится писать свои. Так и получилось с дисплеем SSD1306. Нужен был русский шрифт, и чтобы все работало через HAL. Выложил первую версию драйвера дисплея SSD1306 на github. Кому интересно, пробуйте и обязательно отпишитесь, если возникли проблемы с чем-либо.   Как пользоваться библиотекой: Для начала необходимо подключить "ssd1306.h" в Вашем "main.c" файле. Затем в файле "ssd1306.h" заменить подключение "stm32f0xx_hal.h", если Вы используете не Cortex-M0. Инициализировать дисплей, указав I2C порт и адрес: ssd1306_Init(hi2c1, 0x78); Установить курсор туда, куда нужно вывести текст:  ssd1306_SetCursor(0, 0); Записать текст в буфер дисплея:  ssd1306_WriteString("Привет мир!", Font_7x9, White); Обновить изображение на экране из буфера:  ssd1306_UpdateScreen(); https://github.com/ananevilya/SSD1306_HAL_EN_RU

Создание шаблонов проекта IAR EWARM (и не только для ARM)

Изображение
   Наверное каждый, кто работает в среде IAR, а в особенности новички, сталкивался с проблемой создания нового проекта. Каждый раз приходится настраивать новый проект заново и добавлять библиотеки, даже если проекты принадлежат одному рабочему пространству (workspace). Но, в IAR есть очень полезная вещь, которая называется "шаблоны проектов". Чтобы создать шаблон проекта, нужно выполнить всего лишь три шага: создать новый проект, настроить проект и подключить необходимые библиотеки, удалить из проекта все лишнее и добавить его в папку с шаблонами.    А теперь обо все более подробно (здесь не описывается настройка проекта в подробностях): Шаг 1 - создаем простой проект из доступных шаблонов.