Skip to main content
4 of 6
deleted 18 characters in body
toolic
  • 9.8k
  • 9
  • 27
  • 35

LCD 16x2 Interfacing with STM32 (4Bit Mode)

I am trying to interface LCD 16x2 with STM32 for learning purpose. I already interfaced with AVR, PIC etc. that code ported some of. But its not working. What am I doing wrong?

void LCD_init(void)
    {
    
      HAL_Delay(20);
      lcd_cmd(0x30);
      HAL_Delay(20);
      lcd_cmd(0x30);
      HAL_Delay(20);
      //Delay_Us(100);
      lcd_cmd(0x28);
      HAL_Delay(20);
       lcd_cmd(0x28);            // Function set (4-bit interface, 2 lines, 5*7Pixels)
       lcd_cmd(0x28);            // Function set (4-bit interface, 2 lines, 5*7Pixels)
       lcd_cmd(0x0c);            // Make cursorinvisible
       lcd_Clear();            // Clear screen
       lcd_cmd(0x6);            // Set entry Mode(auto increment of cursor)
    }
    
    oid lcd_cmd(__uint16_t cmd)
    {       GPIOB->ODR =0;
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10, GPIO_PIN_RESET);
            cmd = (cmd << 8) ;
            GPIOB->ODR =  (cmd & 0xf000);
            lcd_Strobe();
            cmd = (cmd << 4) ;
            GPIOB->ODR =  (cmd & 0xf000);
            lcd_Strobe();
            GPIOB->ODR =0;
    }
    
    
    void lcd_data(__uint16_t lcd_data)
    {     GPIOB->ODR =0x0000;
        // HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10, GPIO_PIN_SET);
         lcd_data = (lcd_data << 8) ;
         GPIOB->ODR =  (lcd_data& 0xf000)|0x400;
         lcd_Strobe();
         GPIOB->ODR =0;
         lcd_data = (lcd_data << 4) ;
         GPIOB->ODR =  (lcd_data & 0xf000)|0x400;
         lcd_Strobe();
         GPIOB->ODR =0;
    }
    
    
    void lcd_Clear(void)
    {
        lcd_cmd(0x01);
        HAL_Delay(5);
    }
    
    void lcd_String(const char *ptr)  // ptr pointing the address of displaying string
    {
        while (*ptr)             // check weather the endo of file then exit the loop
        {
            lcd_data(*ptr++);    // Sending data to LCD_data functions
        }
    }

enter image description here