Please note: We are aware of an issue affecting replies on the Arm Community forums, which may not be loading as expected.

We apologize for any inconvenience and appreciate your patience while we investigate and work to resolve the issue.

Thank you for your understanding.


This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

STM32 driver for K0108 GLCD controller

Hi
I am looking for STM32 driver for KS0108 GLCD controller. Any body used ever??
I have downloaded one from en.radzio.dxp.pl/.../ It is puzzling for me that D/I pin is not defined??
I change the code like below in main low level library file:
I see some signals on scope but nothing on the LCD!

//lcd_pin_function.h

//LCD data port
#define    DP_0      GPIO_Pin_0   //PC0
#define    DP_1      GPIO_Pin_1   //PC1
#define    DP_2      GPIO_Pin_2   //PC2
#define    DP_3      GPIO_Pin_3   //PC3
#define    DP_4      GPIO_Pin_6   //PC6
#define    DP_5      GPIO_Pin_7   //PC7
#define    DP_6      GPIO_Pin_8   //PC8
#define    DP_7      GPIO_Pin_9   //PC9
//lcd control port
#define    CS1       GPIO_Pin_10   //PB10
#define    CS2       GPIO_Pin_11   //PB11
#define    CS3       GPIO_Pin_12   //PB12
#define    RS        GPIO_Pin_13   //PB13
#define    RW        GPIO_Pin_14   //PB14
#define    EN        GPIO_Pin_15   //PB15

#define SET_DP0 GPIO_SetBits(GPIOC, DP_0);
#define SET_DP1 GPIO_SetBits(GPIOC, DP_1);
#define SET_DP2 GPIO_SetBits(GPIOC, DP_2);
#define SET_DP3 GPIO_SetBits(GPIOC, DP_3);
#define SET_DP4 GPIO_SetBits(GPIOC, DP_4);
#define SET_DP5 GPIO_SetBits(GPIOC, DP_5);
#define SET_DP6 GPIO_SetBits(GPIOC, DP_6);
#define SET_DP7 GPIO_SetBits(GPIOB, DP_7);

#define RESET_DP0 GPIO_ResetBits(GPIOC, DP_0);
#define RESET_DP1 GPIO_ResetBits(GPIOC, DP_1);
#define RESET_DP2 GPIO_ResetBits(GPIOC, DP_2);
#define RESET_DP3 GPIO_ResetBits(GPIOC, DP_3);
#define RESET_DP4 GPIO_ResetBits(GPIOC, DP_4);
#define RESET_DP5 GPIO_ResetBits(GPIOC, DP_5);
#define RESET_DP6 GPIO_ResetBits(GPIOC, DP_6);
#define RESET_DP7 GPIO_ResetBits(GPIOB, DP_7);

#define SET_CS1 GPIO_SetBits(GPIOB, CS1);
#define SET_CS2 GPIO_SetBits(GPIOB, CS2);
#define SET_CS3 GPIO_SetBits(GPIOB, CS3);
#define SET_RS GPIO_SetBits(GPIOB, RS);
#define SET_RW GPIO_SetBits(GPIOB, RW);
#define SET_EN GPIO_SetBits(GPIOB, EN);

#define RESET_CS1 GPIO_ResetBits(GPIOB, CS1);
#define RESET_CS2 GPIO_ResetBits(GPIOB, CS2);
#define RESET_CS3 GPIO_ResetBits(GPIOB, CS3);
#define RESET_RS GPIO_ResetBits(GPIOB, RS);
#define RESET_RW GPIO_ResetBits(GPIOB, RW);
#define RESET_EN GPIO_ResetBits(GPIOB, EN);

#define Read_DP_0 GPIO_ReadOutputDataBit(GPIOC,DP_0)
#define Read_DP_1 GPIO_ReadOutputDataBit(GPIOC,DP_1)
#define Read_DP_2 GPIO_ReadOutputDataBit(GPIOC,DP_2)
#define Read_DP_3 GPIO_ReadOutputDataBit(GPIOC,DP_3)
#define Read_DP_4 GPIO_ReadOutputDataBit(GPIOC,DP_4)
#define Read_DP_5 GPIO_ReadOutputDataBit(GPIOC,DP_5)
#define Read_DP_6 GPIO_ReadOutputDataBit(GPIOC,DP_6)
#define Read_DP_7 GPIO_ReadOutputDataBit(GPIOB,DP_7)

#define Read_Dataport (Read_DP_0<<0 |Read_DP_1<<1 |Read_DP_2<<2 |Read_DP_3<<3 |Read_DP_4<<4 |Read_DP_5<<5 |Read_DP_6<<6 |Read_DP_7<<7)
void Set_Dataport(unsigned char Data);
void GLCD_InitializePorts(void);
//-------------------------------------------------------------------------------------------------
// Universal KS0108 driver library
// STM32 MCU low-level driver
// (c) Rados³aw Kwiecieñ, radek@dxp.pl
//-------------------------------------------------------------------------------------------------
//#include "stm32f10x_lib.h"
#include "stm32l1xx.h"
#include "lcd_pin_function.h"



#define DISPLAY_STATUS_BUSY 0x80
extern unsigned char screen_x; extern unsigned char screen_y;
GPIO_InitTypeDef GPIO_InitStructure;
void Set_Dataport(unsigned char Data) {
GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = DP_0|DP_1|DP_2|DP_3|DP_4|DP_5|DP_6|DP_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL ; GPIO_Init(GPIOC, &GPIO_InitStructure);
if (Data & 1<<0) GPIO_SetBits(GPIOC, DP_0); else GPIO_ResetBits(GPIOC, DP_0); if (Data & 1<<1) GPIO_SetBits(GPIOC, DP_1); else GPIO_ResetBits(GPIOC, DP_1); if (Data & 1<<2) GPIO_SetBits(GPIOC, DP_2); else GPIO_ResetBits(GPIOC, DP_2); if (Data & 1<<3) GPIO_SetBits(GPIOC, DP_3); else GPIO_ResetBits(GPIOC, DP_3); if (Data & 1<<4) GPIO_SetBits(GPIOC, DP_4); else GPIO_ResetBits(GPIOC, DP_4); if (Data & 1<<5) GPIO_SetBits(GPIOC, DP_5); else GPIO_ResetBits(GPIOC, DP_5); if (Data & 1<<6) GPIO_SetBits(GPIOC, DP_6); else GPIO_ResetBits(GPIOC, DP_6); if (Data & 1<<7) GPIO_SetBits(GPIOC, DP_7); else GPIO_ResetBits(GPIOB, DP_7); }
void Reset_Dataport(unsigned char Data) { GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = DP_0|DP_1|DP_2|DP_3|DP_4|DP_5|DP_6|DP_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL ; GPIO_Init(GPIOC, &GPIO_InitStructure);
if (Data & 1<<0) GPIO_ResetBits(GPIOC, DP_0); //else GPIO_ResetBits(GPIOC, DP_0); if (Data & 1<<1) GPIO_ResetBits(GPIOC, DP_1); //else GPIO_ResetBits(GPIOC, DP_1); if (Data & 1<<2) GPIO_ResetBits(GPIOC, DP_2); //else GPIO_ResetBits(GPIOC, DP_2); if (Data & 1<<3) GPIO_ResetBits(GPIOC, DP_3); //else GPIO_ResetBits(GPIOC, DP_3); if (Data & 1<<4) GPIO_ResetBits(GPIOC, DP_4); //else GPIO_ResetBits(GPIOC, DP_4); if (Data & 1<<5) GPIO_ResetBits(GPIOC, DP_5); //else GPIO_ResetBits(GPIOC, DP_5); if (Data & 1<<6) GPIO_ResetBits(GPIOC, DP_6); //else GPIO_ResetBits(GPIOC, DP_6); if (Data & 1<<7) GPIO_ResetBits(GPIOC, DP_7); //else GPIO_ResetBits(GPIOB, DP_7); }
//------------------------------------------------------------------------------------------------- // Delay function /for 8MHz/ //------------------------------------------------------------------------------------------------- void GLCD_Delay(void) { // asm("nop");asm("nop");asm("nop");asm("nop"); __nop();__nop();__nop();__nop(); } //------------------------------------------------------------------------------------------------- // Enalbe Controller (0-2) //------------------------------------------------------------------------------------------------- void GLCD_EnableController(unsigned char controller) { switch(controller){ case 0 : RESET_CS1; break; case 1 : RESET_CS2; break; case 2 : RESET_CS3; break; } } ...

  • the rest of the code is:

    //-------------------------------------------------------------------------------------------------
    // Disable Controller (0-2)
    //-------------------------------------------------------------------------------------------------
    void GLCD_DisableController(unsigned char controller)
    {
    switch(controller){
            case 0 : SET_CS1; break;
            case 1 : SET_CS2; break;
            case 2 : SET_CS3; break;
            }
    }
    //-------------------------------------------------------------------------------------------------
    // Read Status byte from specified controller (0-2)
    //-------------------------------------------------------------------------------------------------
    unsigned char GLCD_ReadStatus(unsigned char controller)
    {
    unsigned char status;
    
    SET_RW;
    RESET_RS;
    GLCD_EnableController(controller);
    GLCD_Delay();
    SET_EN;
    GLCD_Delay();
    status = (Read_Dataport & 0xFF);
    RESET_EN;
    GLCD_DisableController(controller);
    return status;
    }
    //-------------------------------------------------------------------------------------------------
    // Write command to specified controller
    //-------------------------------------------------------------------------------------------------
    void GLCD_WriteCommand(unsigned char commandToWrite, unsigned char controller)
    {
    while(GLCD_ReadStatus(controller)&DISPLAY_STATUS_BUSY);
      GPIO_StructInit(&GPIO_InitStructure);
            GPIO_InitStructure.GPIO_Pin = DP_0|DP_1|DP_2|DP_3|DP_4|DP_5|DP_6|DP_7;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
            GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
            GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL ;
            GPIO_Init(GPIOC, &GPIO_InitStructure);
    
    RESET_RS; RESET_RW;
    GLCD_Delay();
    GLCD_EnableController(controller);
    GLCD_Delay();
    Set_Dataport(commandToWrite);
    commandToWrite ^= 0xFF;
    Reset_Dataport(commandToWrite);
    GLCD_Delay();
    SET_EN;
    GLCD_Delay();
    RESET_EN;
    GLCD_Delay();
    GLCD_DisableController(controller);
    }
    
    //-------------------------------------------------------------------------------------------------
    // Read data from current position
    //-------------------------------------------------------------------------------------------------
    unsigned char GLCD_ReadData(void)
    {
    unsigned char tmp;
    while(GLCD_ReadStatus(screen_x / 64)&DISPLAY_STATUS_BUSY);
    //  GPIO_StructInit(&GPIO_InitStructure);
    //      GPIO_InitStructure.GPIO_Pin = DP_0|DP_1|DP_2|DP_3|DP_4|DP_5|DP_6|DP_7;
    //      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
    //      GPIO_Init(GPIOC, &GPIO_InitStructure);
    
    
    SET_RS; SET_RW;
    
    GLCD_EnableController(screen_x / 64);
    GLCD_Delay();
    SET_EN;
    GLCD_Delay();
    tmp = (Read_Dataport & 0xFF);
    RESET_EN;
    GLCD_DisableController(screen_x / 64);
    screen_x++;
    return tmp;
    }
    //-------------------------------------------------------------------------------------------------
    // Write data to current position
    //-------------------------------------------------------------------------------------------------
    void GLCD_WriteData(unsigned char dataToWrite)
    {
    while(GLCD_ReadStatus(screen_x / 64)&DISPLAY_STATUS_BUSY);
      GPIO_StructInit(&GPIO_InitStructure);
            GPIO_InitStructure.GPIO_Pin = DP_0|DP_1|DP_2|DP_3|DP_4|DP_5|DP_6|DP_7;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
            GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
            GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
            GPIO_Init(GPIOC, &GPIO_InitStructure);
    
    RESET_RW;
    GLCD_Delay();
    SET_RS;
    GLCD_Delay();
    Set_Dataport(dataToWrite);
    dataToWrite ^= 0xFF;
    Reset_Dataport(dataToWrite);
    GLCD_Delay();
    GLCD_EnableController(screen_x / 64);
    GLCD_Delay();
    SET_EN;
    GLCD_Delay();
    RESET_EN;
    GLCD_Delay();
    GLCD_DisableController(screen_x / 64);
    screen_x++;
    }
    //-------------------------------------------------------------------------------------------------
    //
    //-------------------------------------------------------------------------------------------------
    void GLCD_InitializePorts(void)
    {
    int i;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
    
    
      GPIO_StructInit(&GPIO_InitStructure);
            GPIO_InitStructure.GPIO_Pin = DP_0|DP_1|DP_2|DP_3|DP_4|DP_5|DP_6|DP_7;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
            GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
            GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL ;
            GPIO_Init(GPIOC, &GPIO_InitStructure);
    
            GPIO_StructInit(&GPIO_InitStructure);
            GPIO_InitStructure.GPIO_Pin = CS1|CS2|CS3|RS|EN|RW;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
            GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
            GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL ;
            GPIO_Init(GPIOB, &GPIO_InitStructure);
    }
    //-------------------------------------------------------------------------------------------------
    //
    //-------------------------------------------------------------------------------------------------
    unsigned char GLCD_ReadByteFromROMMemory(char * ptr)
    {
      return *(ptr);
    }
    //-------------------------------------------------------------------------------------------------
    //
    //-------------------------------------------------------------------------------------------------
    
    

  • Did you solve this problem ?
    Please, tell how to fix it, if you know how to solve it, cause i got the same problem.