娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

【GD32F427開發板試用】EXMC方式驅動LCD屏幕

發布者:心靈舞者最新更新時間:2024-12-05 來源: elecfans 手機看文章 掃描二維碼
隨時隨地手機看文章

使用EXMC方式驅動LCD顯示屏。

GD32F427VEXMC系統架構圖

20221218222024.png

擴展板硬件

擴展板硬件EXMC接口部分電路圖

2.1、開發板接口部分

20221218224239.png

2.2、LCD接口部分

20221218224348.png

驅動程序

3.1、exmc.c


#include 'gd32f4xx.h'

#include 'exmc_lcd.h'


/*!

    brief      lcd peripheral initialize

    param[in]  none 

    param[out] none

    retval     none

*/

void exmc_lcd_init(void)

{

    exmc_norsram_parameter_struct lcd_init_struct;

    exmc_norsram_timing_parameter_struct lcd_timing_init_struct;


    /* EXMC clock enable */

    rcu_periph_clock_enable(RCU_EXMC);


    /* GPIO clock enable */

    rcu_periph_clock_enable(RCU_GPIOD);

    rcu_periph_clock_enable(RCU_GPIOE);

    

        /* configure GPIO D[0-15] */

    gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 |

                GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15);

    gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 |

                  GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15);

    gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 |

                            GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15);


    gpio_af_set(GPIOE, GPIO_AF_12, GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |

                GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);

    gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |

                  GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);

    gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 |

                            GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);


    /* configure PE2(EXMC_A23) */ 

        gpio_af_set(GPIOE, GPIO_AF_12, GPIO_PIN_2);

    gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_2);

    gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);

    

        /* configure NOE NWE */

    gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_4 | GPIO_PIN_5);

    gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_4 | GPIO_PIN_5);

    gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4 | GPIO_PIN_5);



        /* configure EXMC NE0 */

    gpio_af_set(GPIOD, GPIO_AF_12, GPIO_PIN_7);

    gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_7);

    gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);


    lcd_timing_init_struct.asyn_access_mode = EXMC_ACCESS_MODE_A;

    lcd_timing_init_struct.syn_data_latency = EXMC_DATALAT_2_CLK;

    lcd_timing_init_struct.syn_clk_division = EXMC_SYN_CLOCK_RATIO_2_CLK;

    lcd_timing_init_struct.bus_latency = 0;

    lcd_timing_init_struct.asyn_data_setuptime = 7;

    lcd_timing_init_struct.asyn_address_holdtime = 2;

    lcd_timing_init_struct.asyn_address_setuptime = 5;


    lcd_init_struct.norsram_region = EXMC_BANK0_NORSRAM_REGION0;

    lcd_init_struct.write_mode = EXMC_ASYN_WRITE;

    lcd_init_struct.extended_mode = DISABLE;

    lcd_init_struct.asyn_wait = DISABLE;

    lcd_init_struct.nwait_signal = DISABLE;

    lcd_init_struct.memory_write = ENABLE;

    lcd_init_struct.nwait_config = EXMC_NWAIT_CONFIG_BEFORE;

    lcd_init_struct.wrap_burst_mode = DISABLE;

    lcd_init_struct.nwait_polarity = EXMC_NWAIT_POLARITY_LOW;

    lcd_init_struct.burst_mode = DISABLE;

    lcd_init_struct.databus_width = EXMC_NOR_DATABUS_WIDTH_16B;

    lcd_init_struct.memory_type = EXMC_MEMORY_TYPE_SRAM;

    lcd_init_struct.address_data_mux = DISABLE;

    lcd_init_struct.read_write_timing = &lcd_timing_init_struct;

    lcd_init_struct.write_timing = &lcd_timing_init_struct;


    exmc_norsram_init(&lcd_init_struct);


    exmc_norsram_enable(EXMC_BANK0_NORSRAM_REGION0);

}

3.2、lcd.c


#include 'gd32f4xx.h'

#include 'ili9320.h'

#include 'ili9320_font.h'

#include 'systick.h'

#include < stdio.h >


/*!

    brief      write data to the selected LCD register

    param[in]  register_id: the selected register id

    param[in]  value: the register value to be written

    param[out] none

    retval     none

*/


void lcd_register_write(uint16_t register_id,uint16_t value)

{

    *(__IO uint16_t *) (BANK0_LCD_C)= register_id;

    *(__IO uint16_t *) (BANK0_LCD_D)= value;

}


/*!

    brief      read the value of LCD register

    param[in]  register_id: the register id

    param[out] none

    retval     the register value

*/

uint16_t lcd_register_read(uint8_t register_id)

{

    uint16_t data;

    *(__IO uint16_t *) (BANK0_LCD_C)= register_id;

    data = *(__IO uint16_t *) (BANK0_LCD_D); 

    return  data;

}


/*!

    brief      write command to LCD register

    param[in]  value: the register value to be written

    param[out] none

    retval     none

*/

void lcd_command_write(uint16_t value)

{

    /* write 16-bit index, then write reg */

    *(__IO uint16_t *) (BANK0_LCD_D) = value;

}


/*!

    brief      prepare to write to the LCD GRAM register(R22h)

    param[in]  none

    param[out] none

    retval     none

*/

void lcd_gram_write_prepare(void)

{

    *(__IO uint16_t *) (BANK0_LCD_C) = 0x0022;

}


/*!

    brief      write RGB code to the LCD GRAM register

    param[in]  rgb_code: the pixel color in RGB mode (5-6-5)

    param[out] none

    retval     none

*/

void lcd_gram_write(uint16_t rgb_code)

{

    /* write 16-bit GRAM register */

    *(__IO uint16_t *) (BANK0_LCD_D) = rgb_code;

}


/*!

    brief      read data from GRAM

    param[in]  none

    param[out] none

    retval     GRAM value

*/

uint16_t lcd_gram_read(void)

{

  uint16_t data;

    

  /* write GRAM register (R22h) */

  *(__IO uint16_t *) (BANK0_LCD_C) = 0x0022;

  /* dummy read (invalid data) */

  *(__IO uint16_t *) (BANK0_LCD_D); 


  data = *(__IO uint16_t *) (BANK0_LCD_D); 

  return data;

}


/*!

    brief      initialize the LCD

    param[in]  none

    param[out] none

    retval     none

*/

void lcd_init(void)

{

        uint16_t i;

        uint16_t device_code;

    

        rcu_periph_clock_enable(RCU_GPIOD);

    

    gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3|GPIO_PIN_6);

        gpio_bit_set(GPIOD, GPIO_PIN_3);

    

        gpio_bit_set(GPIOD, GPIO_PIN_6);

        

        gpio_bit_reset(GPIOD, GPIO_PIN_6);

        delay_1ms(200);    

      gpio_bit_set(GPIOD, GPIO_PIN_6);

      delay_1ms(200); 

    

    if(1){    /*!< if(device_code == 0x8989) */

        lcd_register_write(0x0000,0x0001);

        lcd_register_write(0x0003,0xA8A4);

        lcd_register_write(0x000C,0x0000);

        lcd_register_write(0x000D,0x080C);

        lcd_register_write(0x000E,0x2B00);

        lcd_register_write(0x001E,0x00B0);

        lcd_register_write(0x0001,0x2B3F);

        lcd_register_write(0x0002,0x0600);

        lcd_register_write(0x0010,0x0000);

        lcd_register_write(0x0011,0x6070);

        lcd_register_write(0x0005,0x0000);

        lcd_register_write(0x0006,0x0000);

        lcd_register_write(0x0016,0xEF1C);

        lcd_register_write(0x0017,0x0003);

        lcd_register_write(0x0007,0x0233);

        lcd_register_write(0x000B,0x0000);

        lcd_register_write(0x000F,0x0000);

        lcd_register_write(0x0041,0x0000);

        lcd_register_write(0x0042,0x0000);

        lcd_register_write(0x0048,0x0000);

        lcd_register_write(0x0049,0x013F);

        lcd_register_write(0x004A,0x0000);

        lcd_register_write(0x004B,0x0000);

        lcd_register_write(0x0044,0xEF00);

        lcd_register_write(0x0045,0x0000);

        lcd_register_write(0x0046,0x013F);

        lcd_register_write(0x0030,0x0707);

        lcd_register_write(0x0031,0x0204);

        lcd_register_write(0x0032,0x0204);

        lcd_register_write(0x0033,0x0502);

[1] [2] [3]
引用地址:【GD32F427開發板試用】EXMC方式驅動LCD屏幕

上一篇:GD32F310開發板串口的數據接收與數字自動轉換
下一篇:關于GD32F450VE的氣象數據采集器的性能分析和應用

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 新和县| 六盘水市| 应用必备| 宣武区| 怀安县| 庄河市| 湖北省| 宁国市| 宣化县| 玉环县| 株洲县| 青神县| 页游| 兴城市| 浦县| 乐山市| 上高县| 通城县| 宣汉县| 巴青县| 大荔县| 兰坪| 沧州市| 辛集市| 赤峰市| 依兰县| 海安县| 安图县| 葫芦岛市| 遂昌县| 怀安县| 玛多县| 横山县| 娄底市| 淄博市| 龙南县| 哈尔滨市| 通化县| 贡嘎县| 萍乡市| 扎鲁特旗|