{"id":14578,"date":"2023-05-04T09:46:19","date_gmt":"2023-05-04T04:16:19","guid":{"rendered":"https:\/\/fastbitlab.com\/?p=14578"},"modified":"2023-08-17T10:25:53","modified_gmt":"2023-08-17T04:55:53","slug":"stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1","status":"publish","type":"post","link":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/","title":{"rendered":"STM32-LTDC, LCD-TFT, LVGL (MCU3) Lecture 24| LCD SPI initialization coding part-1"},"content":{"rendered":"<div class=\"boldgrid-section color4-background-color color-4-text-contrast bg-background-color\">\n<div class=\"container\">\n<div class=\"row\">\n<div class=\"col-lg-1 col-md-12 col-sm-12 col-xs-12\"><\/div>\n<div class=\"col-lg-9 col-md-12 col-xs-12 col-sm-12\">\n<p class=\"\">&nbsp;<\/p>\n<h1 class=\"\" style=\"text-align: center; font-size: 34px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><b>LCD SPI initialization coding part-1<\/b><\/span><\/h1>\n<div class=\"row bg-editor-hr-wrap\">\n<div class=\"col-lg-12 col-md-12 col-xs-12 col-sm-12\">\n<div>\n<div class=\"bg-hr bg-hr-16 color2-color\" style=\"border-style: solid; border-width: 0px 0px 2px;\"><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p class=\"\" style=\"font-size: 17px; font-family: 'Roboto Slab'; font-weight: 400; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">In the &#8216;Src&#8217; folder, we need to create a new source file called bsp_lcd.c, where we will keep all the code related to the LCD.<\/span><\/p>\n<figure id=\"attachment_14581\" aria-describedby=\"caption-attachment-14581\" style=\"width: 667px\" class=\"wp-caption aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-14581 \" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/05\/Figure-1.png\" alt=\"Figure 1. Source file\" width=\"667\" height=\"357\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-1.png 1705w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-1-300x161.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-1-1024x548.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-1-768x411.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-1-600x321.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-1-1536x823.png 1536w\" sizes=\"(max-width: 667px) 100vw, 667px\" \/><figcaption id=\"caption-attachment-14581\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 1. Source file<\/span><\/figcaption><\/figure>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">Basically, it&#8217;s one of the peripherals mounted on our board. That&#8217;s why I use the word BSP(board support package or board support code).<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">This board support gives us one function called&nbsp; BSP_LCD_Init.&nbsp;<\/span><\/p>\n<p class=\"\" style=\"font-size: 17px; font-family: 'Roboto Slab'; font-weight: 400; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">This function should initialize all the necessary pins, programming interfaces, and LTDC interface (if required), and send various commands to the LCD to set its mode and preferences. All these steps will be coded step by step.<\/span><\/p>\n<figure id=\"attachment_14582\" aria-describedby=\"caption-attachment-14582\" style=\"width: 754px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-14582\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/05\/Figure-2.png\" alt=\"LCD SPI initialization coding part-1\" width=\"754\" height=\"287\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2.png 1676w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2-300x114.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2-1024x390.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2-768x292.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2-600x228.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2-1536x585.png 1536w\" sizes=\"(max-width: 754px) 100vw, 754px\" \/><figcaption id=\"caption-attachment-14582\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 1. bsp_lcd.c code<\/span><\/figcaption><\/figure>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">First, let&#8217;s define all the LCD signals using the macros.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">Look at Figure 1, here is a piece of C code that includes the header file &#8220;stm32f429xx.h&#8221; which defines the register addresses and bit fields for the STM32F429 microcontroller.<\/span><\/p>\n<pre class=\"color-5-text-contrast color5-background-color\" style=\"box-shadow: #cecece 0px 0px 0px 0px inset;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\"><span style=\"color: #008000;\">\/*Define all the LCD signals *\/<\/span>\r\n<span style=\"color: #993366;\">#ifdef<\/span> STM32F429I_DISC1\r\n&nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #993366;\">#define<\/span> LCD_SCL_PIN&nbsp; &nbsp; &nbsp; &nbsp; GPIO_PIN_7\r\n&nbsp; &nbsp; &nbsp; <span style=\"color: #993366;\">&nbsp;#define<\/span> LCD_SCL_PORT&nbsp; &nbsp;    GPIOF\r\n&nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #993366;\">#define<\/span> LCD_SDA_PIN&nbsp; &nbsp; &nbsp; &nbsp; GPIO_PIN_9\r\n&nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #993366;\">#define<\/span> LCD_SDA_PORT&nbsp; &nbsp;    GPIOF\r\n&nbsp; &nbsp; &nbsp; &nbsp;<span style=\"color: #993366;\">#define<\/span> LCD_RESX_PIN\r\n  &nbsp; &nbsp;  <span style=\"color: #993366;\">#define<\/span> LCD_CSX_PIN\r\n  &nbsp; &nbsp;  <span style=\"color: #993366;\">#define<\/span> LCD_WRX_DCX_PIN\r\n<span style=\"color: #993366;\">#endif<\/span><\/pre>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">The code also has an &#8220;ifdef&#8221; preprocessor directive, which checks if the macro &#8220;STM32F429I_DISC1&#8221; is defined.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">The RESX pin of this ILI9341 controller is connected to PA7.&nbsp; That&#8217;s why I write GPIO_PIN_7.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">So, SCL is GPIO_PIN_7 of port F, that&#8217;s why, I created one more macro&nbsp; <span style=\"color: #993300;\">#define LCD_SCL_PORT<\/span> and initialize this to GPIOF. So, GPIOF is the base address of the GPIOF peripheral. It is there in the stm32f429xx.h header file. That&#8217;s why I include the header file here.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">Likewise LCD_SDA_PIN. SDA is PF9. So I write GPIO_PIN_9, and let&#8217;s create one more macro here called PORT.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #993300;\">#define LCD_SDA_PORT&nbsp; &nbsp; &nbsp; GPIOF<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">Like this complete for the rest of the pins.<\/span><\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">To support both the STM32F429 and STM32F407 boards, I created a single macro (line 12 and line 22). Additionally, you can create another block here for STM32F407, and create similar macros by referring to the ILI9341 interfacing diagram and initializing them with the appropriate PINs and port names.<\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Roboto Slab'; font-weight: 400; font-size: 17px; line-height: 30px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"font-weight: 400; color: #000000;\">Next, let&#8217;s add the bsp_lcd.h file to the Inc folder, and here include the BSP_LCD_Init function as a prototype:<\/span><\/p>\n<pre class=\"color-5-text-contrast color5-background-color\" style=\"font-size: 17px; line-height: 30px; font-family: 'Roboto Slab'; font-weight: 400; box-shadow: #cecece 0px 0px 0px 0px;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\"><span style=\"color: #993300;\"><span style=\"color: #993366;\">void<\/span><span style=\"color: #ffffff;\"> BSP_LCD_Init<\/span>(<span style=\"color: #993366;\">void<\/span>);<\/span><\/pre>\n<figure id=\"attachment_14583\" aria-describedby=\"caption-attachment-14583\" style=\"width: 695px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" class=\"wp-image-14583\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/05\/Figure-3.png\" alt=\"LCD SPI initialization coding part-1\" width=\"695\" height=\"315\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-3.png 1286w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-3-300x136.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-3-1024x464.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-3-768x348.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-3-600x272.png 600w\" sizes=\"(max-width: 695px) 100vw, 695px\" \/><figcaption id=\"caption-attachment-14583\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 2.bsp_lcd.h<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-size: 17px; line-height: 30px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000000;\"><span style=\"font-weight: 400;\">In the main.c, you have to include that BSP file. If it wants to use the LCD, maybe it calls that BSP_LCD_Init from here, as shown in Figure 4.&nbsp; <\/span><span style=\"font-weight: 400;\">&nbsp;&nbsp;<\/span><\/span><\/p>\n<figure id=\"attachment_14584\" aria-describedby=\"caption-attachment-14584\" style=\"width: 806px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-14584\" src=\"https:\/\/fastbitlab.com\/wp-content\/uploads\/2023\/05\/Figure-4.png\" alt=\"LCD SPI initialization coding part-1\" width=\"806\" height=\"409\" srcset=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-4.png 1669w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-4-300x152.png 300w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-4-1024x520.png 1024w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-4-768x390.png 768w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-4-600x304.png 600w, https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-4-1536x780.png 1536w\" sizes=\"(max-width: 806px) 100vw, 806px\" \/><figcaption id=\"caption-attachment-14584\" class=\"wp-caption-text\"><span style=\"color: #000000;\">Figure 4. Main.c<\/span><\/figcaption><\/figure>\n<p class=\"\">&nbsp;<\/p>\n<p class=\"\" style=\"font-size: 17px; font-family: 'Roboto Slab'; font-weight: 400;\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\"><span style=\"color: #000080;\"><b>FastBit Embedded Brain Academy Courses<\/b><\/span><\/p>\n<p class=\"\" data-font-family=\"Roboto Slab\" data-font-weight=\"400\" data-font-style=\"\">Click here:&nbsp;<span style=\"color: #0000ff;\"><a style=\"color: #0000ff;\" href=\"https:\/\/fastbitlab.com\/course1\" target=\"_blank\" rel=\"noopener\">https:\/\/fastbitlab.com\/course1<\/a><\/span><\/p>\n<p class=\"\">&nbsp;<\/p>\n<\/div>\n<div class=\"col-lg-2 col-md-12 col-sm-12 col-xs-12\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; LCD SPI initialization coding part-1 &nbsp; In the &#8216;Src&#8217; folder, we need to create a new source file called bsp_lcd.c, where we will keep all the code related to the LCD. Basically, it&#8217;s one of the peripherals mounted on our board. That&#8217;s why I use the word BSP(board support package or board support code). [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":14582,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"enable","ocean_disable_heading":"default","ocean_post_title":"LCD SPI initialization coding part-1","ocean_post_subheading":"","ocean_post_title_style":"solid-color","ocean_post_title_background_color":"#0063b5","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"off","ocean_gallery_id":[],"footnotes":""},"categories":[8],"tags":[],"class_list":["post-14578","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","entry","has-media"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Initializing LCD SPI Interface for STM32 Microcontrollers - Part 1<\/title>\n<meta name=\"description\" content=\"Learn how to initialize the SPI interface for LCD on STM32 microcontrollers using board support package (BSP) code. Step-by-step guide with\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Initializing LCD SPI Interface for STM32 Microcontrollers - Part 1\" \/>\n<meta property=\"og:description\" content=\"Learn how to initialize the SPI interface for LCD on STM32 microcontrollers using board support package (BSP) code. Step-by-step guide with\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"FastBit EBA\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/fastbiteba\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-04T04:16:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-17T04:55:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1676\" \/>\n\t<meta property=\"og:image:height\" content=\"638\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"FastBitLab\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fastbiteba\" \/>\n<meta name=\"twitter:site\" content=\"@fastbiteba\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"FastBitLab\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/\"},\"author\":{\"name\":\"FastBitLab\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/person\\\/e32b38e733a0d76ffa7e6bc998652e5d\"},\"headline\":\"STM32-LTDC, LCD-TFT, LVGL (MCU3) Lecture 24| LCD SPI initialization coding part-1\",\"datePublished\":\"2023-05-04T04:16:19+00:00\",\"dateModified\":\"2023-08-17T04:55:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/\"},\"wordCount\":464,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/Figure-2.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/\",\"name\":\"Initializing LCD SPI Interface for STM32 Microcontrollers - Part 1\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/Figure-2.png\",\"datePublished\":\"2023-05-04T04:16:19+00:00\",\"dateModified\":\"2023-08-17T04:55:53+00:00\",\"description\":\"Learn how to initialize the SPI interface for LCD on STM32 microcontrollers using board support package (BSP) code. Step-by-step guide with\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/#primaryimage\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/Figure-2.png\",\"contentUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/05\\\/Figure-2.png\",\"width\":1676,\"height\":638,\"caption\":\"Figure 2. bsp_lcd.c code\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"STM32-LTDC, LCD-TFT, LVGL (MCU3) Lecture 24| LCD SPI initialization coding part-1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\",\"name\":\"FastBit EBA\",\"description\":\"Your Online Academy of Embedded Systems\",\"publisher\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#organization\",\"name\":\"FastBit EBA\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/logo-EzNrEnyr.png\",\"contentUrl\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/logo-EzNrEnyr.png\",\"width\":640,\"height\":640,\"caption\":\"FastBit EBA\"},\"image\":{\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/fastbiteba\\\/\",\"https:\\\/\\\/x.com\\\/fastbiteba\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/fastbit-embedded-brain-academy-b3167b124\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCa1REBV9hyrzGp2mjJCagBg\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/fastbitlab.com\\\/blog\\\/#\\\/schema\\\/person\\\/e32b38e733a0d76ffa7e6bc998652e5d\",\"name\":\"FastBitLab\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g\",\"caption\":\"FastBitLab\"},\"description\":\"The FastBit Embedded Brain Academy uses the power of internet to bring the online courses related to the field of embedded system programming, Real time operating system, Embedded Linux systems, etc at your finger tip with very low cost. Backed with strong experience of industry, we have produced lots of courses with the customer enrolment over 3000+ across 100+ countries.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Initializing LCD SPI Interface for STM32 Microcontrollers - Part 1","description":"Learn how to initialize the SPI interface for LCD on STM32 microcontrollers using board support package (BSP) code. Step-by-step guide with","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/","og_locale":"en_US","og_type":"article","og_title":"Initializing LCD SPI Interface for STM32 Microcontrollers - Part 1","og_description":"Learn how to initialize the SPI interface for LCD on STM32 microcontrollers using board support package (BSP) code. Step-by-step guide with","og_url":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/","og_site_name":"FastBit EBA","article_publisher":"https:\/\/www.facebook.com\/fastbiteba\/","article_published_time":"2023-05-04T04:16:19+00:00","article_modified_time":"2023-08-17T04:55:53+00:00","og_image":[{"width":1676,"height":638,"url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2.png","type":"image\/png"}],"author":"FastBitLab","twitter_card":"summary_large_image","twitter_creator":"@fastbiteba","twitter_site":"@fastbiteba","twitter_misc":{"Written by":"FastBitLab","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/#article","isPartOf":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/"},"author":{"name":"FastBitLab","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/person\/e32b38e733a0d76ffa7e6bc998652e5d"},"headline":"STM32-LTDC, LCD-TFT, LVGL (MCU3) Lecture 24| LCD SPI initialization coding part-1","datePublished":"2023-05-04T04:16:19+00:00","dateModified":"2023-08-17T04:55:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/"},"wordCount":464,"commentCount":0,"publisher":{"@id":"https:\/\/fastbitlab.com\/blog\/#organization"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2.png","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/","url":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/","name":"Initializing LCD SPI Interface for STM32 Microcontrollers - Part 1","isPartOf":{"@id":"https:\/\/fastbitlab.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/#primaryimage"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2.png","datePublished":"2023-05-04T04:16:19+00:00","dateModified":"2023-08-17T04:55:53+00:00","description":"Learn how to initialize the SPI interface for LCD on STM32 microcontrollers using board support package (BSP) code. Step-by-step guide with","breadcrumb":{"@id":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/#primaryimage","url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2.png","contentUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2023\/05\/Figure-2.png","width":1676,"height":638,"caption":"Figure 2. bsp_lcd.c code"},{"@type":"BreadcrumbList","@id":"https:\/\/fastbitlab.com\/blog\/stm32-ltdc-lcd-tft-lvgl-mcu3-lecture-24-lcd-spi-initialization-coding-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fastbitlab.com\/blog\/"},{"@type":"ListItem","position":2,"name":"STM32-LTDC, LCD-TFT, LVGL (MCU3) Lecture 24| LCD SPI initialization coding part-1"}]},{"@type":"WebSite","@id":"https:\/\/fastbitlab.com\/blog\/#website","url":"https:\/\/fastbitlab.com\/blog\/","name":"FastBit EBA","description":"Your Online Academy of Embedded Systems","publisher":{"@id":"https:\/\/fastbitlab.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fastbitlab.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fastbitlab.com\/blog\/#organization","name":"FastBit EBA","url":"https:\/\/fastbitlab.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2026\/04\/logo-EzNrEnyr.png","contentUrl":"https:\/\/fastbitlab.com\/blog\/wp-content\/uploads\/2026\/04\/logo-EzNrEnyr.png","width":640,"height":640,"caption":"FastBit EBA"},"image":{"@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/fastbiteba\/","https:\/\/x.com\/fastbiteba","https:\/\/www.linkedin.com\/in\/fastbit-embedded-brain-academy-b3167b124\/","https:\/\/www.youtube.com\/channel\/UCa1REBV9hyrzGp2mjJCagBg"]},{"@type":"Person","@id":"https:\/\/fastbitlab.com\/blog\/#\/schema\/person\/e32b38e733a0d76ffa7e6bc998652e5d","name":"FastBitLab","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9230d0f9bdef28b63a01e7ca274ee7b2e8ed9abe932ee564af8809caaf52a0c8?s=96&d=mm&r=g","caption":"FastBitLab"},"description":"The FastBit Embedded Brain Academy uses the power of internet to bring the online courses related to the field of embedded system programming, Real time operating system, Embedded Linux systems, etc at your finger tip with very low cost. Backed with strong experience of industry, we have produced lots of courses with the customer enrolment over 3000+ across 100+ countries."}]}},"_links":{"self":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/14578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/comments?post=14578"}],"version-history":[{"count":4,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/14578\/revisions"}],"predecessor-version":[{"id":15188,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/posts\/14578\/revisions\/15188"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/media\/14582"}],"wp:attachment":[{"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/media?parent=14578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/categories?post=14578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fastbitlab.com\/blog\/wp-json\/wp\/v2\/tags?post=14578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}