اطلاعیه

Collapse
No announcement yet.

راه اندازیLCD E-A DOGS 102 با stm32f0

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راه اندازیLCD E-A DOGS 102 با stm32f0

    سلام. من میخوام یه ال سی دی گرافیکی به اسم EA-DOGS 102 با میکرو stm32f09 راه اندازی کنم. یه برنامه برا همین ال سی دی منتها با سری f1 پیدا کردم و تغییر دادم برا f0 ولی جواب نمیگیرم. حتی پس زمینه ال سی دی هم روشن نمیشه. که احتمالا تو کانفیگ spi مشکل دارم. کسی میتونه کمکم کنه؟
    CS=PA4
    CLK=PA5
    MOSI=PA7
    RST=PA8
    CMD=PA9

    #include "lcd.h"
    #include "font_lcd.h"
    #include "stm32f0xx.h"
    #include "stm32f0xx_conf.h"




    void write_lcd (byte lcd_byte, byte lcd_mode)
    {

    Delay(200);
    GPIO_ResetBits(GPIOA, GPIO_Pin_4);
    if (lcd_mode) GPIO_ResetBits(GPIOA, GPIO_Pin_8);
    else GPIO_SetBits(GPIOA, GPIO_Pin_8);

    sendbyte_spi_lcd(lcd_byte);
    Delay(10);
    GPIO_SetBits(GPIOA, GPIO_Pin_4);
    }




    void clear_lcd (void)
    {
    write_lcd(0x01,1);

    Delay(50);
    }




    void write_byte_lcd (byte lcd_x, byte lcd_y, byte lcd_ascii, byte invertiert)
    {
    byte lcd_offset = 0;
    if (lcd_x > (101)) lcd_x = 0;
    if (lcd_y > (31)) lcd_y = 0;
    switch (lcd_y) {
    case 0: lcd_offset = 0x80; break;
    case 1: lcd_offset = 0xC0; break;
    default: lcd_offset = 0x80;
    };
    write_lcd(lcd_x+lcd_offset,1);
    write_lcd(lcd_ascii,0);
    }




    void printf_lcd(byte lcd_x, byte lcd_y, byte *lcd_zeichen, byte invertiert)
    {
    byte lcd_i;
    byte lcd_offset = 0;
    if (lcd_x > (101)) lcd_x = 0;//spalten
    if (lcd_y > (31)) lcd_y = 0;//zeilen
    switch (lcd_y) {
    case 0: lcd_offset = 0x80; break; // Zeile 1
    case 1: lcd_offset = 0xC0; break; // Zeile 2
    default: lcd_offset = 0x80;
    }
    write_lcd(lcd_x+lcd_offset,1); // Kursorposition setzen

    lcd_offset = strlen(lcd_zeichen); // Länge der Zeichenkette
    if (lcd_offset > 102) lcd_offset = 102;
    for(lcd_i = lcd_offset ; lcd_i ; lcd_i--) {
    write_lcd(*lcd_zeichen,0);
    lcd_zeichen++;
    }
    if (invertiert) {
    // Löschen bis Zeilenende
    for(lcd_i = 102 - lcd_offset - lcd_x ; lcd_i ; lcd_i--) write_lcd(' ',0);
    }
    }




    void init_lcd(void)
    {
    GPIO_SetBits(GPIOA, GPIO_Pin_4);
    Delay(500);

    write_lcd(0x39,1);
    write_lcd(0x39,1);
    write_lcd(0x14,1);
    write_lcd(0x55,1);
    write_lcd(0x6D,1);
    write_lcd(0x78,1);
    write_lcd(0x0C,1);
    write_lcd(0x06,1);
    clear_lcd();
    }


    void sendbyte_spi_lcd (byte Data) {




    while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
    SPI_SendData8(SPI1, Data);




    }









    void Delay(__IO uint32_t nCount) {
    while(nCount--) {
    }
    }


    int main(int argc, char* argv[])
    {




    config_pin ();
    init_lcd();
    while (1)
    {


    printf_lcd(1,1,0x41,1);


    }
    // Infinite loop, never return.
    }





    void config_pin()
    {
    config_SPI();
    config_ADC();
    config_push_button();
    config_LEDs();
    config_interrupt();
    }
    //------------------------------------------------------------------------------
    void config_SPI()
    {
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); // SPI1 Takt freigeben
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);


    GPIO_InitTypeDef GPIO_MOSI_CLK;
    GPIO_MOSI_CLK.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
    GPIO_MOSI_CLK.GPIO_Mode = GPIO_Mode_AF;
    GPIO_MOSI_CLK.GPIO_OType = GPIO_OType_PP;
    GPIO_MOSI_CLK.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_MOSI_CLK.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_MOSI_CLK);
    //connect pins to AF


    GPIO_InitTypeDef GPIO_CS_RST_CMD;
    GPIO_CS_RST_CMD.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_8| GPIO_Pin_9;
    GPIO_CS_RST_CMD.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_CS_RST_CMD.GPIO_OType = GPIO_OType_PP;
    GPIO_CS_RST_CMD.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_CS_RST_CMD.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOA, &GPIO_CS_RST_CMD);


    GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);


    SPI_InitTypeDef SPI_InitStructure; // SPI Struktur
    SPI_I2S_DeInit(SPI1);
    SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; // Nur senden
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // SPI Master-Mode
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // 8 Datenbits
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // CPOL High=Ruhezustand
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // CPHA 2. Flanke (L/H) gibt Daten aus
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // CS Chipselect per Software
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; // Taktfrequenz 72MHz/32 = 2,2 MHz
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // MSB (höherwertiges Bit) zuerst senden
    SPI_InitStructure.SPI_CRCPolynomial = 7; // CRC (?)
    SPI_Init(SPI1, &SPI_InitStructure); // SPI initialisieren
    SPI_Cmd(SPI1, ENABLE); // SPI freigeben




    //--------------------------------------------------------------------

    //-------------------------------------------------------------------------
    }
    //------------------------------------------------------------------------------
    void config_push_button()
    {


    }
    //------------------------------------------------------------------------------
    void config_LEDs()
    {


    }
    //------------------------------------------------------------------------------
    void config_interrupt()
    {


    }
    //------------------------------------------------------------------------------


لطفا صبر کنید...
X