TA的每日心情 | 奋斗 2023-5-10 20:09 |
---|
签到天数: 1742 天 连续签到: 1 天 [LV.Master]伴坛终老
|
最为以最小系统面目出现的GD32F450开发板,若不为它配上一个合适的显示器件用起来将是一个比较棘手的事。
起初是使用老套路将I2C接口的双色OLED屏点亮,尝试了许多次没如意,只得暂时放弃,看起来GD32F450与GD32F190相差还是比较大,无奈只好先改为LCD5110屏。
LCD5110屏还是比较好用的,且大家用的也比较多,具有实用价值。为了减少连线,这里采用的方式比较简便,就是直接将LCD5110屏插入开发板的插排上,以使LCD5110屏的引脚与GD32F450建立如下的连接:
2--GND--GND 3--SCE--PE2 4--RESET--PE5 5--D/C--PE6 6--SDIN--PE4
7--SCLK--PD0 8--LED--PD1
令人吐槽的是为什么宁愿空出一个引脚也不在该位置提供一个3.3V的VDD,无奈只好飞一条电源线以使LCD5110工作,详见下图所示。
为使LCD5110正常运行,相应的引脚输出高、低电平的定义如下:
#define sce_1 gpio_bit_set(GPIOE, GPIO_PIN_2);#define sce_0 gpio_bit_reset(GPIOE, GPIO_PIN_2);#define dc_1 gpio_bit_set(GPIOE, GPIO_PIN_6);#define dc_0 gpio_bit_reset(GPIOE, GPIO_PIN_6);#define RST_1 gpio_bit_set(GPIOE, GPIO_PIN_5);#define RST_0 gpio_bit_reset(GPIOE, GPIO_PIN_5);#define LCD_SCLK_1 gpio_bit_set(GPIOD, GPIO_PIN_0);#define LCD_SCLK_0 gpio_bit_reset(GPIOD, GPIO_PIN_0);#define LCD_SDIN_1 gpio_bit_set(GPIOE, GPIO_PIN_4);#define LCD_SDIN_0 gpio_bit_reset(GPIOE, GPIO_PIN_4);
对引脚的配置函数如下:
void SPI_CONFIG(){ rcu_periph_clock_enable(RCU_GPIOE); gpio_mode_set (GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_2| GPIO_PIN_5| GPIO_PIN_6| GPIO_PIN_4); gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_2| GPIO_PIN_5| GPIO_PIN_6| GPIO_PIN_4); rcu_periph_clock_enable(RCU_GPIOD); gpio_mode_set (GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0| GPIO_PIN_1); gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_0| GPIO_PIN_1); GPIO_BOP(GPIOD) = GPIO_PIN_1; RST_0; delay(100); RST_1; delay(100); RST_0; delay(100); RST_1; delay(100);}
对应的初始化函数如下:
void LCD_init(void){ LCD_write_byte(0x21,0);//???Lcd,?????????? LCD_write_byte(0xc3,0);//???????? LCD_write_byte(0x10, 0); // 1:48 LCD_write_byte(0x20,0);//?????? LCD_write_byte(0x0C,0);//??????,???? LCD_clear();}
在字符库及相关函数的配合下,使用如下的主函数即可得到图示的显示效果。
int main(void){ SPI_CONFIG(); LCD_init(); LCD_write_english_string(0,0,"GD32 Colibri- ",0); LCD_write_english_string(0,1," - F450VE",0); LCD_write_english_string(0,3,"ARM Cortex-M4",0); LCD_write_english_string(0,5," 2017.4.20",0); LED_Init(); rcu_periph_clock_enable(RCU_GPIOB); gpio_mode_set (GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4); gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_4); GPIO_BOP(GPIOB) = GPIO_PIN_4; while (1);} |
|