Top.Mail.Ru

Часть 13. STM32 и C++. EEPROM AT24Cxx.

В предыдущей статье мы рассмотрели реализацию I2C на ядре Cortex-M4. Теперь настало время что-нибудь подключить. Давайте подключим серию микросхем AT24Cxx. Кроме этих микросхем можно подключить кучу разных датчиков. Позже на подходе BMP280, BME280, SGP30 и HDC1080. Других у меня пока нет. В библиотеку входит всего один конструктор и две функции. Конструктору AT24Cxx(I2C* I2C_Ptr, uint8_t DevAddress, ...

Продолжить чтение

Часть 12. STM32 и C++. I2C в Cortex-M4.

Сегодня расскажу, как работать с I2C на ядре Cortex-M4. Для других ядер алгоритм будет другой. Почему так сделано, не знаю. Я долго пытался искать информацию, как это делается, но всё, что я находил, не работало. На каком-то форуме нашёл инфу, где человек сказал, что правильная работа описана то ли в даташите, то ли ещё где-то. ...

Продолжить чтение

Часть 11. STM32 и C++. Драйвер дисплея HX8347D.

В этой статье расскажу, как пишутся драйвера для дисплеев. В принципе, любых, независимо от интерфейса. Сегодня рассмотрим HX8347G. Дисплей довольно тормозной, и тормознутость GFX_TFT дает довольно термоядерное сочетание медлительности. Но для примера подойдёт. Дисплей рассчитан на 8-ми битный интерфейс. Питание от 5 вольт, но контроллер дисплея и подсветка работают от 3.3 вольт. На плате дисплея ...

Продолжить чтение

Часть 10. STM32 и C++. GPIO на классах. Изменения в библиотеке.

Давно назревала ситуация изменить немного библиотеку. Раньше я подключал 4-х, 8-ми выводные интерфейсы к строго определённым выводам. Это накладывало некоторые ограничения на написание драйверов для дисплеев. Приходилось заниматься ногодрыжеством. Решил положить этому конец и немного модернизировать библиотеку. Изменения коснулись файлов gpio_main.* и IO_Digital.*. В чём суть изменения? Возьмём LCD1602, подключенный по 8-ми битному интерфейсу. Его ...

Продолжить чтение

Часть 9. STM32 и С++. Библиотека UART.

Теперь рассмотрим UART и USART - инициализация, передача/приём, так как вещь очень нужная как минимум при отладке кода. Ведь некоторые процессы, происходящие при выполнении, неудобно отслеживать отладчиком CubeIDE. Предупреждение: Во всех модулях, которые я пишу, нет защиты от дурака. Я пошёл на это ради уменьшения кода, да и ленивый я. Поэтому необходимо заранее распланировать, ещё ...

Продолжить чтение

Часть 8. STM32 и С++. Библиотеки Print и GFX_TFT.

Данная статья немного выбивается из темы, но я опишу немного эти библиотеки. Это один из моих первых опытов переделки Ардуиновских библиотек. Всё будет кратенько, так как описывать, что я сделал, ресурсов не хватит. Да и не нужно это. Если кто-то пробовал писать для Ардуино, могли заметить, что в программном ядре существует класс Print. Этот класс ...

Продолжить чтение

Часть 7. STM32 и С++. Библиотека SButton.

В своё время я наткнулся на сайт Гайвера, и мне подарили Arduino NANO. Я почитал его статьи. Поморгал диодом и бросил всё это дело. Тогда я программировал на ASM под PIC контроллеры и для меня было мучением найти или разработать простейшие библиотеки. Работа с кнопками, дисплеями и т. д. Купил несколько Ардуин и быстро наваял ...

Продолжить чтение

Часть 6. STM32 и С++. GPIO на классах.

Забыл предупредить. Всё, что я рассказываю, справедливо практически для всех ядер МК. Я привожу примеры для STM32F4xx. Но в архивах и на Яндекс Диске есть всё то же самое для МК STM32F0xx, STM32F1xx, STM32F4xx, STM32L0xx, STM32L1xx. Всё это богатство в разной степени готовности. Так как писалось это всё в разное время, библиотеки могут или отличаться ...

Продолжить чтение

Часть 5. STM32 и C++. Инициализация GPIO.

Данная статья будет последней вводной статьей перед тем, как мы начнём писать классы! GPIO. Общая концепция инициализации. Вверху на схеме - базовая структура порта. Может помочь в понимании дальнейшего текста. Характерна для Cortex-M0. Для других может незначительно отличаться. Список регистров для разных ядер также может отличаться, особенно эта разница заметна у Cortex-M3. С ними разберёмся ...

Продолжить чтение

Часть 4. STM32 и С++. Инициализация тактового генератора. Продолжение.

Мы закончили с инициализацией RCC, но у нас ничего не работает. Оставил я так специально. Что бы ввести функции millis(), micros(), delay() и delayMicrosecods(). Окончание полной инициализации зависит, кроме всего прочего, от таймера SysTick. И ещё одного файла, который нам подарила CMSIS. Если обратится к первой части цикла, мы в каталоге Core/Src оставили файл system_stm32f4xx.c: Этот ...

Продолжить чтение