OpenEdv-开源电子网

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

关于OLED的驱动问题,求助原子哥!!!!

[复制链接]

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-11-20
在线时间
7 小时
发表于 2015-11-29 11:42:43 | 显示全部楼层 |阅读模式
5金钱
项目需要用到OLED显示,屏幕控制器是SSD1305,官方给了在51下的驱动,然后我用STM32作为处理器,8080总线驱动,
为啥总是没有反应,
代码附上,各位大神给看看
[mw_shl_code=c,true]#include "oled.h" #define DC PCout(3) #define CS PCout(6) #define RES PBout(15) #define _WR PBout(14) #define _RD PBout(13) void OLED_WR_Cmd(unsigned char cmd) { DC=0; CS=0; _WR=0; delay_us(5); GPIO_Write(GPIOD,cmd); delay_us(5); _WR=1; delay_us(5); CS=1; DC=1; } void OLED_WR_Data(unsigned char data) { DC=1; CS=0; _WR=0; delay_us(5); GPIO_Write(GPIOD,data); delay_us(5); _WR=1; delay_us(5); CS=1; DC=1; } void clear(unsigned char m) { unsigned char i,j; for(i=0;i<8;i++) { OLED_WR_Cmd(0xb0+i); //startpage(i) OLED_WR_Cmd(0x02); OLED_WR_Cmd(0x10); //startcolumn(0) for(j=0;j<128;j++) { OLED_WR_Data(m); } } } void OLED_Init(void) { /* 配置OLED使用的GPIO*/ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB, ENABLE); //使能PC,D,B端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_6; //PD3,PD6推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOD3,6 GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_6); //PD3,PD6 输出高 GPIO_InitStructure.GPIO_Pin =0xFF; //PC0~7 OUT推挽输出 GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_SetBits(GPIOD,0xFF); //PC0~7输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //PB13,14,15 OUT推挽输出 GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); /*配置OLED的控制器 官方给的驱动*/ RES=0; delay_ms(100); RES=1; delay_ms(100); OLED_WR_Cmd(0xae);/////////关显示 OLED_WR_Cmd(0xd5);/////////设定频率 OLED_WR_Cmd(0xa0); OLED_WR_Cmd(0xa8);/////设定占空比 1/32 OLED_WR_Cmd(0x3f); OLED_WR_Cmd(0xd3);////////设定显示范围 COM OLED_WR_Cmd(0x00); OLED_WR_Cmd(0x40);///////起始行 OLED_WR_Cmd(0x00); OLED_WR_Cmd(0xad);///// 内部dc-dc OLED_WR_Cmd(0x8e); OLED_WR_Cmd(0x20);/////接口方式,页方式 OLED_WR_Cmd(0x02); OLED_WR_Cmd(0xa1);/////seg 方向 132-0 OLED_WR_Cmd(0xc8);/////com 方向 63-0 OLED_WR_Cmd(0xda);////Set COM Pins Hardware Configuration OLED_WR_Cmd(0x12);/// OLED_WR_Cmd(0x81);////////////对比度调节 OLED_WR_Cmd(0x80);/////////////对比度为中 OLED_WR_Cmd(0xdb);////////////倍压调节 OLED_WR_Cmd(0x34);/////////// OLED_WR_Cmd(0xa4);////////////Entire Display ON OLED_WR_Cmd(0xa6);////////////Normal display clear(0x00); OLED_WR_Cmd(0xaf);////////////开显示 clear(0xFF); // 把整个屏幕点亮 printf("\r\n OLED Init success \r\n"); }[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-11-29 18:14:03 | 显示全部楼层
1.仔细检查引脚配置,确认配置移植没问题
2.把延时函数延时适当加长,测试通过后根据情况逐渐减少
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

12

主题

336

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1576
金钱
1576
注册时间
2015-8-9
在线时间
625 小时
发表于 2015-11-29 22:11:40 | 显示全部楼层
http://www.openedv.com/posts/list/58085.htm
这个是spi方式驱动的,程序方面没问题,可以试一下
回复

使用道具 举报

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-11-20
在线时间
7 小时
 楼主| 发表于 2015-12-1 21:01:28 | 显示全部楼层
回复【2楼】龙之谷:
------------------------------
把写命令,和写数据的函数中都延时了几个毫秒,果然好了,就是不知道为啥?是STM32主频太高了?
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-12-1 23:38:37 | 显示全部楼层
32频率是51的数倍,所以延时要进行一些调整
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 20:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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