- gpio_init_t x;
- exti_init_t exti;
- x.mode = GPIO_MODE_OUTPUT;
- x.odos = GPIO_PUSH_PULL;
- x.pupd = GPIO_PUSH_UP;
- x.odrv = GPIO_OUT_DRIVE_NORMAL;
- x.flt = GPIO_FILTER_DISABLE;
- x.type = GPIO_TYPE_TTL;
- x.func = GPIO_FUNC_1;
- /* Enable spi flash cs set */
- ald_gpio_init(GPIOE, GPIO_PIN_0, &x);
- ald_gpio_write_pin(GPIOE, GPIO_PIN_0, 1);
- /* PE14 -> CS_LCD */
- ald_gpio_init(GPIOE, GPIO_PIN_15, &x);
- ald_gpio_write_pin(GPIOE, GPIO_PIN_15, 1);
- /* PC13 -> RST */
- ald_gpio_init(GPIOC, GPIO_PIN_13, &x);
- ald_gpio_write_pin(GPIOC, GPIO_PIN_13, 1);
- /* PE3 -> DC */
- ald_gpio_init(GPIOE, GPIO_PIN_3, &x);
- ald_gpio_write_pin(GPIOE, GPIO_PIN_3, 1);
- /* PE14 -> CS_PEN */
- ald_gpio_init(GPIOE, GPIO_PIN_14, &x);
- ald_gpio_write_pin(GPIOE, GPIO_PIN_14, 1);
- /* PB15 MOSI INIT */
- x.func = GPIO_FUNC_4;
- ald_gpio_init(GPIOB, GPIO_PIN_15, &x);
- /* PB13 SCK INIT */
- x.func = GPIO_FUNC_4;
- ald_gpio_init(GPIOB, GPIO_PIN_13, &x);
- /* PB14 MISO INIT */
- /* MISO Initializes */
- x.mode = GPIO_MODE_INPUT;
- x.pupd = GPIO_PUSH_UP;
- x.odrv = GPIO_OUT_DRIVE_NORMAL;
- x.flt = GPIO_FILTER_DISABLE;
- x.type = GPIO_TYPE_TTL;
- x.func = GPIO_FUNC_4;
- ald_gpio_init(GPIOB, GPIO_PIN_14, &x);
- /* PE7--> PEN */
- x.mode = GPIO_MODE_INPUT;
- x.odos = GPIO_PUSH_PULL;
- x.pupd = GPIO_PUSH_UP;
- x.odrv = GPIO_OUT_DRIVE_NORMAL;
- x.flt = GPIO_FILTER_DISABLE;
- x.type = GPIO_TYPE_TTL;
- x.func = GPIO_FUNC_1;
- ald_gpio_init(GPIOE, GPIO_PIN_7, &x);
其中使用的引脚有(8个):
输出类:PE15 -> CS_LCD(屏幕片选); PC13 -> RST(复位);PE3 -> DC(数据\命令);PE14 -> CS_PEN(触控片选);PB15 -> MOSI (SPI 输出);PB13 -> SCK (SPI 时钟);
输入类:PB14 -> MISO (SPI 输入);PE7 -> PEN(触控检测);
查找PDS开发板原理图,结合数据手册内容,我们选择 PA5、PA6、PA7这路硬件SPI0,预计使用的引脚如下:
输出类:PA01 -> CS_LCD(屏幕片选); PA03 -> RST(复位);PA04 -> DC(数据\命令);PC00 -> CS_PEN(触控片选);PA7 -> MOSI (SPI 输出);PA5 -> SCK (SPI 时钟);
输入类:PA6 -> MISO (SPI 输入);PC02 -> PEN(触控检测);
修改后的引脚初始化的代码如下:
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] lcd initialize.
- * @param display: display structure.
- * @retval None
- */
- static void oled_init(bsp_display_env_t *display)
- {
- gpio_init_t x;
- exti_init_t exti;
- x.mode = GPIO_MODE_OUTPUT;
- x.odos = GPIO_PUSH_PULL;
- x.pupd = GPIO_PUSH_UP;
- x.odrv = GPIO_OUT_DRIVE_NORMAL;
- x.flt = GPIO_FILTER_DISABLE;
- x.type = GPIO_TYPE_TTL;
- x.func = GPIO_FUNC_1;
- /* Enable spi flash cs set */
- //ald_gpio_init(GPIOE, GPIO_PIN_0, &x);
- //ald_gpio_write_pin(GPIOE, GPIO_PIN_0, 1);
- /* PA1 -> CS_LCD */
- ald_gpio_init(GPIOA, GPIO_PIN_1, &x);
- ald_gpio_write_pin(GPIOA, GPIO_PIN_1, 1);
- /* PA3 -> RST */
- ald_gpio_init(GPIOA, GPIO_PIN_3, &x);
- ald_gpio_write_pin(GPIOA, GPIO_PIN_3, 1);
- /* PA4 -> DC */
- ald_gpio_init(GPIOA, GPIO_PIN_4, &x);
- ald_gpio_write_pin(GPIOA, GPIO_PIN_4, 1);
- /* PC0 -> CS_PEN */
- ald_gpio_init(GPIOC, GPIO_PIN_0, &x);
- ald_gpio_write_pin(GPIOC, GPIO_PIN_0, 1);
- /* PA7 MOSI INIT */
- x.func = GPIO_FUNC_6;
- ald_gpio_init(GPIOA, GPIO_PIN_7, &x);
- /* PA5 SCK INIT */
- x.func = GPIO_FUNC_6;
- ald_gpio_init(GPIOA, GPIO_PIN_5, &x);
- /* PA6 MISO INIT */
- /* MISO Initializes */
- x.mode = GPIO_MODE_INPUT;
- x.pupd = GPIO_PUSH_UP;
- x.odrv = GPIO_OUT_DRIVE_NORMAL;
- x.flt = GPIO_FILTER_DISABLE;
- x.type = GPIO_TYPE_TTL;
- x.func = GPIO_FUNC_6;
- ald_gpio_init(GPIOA, GPIO_PIN_6, &x);
- /* PC2--> PEN */
- x.mode = GPIO_MODE_INPUT;
- x.odos = GPIO_PUSH_PULL;
- x.pupd = GPIO_PUSH_UP;
- x.odrv = GPIO_OUT_DRIVE_NORMAL;
- x.flt = GPIO_FILTER_DISABLE;
- x.type = GPIO_TYPE_TTL;
- x.func = GPIO_FUNC_1;
- ald_gpio_init(GPIOC, GPIO_PIN_2, &x);
- /* Initialize external interrupt */
- exti.filter = ENABLE;
- exti.cks = EXTI_FILTER_CLOCK_32K;
- exti.filter_time = 100;
- ald_gpio_exti_init(GPIOC, GPIO_PIN_2, &exti);
- ald_gpio_exti_clear_flag_status(GPIO_PIN_2);
- ald_gpio_exti_interrupt_config(GPIO_PIN_2, EXTI_TRIGGER_TRAILING_EDGE, ENABLE);
- ald_mcu_irq_config(EXTI0_3_IRQn, 3, DISABLE);
- display->h_spi.perh = SPI0;
- display->h_spi.init.mode = SPI_MODE_MASTER;
- display->h_spi.init.dir = SPI_DIRECTION_2LINES;
- display->h_spi.init.data_size = SPI_DATA_SIZE_8;
- display->h_spi.init.baud = SPI_BAUD_8;
- display->h_spi.init.phase = SPI_CPHA_FIRST;
- display->h_spi.init.polarity = SPI_CPOL_LOW;
- display->h_spi.init.first_bit = SPI_FIRSTBIT_MSB;
- display->h_spi.init.ss_en = DISABLE;
- display->h_spi.init.crc_calc = DISABLE;
- display->h_spi.tx_cplt_cbk = spi_tx_cbk;
- ald_spi_init(&display->h_spi);
- //lcd³õʼ»¯
- OLED_CS_CLR();
- OLED_RST_CLR();
- ald_delay_ms(20);
- OLED_RST_SET();
- ald_delay_ms(20);
- //************* Start Initial Sequence **********//
- lcd_wr_reg(display, 0xCF);
- lcd_wr_data8(display, 0x00);
- lcd_wr_data8(display, 0xD9);
- lcd_wr_data8(display, 0x30);
- lcd_wr_reg(display, 0xED);
- lcd_wr_data8(display, 0x64);
- lcd_wr_data8(display, 0x03);
- lcd_wr_data8(display, 0X12);
- lcd_wr_data8(display, 0X81);
- lcd_wr_reg(display, 0xE8);
- lcd_wr_data8(display, 0x85);
- lcd_wr_data8(display, 0x10);
- lcd_wr_data8(display, 0x78);
- lcd_wr_reg(display, 0xCB);
- lcd_wr_data8(display, 0x39);
- lcd_wr_data8(display, 0x2C);
- lcd_wr_data8(display, 0x00);
- lcd_wr_data8(display, 0x34);
- lcd_wr_data8(display, 0x02);
- lcd_wr_reg(display, 0xF7);
- lcd_wr_data8(display, 0x20);
- lcd_wr_reg(display, 0xEA);
- lcd_wr_data8(display, 0x00);
- lcd_wr_data8(display, 0x00);
- lcd_wr_reg(display, 0xC0);
- lcd_wr_data8(display, 0x21);
- lcd_wr_reg(display, 0xC1);
- lcd_wr_data8(display, 0x12);
- lcd_wr_reg(display, 0xC5);
- lcd_wr_data8(display, 0x32);
- lcd_wr_data8(display, 0x3C);
- lcd_wr_reg(display, 0xC7);
- lcd_wr_data8(display, 0xC1);
- lcd_wr_reg(display, 0x36);
- lcd_wr_data8(display, 0x08);
- lcd_wr_reg(display, 0x3A);
- lcd_wr_data8(display, 0x55);
- lcd_wr_reg(display, 0xB1);
- lcd_wr_data8(display, 0x00);
- lcd_wr_data8(display, 0x18);
- lcd_wr_reg(display, 0xB6);
- lcd_wr_data8(display, 0x0A);
- lcd_wr_data8(display, 0xA2);
- lcd_wr_reg(display, 0xF2);
- lcd_wr_data8(display, 0x00);
- lcd_wr_reg(display, 0x26);
- lcd_wr_data8(display, 0x01);
- lcd_wr_reg(display, 0xE0);
- lcd_wr_data8(display, 0x0F);
- lcd_wr_data8(display, 0x20);
- lcd_wr_data8(display, 0x1E);
- lcd_wr_data8(display, 0x09);
- lcd_wr_data8(display, 0x12);
- lcd_wr_data8(display, 0x0B);
- lcd_wr_data8(display, 0x50);
- lcd_wr_data8(display, 0XBA);
- lcd_wr_data8(display, 0x44);
- lcd_wr_data8(display, 0x09);
- lcd_wr_data8(display, 0x14);
- lcd_wr_data8(display, 0x05);
- lcd_wr_data8(display, 0x23);
- lcd_wr_data8(display, 0x21);
- lcd_wr_data8(display, 0x00);
- lcd_wr_reg(display, 0xE1);
- lcd_wr_data8(display, 0x00);
- lcd_wr_data8(display, 0x19);
- lcd_wr_data8(display, 0x19);
- lcd_wr_data8(display, 0x00);
- lcd_wr_data8(display, 0x12);
- lcd_wr_data8(display, 0x07);
- lcd_wr_data8(display, 0x2D);
- lcd_wr_data8(display, 0x28);
- lcd_wr_data8(display, 0x3F);
- lcd_wr_data8(display, 0x02);
- lcd_wr_data8(display, 0x0A);
- lcd_wr_data8(display, 0x08);
- lcd_wr_data8(display, 0x25);
- lcd_wr_data8(display, 0x2D);
- lcd_wr_data8(display, 0x0F);
- lcd_wr_reg(display, 0x11);
- ald_delay_ms(120);
- lcd_wr_reg(display, 0x29);
- bsp_tp_init(display);
- }
这边要注意一点,对应的bsp_display.h中的一些宏定义,也要做如下修改:- #define OLED_CS_CLR() ald_gpio_write_pin(GPIOA, GPIO_PIN_1, 0);\
- ald_gpio_write_pin(GPIOC, GPIO_PIN_0, 1)
- #define OLED_CS_SET() ald_gpio_write_pin(GPIOA, GPIO_PIN_1, 1);\
- ald_gpio_write_pin(GPIOC, GPIO_PIN_0, 0)
- #define TOUCH_CS_Clr() ald_gpio_write_pin(GPIOC, GPIO_PIN_0, 0);\
- ald_gpio_write_pin(GPIOA, GPIO_PIN_1, 1)
- #define TOUCH_CS_Set() ald_gpio_write_pin(GPIOC, GPIO_PIN_0, 1);\
- ald_gpio_write_pin(GPIOA, GPIO_PIN_1, 0)
- #define OLED_RST_CLR() ald_gpio_write_pin(GPIOA, GPIO_PIN_3, 0)
- #define OLED_RST_SET() ald_gpio_write_pin(GPIOA, GPIO_PIN_3, 1)
- #define OLED_DC_CLR() ald_gpio_write_pin(GPIOA, GPIO_PIN_4, 0)
- #define OLED_DC_SET() ald_gpio_write_pin(GPIOA, GPIO_PIN_4, 1)
修改完成后,点击编译、下载,接着只需按下板子上的复位按键就可以刷屏了
然鹅~
并没有看到意料中的LOG和 “Hello Word” 字样。
到底哪边出了问题
,这时候就要先抓个波形来看看(排除了供电的原因),上图:
我抓取的是SCK和MOSI这俩条线,图上只有SCK的数据并没有MOSI的数据。
稍加思索
Q1:难道是引脚配错了?
我打开了 ES32F0654LT的数据手册和PDS板的原理图,结合修改的代码,仔细的对了一遍,发现自己的引脚配置并没有错。
Q2:接线接错了?
仔细对照原理图,把所有的线都重插了一遍,还是有问题。
Q3:是显示屏坏了?
接着我又换了另外一个屏幕,还是同样有问题。
Q4: 杜邦线的问题(这个一开始没怀疑,概率有点低)?
换了根MOSI的杜邦线,结果就可以了。
O(∩_∩)O哈哈~ 屏幕可以正常显示了
本帖算是对 东软载波ESF0654 PDS开发板的一个初步了解,只用到了SPI一个简单的外设,一些特色外设如CAN等以后再慢慢挖掘。
----------END----------