OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 16464|回复: 16

还是关于ST7567 12848无法点亮的问题请教原子兄和各位坛友

[复制链接]

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-12-23
在线时间
32 小时
发表于 2014-3-22 10:20:29 | 显示全部楼层 |阅读模式
按照您昨天的提示我用示波器测试了SPI的MOSI口是正常的,其他的几个接口在示波器上的显示也和程序的控制相同,但是有三个脚有一些疑问搜西安第一个是VG通过一个电容接地,然后是xvoin脚和vout脚这两个脚之间用一个电容相连,用示波器测试后没有反应,不知道是不是因为我初始化不成功所以这些脚都没有上电。下面是我的lcd的接线图和关键代码

再加一个我的ST7567手册上的初始化时序图




首先是GPIO和SPI的初始化

    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
    //对应的SCK、MOSI为AF引脚
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    //液晶初始化I/O口
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
4.5脚是用来控制RST和RS的,13,15脚分别是CLK和MOSI,12是片选,采用的SPI2,这个地方不知道Mode设置正不正确,这是我写SPI读写SD卡的时候的写法,当时读写SD卡是成功的。

接下来是SPI初始化的代码
  SPI_InitTypeDef  SPI_InitStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,  ENABLE);
  SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI2, &SPI_InitStructure); 
  SPI_Cmd(SPI2, ENABLE);
CPOL和CPHA我对比过ST7567的时序图,是1和1,坛子里有朋友说SPIder速度不要太快我原来设置成2后来改了不少值都不行
然后是LCD初始化的代码,我按照手册上的顺序写的
    LCD_RST_SET;
    LCD_RST_RESET;        /*低电平复位*/
    delay(50);
    LCD_RST_SET ;            /*复位完毕*/       
    Lcdwritecom(0xe2);     /*软复位*/

    Lcdwritecom(0xa3);  /*1/7偏压比(bias)*/
    Lcdwritecom(0xa0);  /*列扫描顺序:从左到右*/
    Lcdwritecom(0xc8);  /*行扫描顺序:从上到下*/
    Lcdwritecom(0xa4);    //设置显示正常:a4正常显示,a5整个显示
    Lcdwritecom(0xa6); 
    Lcdwritecom(0x27);  /*粗调对比度,可设置范围0x20~0x27*/
    Lcdwritecom(0x20);  /*0x20,微调对比度的值,可设置范围0x00~0x3f*/
    Lcdwritecom(0x81);  /*微调对比度,进入微调对比度命令*/
    Lcdwritecom(0x2f);  /*升压*/
    Lcdwritecom(0x40);  /*起始行:第一行开始*/
    Lcdwritecom(0xaf);  /*开显示*/
网上有人说上电后要等外设准备好再初始化,在main函数的lcd初始化之前加了个延时,没什么效果!
最后是写命令的函数
void Lcdwritecom(uint8_t com)
{
    LCD_CS_RESET;
    LCD_RS_RESET;        //设置为写命令
    SPI_SendData(com);
    LCD_CS_SET; 
}
void SPI_SendData(uint8_t byte)
{
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);  
  SPI_I2S_SendData(SPI2, byte);
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-12-23
在线时间
32 小时
 楼主| 发表于 2014-3-22 14:32:38 | 显示全部楼层
没有人能给一点点建议吗?自己顶起来
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-22 15:16:50 | 显示全部楼层
没用过,我昨天的建议是你读写一个寄存器,看看可否正常? 不单单是测试MOSI波形这么简单
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-22 16:34:32 | 显示全部楼层
先将你的SPI底层调通再说
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-12-23
在线时间
32 小时
 楼主| 发表于 2014-3-24 09:30:27 | 显示全部楼层
我想请教一下什么才算调通了?示波器能测到算吗?我的lcd是串行模式的只有数据脚只有d6,d7,d6做时钟信号脚,d7做SDA,我的SPI是在原来的程序中用作SD考数据传送的,SD卡勇者斗没有问题,不应该是SPI没有调通吧
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-24 12:08:42 | 显示全部楼层
回复【5楼】csf4824521:
---------------------------------
就是你可以读写ST7567的寄存器,那就算成功。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-12-23
在线时间
32 小时
 楼主| 发表于 2014-3-24 15:26:23 | 显示全部楼层
我这个LCD是SPI的只能写数据不能读,这是液晶带的资料上的一句话“在这种模式下,读数据功能不可用(意味着SPI模式下,只能向LCD写数据)。”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-4-4
在线时间
0 小时
发表于 2014-4-4 12:12:44 | 显示全部楼层
我也是用的spi, 测了下时序是对的。LCD上电后一直亮着,但是写什么命令都没反应。请问你是怎么解决的啊?
回复 支持 反对

使用道具 举报

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-12-23
在线时间
32 小时
 楼主| 发表于 2014-4-7 17:33:03 | 显示全部楼层
前两天放假休息了,一段时间以来都是向坛子里的大哥们伸手的,今天也献丑把自己的ST7567的LCD代码拿出来,给大家参考一下,我的是12848的液晶屏,楼上的兄弟先看看你的手册,如果LCD初始化成功会有一个脚有6~8V的电压的(我的是VOut脚),你先看看是不是初始化没有成功,如果成功了调试一下对比度,片选写在读和写函数里就可以了,并且我的代码在关片选之前必须要来一个延时,不然初始化不成功,就这个延时让我摸索了好几天。

SPI2驱动LCD12848基于ST7567.zip

2.85 MB, 下载次数: 4805

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-7 22:25:57 | 显示全部楼层
回复【9楼】csf4824521:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-3-5
在线时间
0 小时
发表于 2015-3-5 16:54:28 | 显示全部楼层
回复【9楼】csf4824521:
---------------------------------
看了你的代码,想问下你代码里中文字符取模是怎么取得??我用取模软件后设置了好几种都没有得到你的软件里的中文字符的模
回复 支持 反对

使用道具 举报

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-12-23
在线时间
32 小时
 楼主| 发表于 2015-3-12 14:01:37 | 显示全部楼层
回复【11楼】elysium88:
---------------------------------
我也是找的一款软件,可以按LCD比例显示出汉字,然后我根据我的需要修改了一下点的位置,计算之后,然后把值写上去的,直接用软件算出来的值没有办法正常显示
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2016-3-10
在线时间
1 小时
发表于 2016-3-10 13:08:44 | 显示全部楼层
感谢分享经验,因为货源的关系准备把OLED改成LCD了
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2017-11-14
在线时间
8 小时
发表于 2019-1-7 19:09:38 | 显示全部楼层
请问片选能不能直接接低?
回复 支持 反对

使用道具 举报

46

主题

200

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1127
金钱
1127
注册时间
2016-3-25
在线时间
365 小时
发表于 2019-1-8 20:59:07 | 显示全部楼层
看了你的代码,和我之前犯了同一个错误,我因为这个错误,误以为OLED不能用硬件SPI来驱动,而且淘宝上提供的都是GPIO模拟SPI来驱动的。折磨了我好几天,都怀疑人生了。不知道你解决没有?
代写STM32各类驱动,DEMO程序
回复 支持 反对

使用道具 举报

46

主题

200

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1127
金钱
1127
注册时间
2016-3-25
在线时间
365 小时
发表于 2019-1-8 20:59:28 | 显示全部楼层
看了你的代码,和我之前犯了同一个错误,我因为这个错误,误以为OLED不能用硬件SPI来驱动,而且淘宝上提供的都是GPIO模拟SPI来驱动的。折磨了我好几天,都怀疑人生了。不知道你解决没有?
代写STM32各类驱动,DEMO程序
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-4-18
在线时间
4 小时
发表于 2020-9-9 10:37:22 | 显示全部楼层
ST7567的代码不是可以用ST7565进行替换的吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-17 10:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表