вторник, 17 сентября 2019 г.

LedBlink (stm32f4-discovery, iar ide, keil)

Пинаут разъема p1 платы stm32f4-discovery:


В отладочной плате stm32f4-discovery (микроконтроллер STM32F429ZIT6U) есть два светодиода:
1) user led ld3 (зеленый) - подключен к I/O PG13;
2) user led ld4 (красный) - подключен к I/O PG14.


Проект будем делать на ide iar 7.5 kickstarter edition.

1. Для описания периферии понадобятся файлы из подпроекта CMSIS, которые можно взять, например, из библиотеки STM32CubeF4.

Создадим проект LEDTestStm32F4 по описанию в источнике 2. У меня он будет лежать в папке D:\Projects\STM32\LEDTestStm32F4. После работы мастера там будет находиться только один файл main.c со следующим содержимым:

int main()
{
  return 0;
}

Скачиваем библиотеку, распаковываем в локальную папку (у меня: D:\Libraries\stm32\STM32Cube_FW_F4_V1.21.0), берем следующие файлы для cortex-m4 и копируем в папку проекта (D:\Projects\STM32\LEDTestStm32F4\):

1) D:\Libraries\stm32\STM32Cube_FW_F4_V1.21.0\Drivers\CMSIS\Include\core_cm4.h
2) D:\Libraries\stm32\STM32Cube_FW_F4_V1.21.0\Drivers\CMSIS\Include\core_cmFunc.h
3) D:\Libraries\stm32\STM32Cube_FW_F4_V1.21.0\Drivers\CMSIS\Include\core_cmInstr.h
4) D:\Libraries\stm32\STM32Cube_FW_F4_V1.21.0\Drivers\CMSIS\Include\core_cmSimd.h

5) D:\Libraries\stm32\STM32Cube_FW_F4_V1.21.0\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c
6) D:\Libraries\stm32\STM32Cube_FW_F4_V1.21.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h

7) D:\Libraries\stm32\STM32Cube_FW_F4_V1.21.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h

8) D:\Libraries\stm32\STM32Cube_FW_F4_V1.21.0\Drivers\CMSIS\Device\ST\STM32F4xx\Include\stm32f429xx.h

9) D:\Libraries\stm32\STM32Cube_FW_F4_V1.21.0\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\iar\startup_stm32f429xx.s

В файле stm32f4xx.h раскАменчиваем дефайн STM32F429xx.

2. Напишем прогу, которая будет включать/выключать выходной gpio-пин PG13. В настройках проекта надо добавить в "С/С++ Compiler"-"Preprocessor"-"Additional include directories" путь к папке проекта "." для того, чтобы компилятор нашел, где лежит файл stm32f4xx.h.

Регистры RCC_APB1ENR_IOPGEN для включения тактирования GPIOG:


Схема настройки состояния GPIOG13 более сложная по сравнению с stm32f103. Вместо двух регистров на каждый порт (CNF, MODE) здесь четыре: GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR и GPIOx_PUPDR. Выставляем GPIO13_MODER в состояние 01: GP output. Подтянем резистором выход, выставив GPIO13_OTYPER в 0. Установим скорость переключения порта в минимум, установив соответствующее значение GPIO13_OSPEEDR в 00. Установим дефолтное состояние "подтяжки" регистра GPIO13_PUPDR в 00 (не PD и не PU).


Конкретное переключение выходного уровня на GPIOG13 делаем через регистр GPIOG_ODR:

#include "stm32f4xx.h"

void main(void)
{
  unsigned long d;

  //Enabling clock for GPIOG
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIOGEN;

  //Configuring GPIOG13 as push-pull output
  //refer to datasheet for details

  GPIOG->MODER |= GPIO_MODER_MODE13_0;
  GPIOG->MODER &= ~GPIO_MODER_MODE13_1;

  GPIOG->OTYPER &= ~GPIO_OTYPER_OT13;

  GPIOG->OSPEEDR &= ~GPIO_OSPEEDR_OSPEED13_0;
  GPIOG->OSPEEDR &= ~GPIO_OSPEEDR_OSPEED13_1;

  GPIOG->PUPDR &= ~GPIO_PUPDR_PUPD13_0;
  GPIOG->PUPDR &= ~GPIO_PUPDR_PUPD13_1;
  
  while (1)
  { 

    //switching the LEDs
    if (GPIOG->ODR & GPIO_ODR_OD13)
    {
      GPIOG->ODR &= ~GPIO_ODR_OD13;
    }
    else
    {
      GPIOG->ODR |= GPIO_ODR_OD13;
    }

    //simple delay
    for (d=0; d<1000000UL; ++d);

  }

}



Создание проекта в iar, keil, подключение CMSIS, реализация мигания:
1) http://we.easyelectronics.ru/STM32/stm32-vldiscovery-moy-variant-bystrogo-starta.html
2) http://easyelectronics.ru/arm-uchebnyj-kurs-iar-ewarm-sozdanie-proekta.html
3) http://easyelectronics.ru/arm-uchebnyj-kurs-iar-ewarm-sozdanie-proekta-chast-2-cmsis-i-standard-peripherals-library.html
4) (установка keil) http://easyelectronics.ru/arm-uchebnyj-kurs-keil-cmsis-sozdanie-proekta.html
5) (разобрана настройка регистров для мигания в аналогичной серии stm32f4) http://narodstream.ru/stm-urok-1-ustanovka-keil-%CE%BCvision/

Официальные мануалы:
1) user manual на discovery kit with STM32F429ZI MCU
https://www.st.com/content/ccc/resource/technical/document/user_manual/6b/25/05/23/a9/45/4d/6a/DM00093903.pdf/files/DM00093903.pdf/jcr:content/translations/en.DM00093903.pdf
2) datasheet на STM32F427xx STM32F429xx
https://www.st.com/resource/en/datasheet/dm00071990.pdf
3) reference manual на STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439
https://www.st.com/content/ccc/resource/technical/document/reference_manual/3d/6d/5a/66/b4/99/40/d4/DM00031020.pdf/files/DM00031020.pdf/jcr:content/translations/en.DM00031020.pdf

Подробные серии уровков по stm32:
1) http://narodstream.ru/programmirovanie-mk-stm32/
2) https://habr.com/ru/post/406839/
3) http://easyelectronics.ru/category/arm-uchebnyj-kurs
4) https://www.youtube.com/watch?v=CIBe6rxMU8s
5) https://m.habr.com/ru/post/490474/

CMSIS:
1) STM32 + CMSIS + STM32CubeIDE https://habr.com/ru/post/481478/
2) Описание архитектур https://developer.arm.com/tools-and-software/embedded/cmsis
3) https://github.com/ARM-software/CMSIS_5

FMC SDRAM:
1) https://narodstream.ru/stm-urok-62-fmc-sdram-chast-1/
2) https://wiki.st.com/stm32mpu/wiki/FMC_internal_peripheral
3) https://bevice.ru/posts/1501.html
4) IS42S16400J sdram datasheet
5) http://badembed.ru/rabotaem-s-sdram-is42s16400j-na-stm32f429-timeout/
6) http://forum.easyelectronics.ru/viewtopic.php?f=35&t=35238
7) https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=146583&page=2

TFT SCREEN LTDC + I2C TOUCHSCREEN (stm32f429-discovery):
1) https://habr.com/ru/post/412753/
2) http://microsin.net/programming/arm/stm32-controller-ltdc.html
3) https://www.st.com/resource/en/application_note/dm00287603-lcdtft-display-controller-ltdc-on-stm32-mcus-stmicroelectronics.pdf
4) https://hubstub.ru/stm32/171-stm32-opisanie-raboty-ltdc.html
5) https://narodstream.ru/stm-urok-64-hal-ltdc-chast-1/ (youtube)
6) https://narodstream.ru/stm-urok-69-hal-ltdc-dma2d-chast-1/ (youtube)
7) http://microsin.net/programming/arm/stm32-controller-ltdc.html
8) https://www.terraelectronica.ru/news/5353
9) http://pro-interes.com/wp-content/uploads/2018/12/LCD-TFT-display-controller-LTDC-on-STM32-MCUs-Rus.pdf
10) SF-TC240T-9370A-T lcd datasheet https://datasheetspdf.com/pdf-file/947545/SaefTechnology/SF-TC240T-9370A-T/1
11) http://forum.easyelectronics.ru/viewtopic.php?f=35&t=22541
12) STMPE811 touch controller datasheet

Waveshare 7" capacitive lcd.

Таймеры:
1) https://narodstream.ru/stm-urok-5-biblioteka-hal-stm32-cube-mx-tajmery/

четверг, 12 сентября 2019 г.

ping-pong in gamemaker

Youtube screencasts:

Созданный по видеокасту gmk-файл и exe-файл игры "ping-pong" на двоих.

2) ChazWorks playlist (8 lessons for ping-pong)

powerbank diy

Источники:
1) https://alexgyver.ru/powerbank/

game console on arduino nano (atmega-328p) and nokia 5110 lcd on breadboard

!!!Такое подключение плохо влияет на экран!!!

Для начала подключим на макетной плате дисплей nokia 5110 (синий) к arduino nano (схема во fritzing):


Возьмем скетч отсюда, только в нем надо поправить используемые дисплеем пины:

 Nokia 5110 модуль Arduino
 RST D8
 CE D7
 DC D6
 Din D5
 CLK D4
 VCC D3
 BL(LIGHT) D2
 GND BL

Для работы с дисплеем nokia5110 будем использовать либу Adufruit_GFX_Library Её необходимо распаковать и добавить в папку "libraries" в папке с Arduino IDE (у меня на win10 среда arduino ide 1.8.5 установлена в C:\Program Files (x86)\Arduino, папка с установленными библиотеками находится по следующему пути C:\Program Files (x86)\Arduino\libraries, сюда и надо скопировать папку Adufruit_GFX_Library из архива).

Перед входом в setup() создадим экземпляр класса Adafruit_PCD8544, в конструктор которого передаются пины, управляющие отображением:

// pin 4 - Serial clock out (SCLK)
// pin 5 - Serial data out (DIN)
// pin 6 - Data/Command select (D/C)
// pin 7 - LCD chip select (CS)
// pin 8 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(4, 5, 6, 7, 8);

В начале функции setup() включим пины питания и подсветки дисплея:

void setup() {
  pinMode(2, OUTPUT);           // pin 2 - подсветка            
  digitalWrite(2, HIGH);       

  pinMode(3, OUTPUT);           // pin 3 - питание            
  digitalWrite(3, HIGH);       
  
  Serial.begin(9600);
  display.begin();              // Инициализация дисплея
  display.setContrast(60);      // Устанавливаем контраст
  display.setTextColor(BLACK);  // Устанавливаем цвет текста
  display.setTextSize(1);       // Устанавливаем размер текста
  display.clearDisplay();       // Очищаем дисплей
  display.display();
  delay(1000);
}

Весь скетч.

Источники:
3) gcConsole with Nokia5110Lcd http://www.getchip.net/posts/147-gc-rogue-nachinayu-dobavlyat-drugie-displei/
4) Arduboy arduino libraries (i2c lcd) https://arduboy.com/download-and-learn-arduino/
5) Arduboy2 arduino libraries (i2c lcd) https://github.com/EvgenKP/Arduboy2
6) Gamebuino Classic https://gamebuino.com/gamebuino-classic
7) Gamebuino Classic Arduino Library https://gamebuino.com/academy
8) Gamebuino Classic opensource games https://gamebuino.com/creations
9) Gamebuino scheme http://legacy.gamebuino.com/wiki/images/6/6f/Gamebuino_r2_schematics.pdf
10) Gamebuino на breadboard https://blog.prostorobot.ru/akdengi/2016/09/17/sozdaem-igrovuyu-konsol-na-arduino-chast-1.html
11) MAKERbuino (nokia 5110 lcd) opensource arduino games https://www.circuitmess.com/creations/
12) MAKERbuino (nokia 5110 lcd) opensource scheme https://www.circuitmess.com/reading-electronic-schematics/
13) MAKERbuino (nokia 5110 lcd) opensource gamebuino arduino library https://www.circuitmess.com/coding-getting-started/
14) Adufruit_GFX_Library http://zelectro.cc/nokia5110_module_arduino
15) Adufruit_GFX_Library https://robotclass.ru/tutorials/graphics-lcd-nokia-5110/
16) u8glib https://cuneyt.aliustaoglu.biz/en/nokia-5110-lcd-with-arduino-nano-and-u8glib/
17) https://www.instructables.com/id/Arduino-Nano-Nokia-5110-LCD-I-NTC-103-Termistor/
18) PCD8644 https://arduinoplus.ru/arduino-nokia-5110/
19) Зарядка-защита лития + применение (TP4056) https://mysku.ru/blog/aliexpress/30210.html
20) Micropong (i2c lcd) https://alexgyver.ru/micropong/

понедельник, 2 сентября 2019 г.

Установка библиотек qt4, qt5 для x86_64 и android, ide qtcreator на Fedora 30 и Ubuntu 16.04

Устанавливаем ide с либами отсюда, выбираем OpenSource, скачиваем установщик Qt Online Installer for Linux (64-bit). Я ставлю в директорию /opt/qt, показываются LTS-сборки, ставлю версию 5.12.5:

Для сборки проектов на qt ставим компилятор и toochain:
sudo yum groupinstall "C Development Tools and Libraries" 
sudo yum install mesa-libGL-devel

Установка либ qt4 для x86_64 из репозитария:
sudo yum install qt-devel-4.8.7

Источники:
1) https://doc.qt.io/qt-5/linux.html
2) https://dougie.io/linux/qt-creator-fedora/
3) https://fedoraproject.org/wiki/Qt_development
4) https://forums.fedoraforum.org/showthread.php?221127-how-can-i-install-QT4-library
5) https://developer.fedoraproject.org/tech/languages/c/cpp_installation.html

вторник, 27 августа 2019 г.

Сборка статических либ Qt4 для Beagle Bone Black с поддержкой D-Bus на Fedora 30/Ubuntu 16.04

Сборка qt 4.8.6 для bbb (linaro4.9) без поддержки dbus рассмотрено здесь. На бигл боне работает ядро 4.1.0, в котором используется следующая версия dbus:

root@arm:~# dbus-daemon --version
D-Bus Message Bus Daemon 1.8.16

1. Скачиваем последние исходники expat (сейчас это 2.2.9), распаковываем в локальную папку (/mnt/Data/Libraries/bbb/expat-2.2.9), переходим в неё, собираем:

cd /mnt/Data/Libraries/bbb/expat-2.2.9

export CC=/usr/local/tools/linaro-gnueabihf-4.9/bin/arm-linux-gnueabihf-gcc
export CXX=/usr/local/tools/linaro-gnueabihf-4.9/bin/arm-linux-gnueabihf-g++
./configure --host=arm-linux --prefix=/usr/local/tools/expat-2.2.9
make
sudo make install

2. Скачаем исходники dbus 1.8.16 отсюда, распакуем в локальную папку (/mnt/Data/Libraries/bbb/dbus-1.8.16).

Для сборки под Fedora30 нужны хедеры пакета libsystemd-dev:

sudo yum install systemd-devel
Переходим, собираем:

cd /mnt/Data/Libraries/bbb/dbus-1.8.16

make distclean

export CC=/usr/local/tools/linaro-gnueabihf-4.9/bin/arm-linux-gnueabihf-gcc
export CXX=/usr/local/tools/linaro-gnueabihf-4.9/bin/arm-linux-gnueabihf-g++

export CPPFLAGS='-I/usr/local/tools/expat-2.2.9/include'
export CFLAGS='-I/usr/local/tools/expat-2.2.9/include'
export LDFLAGS='-L/usr/local/tools/expat-2.2.9/lib'

./autogen.sh --includedir=/usr/include --host=arm-linux --enable-abstract-sockets -with-xml=expat
./configure --prefix=/usr/local/tools/dbus-1.8.16 --host=arm-linux --with-x=no --enable-abstract-sockets -with-xml=expat
make


Ошибка при вызове make на Fedora30:

  CC       libdbus_internal_la-dbus-userdb-util.lo
dbus-userdb-util.c:33:30: fatal error: systemd/sd-login.h: No such file or directory
 #include <systemd/sd-login.h>
                              ^

3. Создадим заново папку для qt 4.8.6 с поддержкой dbus.

Скачиваем версию qt 4.8.6 отсюда и распаковываем в определенную папку для сборки (у меня папка /mnt/Data/Libraries/bbb/qt_4.8.6_linaro4.9_dbus) и копируем в неё содержимое архива с помощью mc, скопируем созданную ранее папку linux-arm-linaro-g++ в новую папку /mnt/Data/Libraries/bbb/qt_4.8.6_linaro4.9_dbus/mkspecs/qws/linux-arm-linaro-g++ :

Собираем qt 4.8.6:

cd /mnt/Data/Libraries/bbb/qt_4.8.6_linaro4.9_dbus
make confclean

export CPPFLAGS='-I/usr/include/ -I/usr/local/tools/expat-2.2.9/include -I/usr/local/tools/dbus-1.8.16/include'
export CFLAGS='-I/usr/include/ -I/usr/local/tools/expat-2.2.9/include -I/usr/local/tools/dbus-1.8.16/include'
export LDFLAGS='-L/usr/local/tools/expat-2.2.9/lib -L/usr/local/tools/dbus-1.8.16/lib'

./configure -v -embedded arm -platform qws/linux-x86_64-g++ -xplatform qws/linux-arm-linaro-g++ -prefix /usr/local/tools/qt_4.8.6_linaro4.9_dbus -little-endian -qt-gfx-transformed -static -confirm-license -opensource -no-accessibility -no-largefile -fast -no-phonon -no-phonon-backend -qt-zlib -no-qt3support -no-openssl -no-webkit -qt-sql-sqlite -dbus -nomake demos -nomake examples -nomake docs

Ошибка при вызове ./configure на Fedora30:
/usr/local/tools/linaro-gnueabihf-4.9/bin/arm-linux-gnueabihf-g++ -c -o project.o -pipe -m64 -DQMAKE_OPENSOURCE_EDITION -g -I. -Igenerators -Igenerators/unix -Igenerators/win32 -Igenerators/mac -Igenerators/symbian -Igenerators/integrity -I/mnt/Data/Libraries/bbb/qt_4.8.6_linaro4.9_dbus/include -I/mnt/Data/Libraries/bbb/qt_4.8.6_linaro4.9_dbus/include/QtCore -I/mnt/Data/Libraries/bbb/qt_4.8.6_linaro4.9_dbus/src/corelib/global -I/mnt/Data/Libraries/bbb/qt_4.8.6_linaro4.9_dbus/src/corelib/xml -I/mnt/Data/Libraries/bbb/qt_4.8.6_linaro4.9_dbus/tools/shared -DQT_NO_PCRE -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DQLIBRARYINFO_EPOCROOT -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_COMPONENT -DQT_NO_STL -DQT_NO_COMPRESS -I/mnt/Data/Libraries/bbb/qt_4.8.6_linaro4.9_dbus/mkspecs/qws/linux-x86_64-g++ -DHAVE_QCONFIG_CPP -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DEPRECATED  project.cpp
arm-linux-gnueabihf-g++: error: unrecognized command line option '-m64'

При сборке проекта с использованием тулчейна linaro(/usr/local/tools/linaro-4.9) и qt-4.8.6 (/usr/local/tools/qt_4.8.6_linaro4.9) у меня возникает ошибка: компилятор не находит заголовочный файл <QtDesigner/QDesignerCustomWidgetInterface>. Это произошло потому, что операция sudo make install не перекинула файлы дизайнера в установочную папку, надо сделать это за неё. Переписываем папки:
1) /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9/include/QtDesigner -> /usr/local/tools/qt_4.8.6_linaro4.9/include/QtDesigner
2) /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9/tools/designer -> /usr/local/tools/qt_4.8.6_linaro4.9/tools/designer

Источники: