вторник, 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/

Комментариев нет:

Отправить комментарий