Amateur Radio Station R9AL

1.8 TFT SPI Display. Подключение к stm.

Схема подключения:

Данный дисплей работает по интерфейсу SPI, поэтому первым делом, нужно включить его в cubeIde или cubeMx, если подключать дисплей также как на схеме выше, то нужно включить SPI2 в режиме Full-Duplex-Mode. Можно включить и другой, но для этого нужно Пины DIN и CLK дисплея подключить к пинам MOSI и SCK выбранного порта SPI на контроллере. Остальные же пины нужно установить в режим gpio_output. При этом их тоже можно заменить на другие. Переходим к коду. В конце статьи будет ссылка на готовую библиотеку, с некоторыми функциями. Код был найден на просторах интернета, после чего из него было вырезано все лишнее, а также добавлены другие функции. Изначально этот код был написан на основе библиотеки adafruit для arduino. Для использования библиотеки нужно скопировать файлы st7735.h и st7735.c в ваш проект, и подключить файл st7735.h в коде main.c

Подключение и настройка библиотеки.

Для использования библиотеки нужно скопировать файлы st7735.h, st7735.c, fonts.h и fonts.c в ваш проект, и подключить файлы st7735.h и fonts.h в коде main.c. Настройка подключения дисплея:
        //st7735.c
        //Если вы используете другой контроллер, то нужно вместо "f4xx" вписать ваш, 
        //посмотреть его можно в файле main.h
        #include "stm32f4xx_hal.h"
        
        //st7735.h
        //Если вы выбрали другой порт SPI то вместо "hspi2" нужно вписать выбранный порт
        #define ST7735_SPI_PORT hspi2
        
        //Здесь можно поменять остальные пины
        #define ST7735_RES_Pin       GPIO_PIN_7
        #define ST7735_RES_GPIO_Port GPIOC
        #define ST7735_CS_Pin        GPIO_PIN_6
        #define ST7735_CS_GPIO_Port  GPIOB
        #define ST7735_DC_Pin        GPIO_PIN_9
        #define ST7735_DC_GPIO_Port  GPIOA
    

Описание функций библиотеки.

        //Инициализация дисплея, вызывается один раз, в начале кода
        void ST7735_Init(void);
        //Рисование пикселя на дисплее
        void ST7735_DrawPixel(uint16_t x, uint16_t y, uint16_t color);
        //Рисование строки на дисплее
        void ST7735_WriteString(uint16_t x, uint16_t y, const char* str, FontDef font, uint16_t color);
        //Рисование числа на дисплее
        void ST7735_WriteInt(uint16_t x, uint16_t y, int num, FontDef font, uint16_t color);
        //Рисование закрашенного прямоугольника на дисплее
        void ST7735_FillRectangle(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color);
        //Заливка дисплея
        void ST7735_FillScreen(uint16_t color);
    

Пример работы с библиотекой

        int main(void) {
        /* USER CODE BEGIN 1 */
        /* USER CODE END 1 */

        /* MCU Configuration--------------------------------------------------------*/

        /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
        HAL_Init();

        /* USER CODE BEGIN Init */
        /* USER CODE END Init */

        /* Configure the system clock */
        SystemClock_Config();

        /* USER CODE BEGIN SysInit */
        /* USER CODE END SysInit */

        /* Initialize all configured peripherals */
        MX_GPIO_Init();
        MX_USART2_UART_Init();
        MX_SPI2_Init();
        /* USER CODE BEGIN 2 */
        /* USER CODE END 2 */

        /* Infinite loop */
        /* USER CODE BEGIN WHILE */
            ST7735_Init();
            while (1)
            {
                ST7735_FillScreen(ST7735_BLACK);
                HAL_Delay(3000);

                for (int i = 0; i < 1000; i++) {
                    ST7735_DrawPixel((rand() % 160), (rand() % 128), ST7735_COLOR565((rand() % 255), (rand() % 255), (rand() % 255)));
                }
                HAL_Delay(3000);

                ST7735_FillScreen(ST7735_BLACK);
                ST7735_WriteString(5, 5, "Font16x26", Font_16x26, ST7735_RED);
                ST7735_WriteString(5, 31, "Font11x18", Font_11x18, ST7735_YELLOW);
                ST7735_WriteString(5, 49, "Font7x10", Font_7x10, ST7735_GREEN);
                ST7735_WriteInt(5, 59, 1234, Font_16x26, ST7735_RED);
                ST7735_WriteInt(5, 85, 123456, Font_11x18, ST7735_YELLOW);
                ST7735_WriteInt(5, 103, 123456789, Font_7x10, ST7735_GREEN);
                HAL_Delay(3000);

                ST7735_FillScreen(ST7735_BLACK);
                ST7735_FillRectangle(5, 5, 20, 40, ST7735_YELLOW);
                ST7735_FillRectangle(15, 25, 20, 40, ST7735_GREEN);
                ST7735_FillRectangle(51, 48, 100, 50, ST7735_BLUE);
                HAL_Delay(3000);
                /* USER CODE END WHILE */

                /* USER CODE BEGIN 3 */
            }
        /* USER CODE END 3 */
        }
    
Библиотека здесь

Обсуждение: http://msevm.com/forum/index.php?topic=10029






Copyright © R9AL 2020 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования