OpenEdv-开源电子网

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

OLED 不能正常运行

[复制链接]

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2014-2-11
在线时间
4 小时
发表于 2015-6-27 00:30:15 | 显示全部楼层 |阅读模式
5金钱
最近在学习OLED的SPI4线传输
主控:STM32F103C8T6
OLED:1.3寸OLED,7管脚(GND,VCC,CLK,MOSI,RES,DC,CS);

目前情况:改写原子哥mini板程序,不能运行。


                                                                                            图一
接线方式:
CLK ------>A5 SPI1_CLK
MOSI----->A7 SPI1_MOSI
RES ------>A1
DC ------->A6 SPI1_MISO
CS ------->A4 SPI_NSS

[mw_shl_code=c,true]void OLED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //???ì???? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD ; //???ì???? GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_Write(GPIOB,0X03); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //???ì???? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_4); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //?è??SPI???ò?ò?????ò??????????:SPI?è???????????ò?????¤ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //?è??SPI?¤×÷????:?è?????÷SPI SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //?è??SPI???????ó??:SPI·???????8?????á?? SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //???????®???±????????:?±???ü???? SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //?????????????????±???? SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS???????????¨NSS?????©?????í???¨????SSI???©???í:????NSS??????SSI?????? SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //?¨???¨?????¤·???????:?¨?????¤·???????256 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //???¨??????????MSB??????LSB??????:??????????MSB?????? SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC?????????à???? SPI_Init(SPI1, &SPI_InitStructure); //?ù??SPI_InitStruct?????¨???????????????èSPIx?????÷ SPI_Cmd(SPI1, ENABLE); //????SPI???è // SPIx_ReadWriteByte(0xff);//???????? #endif OLED_WR_Byte(0xAE,OLED_CMD); //??±????? OLED_WR_Byte(0xD5,OLED_CMD); //?è???±??·????ò×?,???????? OLED_WR_Byte(80,OLED_CMD); //[3:0],·????ò×?;[7:4],???????? OLED_WR_Byte(0xA8,OLED_CMD); //?è???????·?? OLED_WR_Byte(0X3F,OLED_CMD); //????0X3F(1/64) OLED_WR_Byte(0xD3,OLED_CMD); //?è?????????? OLED_WR_Byte(0X00,OLED_CMD); //??????0 OLED_WR_Byte(0x40,OLED_CMD); //?è???????????? [5:0],????. OLED_WR_Byte(0x8D,OLED_CMD); //????±??è?? OLED_WR_Byte(0x14,OLED_CMD); //bit2??????/??±? OLED_WR_Byte(0x20,OLED_CMD); //?è?????????·???? OLED_WR_Byte(0x02,OLED_CMD); //[1:0],00???????·????;01???????·????;10,?????·????;????10; OLED_WR_Byte(0xA1,OLED_CMD); //?????¨???è??,bit0:0,0->0;1,0->127; OLED_WR_Byte(0xC0,OLED_CMD); //?è??COM?¨?è·??ò;bit3:0,???¨????;1,???¨?????? COM[N-1]->COM0;N:?????·?? OLED_WR_Byte(0xDA,OLED_CMD); //?è??COM???????????? OLED_WR_Byte(0x12,OLED_CMD); //[5:4]???? OLED_WR_Byte(0x81,OLED_CMD); //??±????è?? OLED_WR_Byte(0xEF,OLED_CMD); //1~255;????0X7F (?????è??,???ó????) OLED_WR_Byte(0xD9,OLED_CMD); //?è???¤???????? OLED_WR_Byte(0xf1,OLED_CMD); //[3:0],PHASE 1;[7:4],PHASE 2; OLED_WR_Byte(0xDB,OLED_CMD); //?è??VCOMH ????±??? OLED_WR_Byte(0x30,OLED_CMD); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc; OLED_WR_Byte(0xA4,OLED_CMD); //????????????;bit0:1,????;0,??±?;(°×??/????) OLED_WR_Byte(0xA6,OLED_CMD); //?è??????·???;bit0:1,·??à????;0,???????? OLED_WR_Byte(0xAF,OLED_CMD); //???????? OLED_Clear(); } [/mw_shl_code]


[mw_shl_code=c,true]#define OLED_MODE 0 //-----------------OLED?????¨??---------------- #define OLED_CS PAout(4) //#define OLED_RST PBout(14)//??MINISTM32???±????????STM32?????????? #define OLED_RS PCout(8) #define OLED_WR PCout(7) #define OLED_RD PCout(6) //PB0~7,×÷???????? //#define DATAOUT(DataValue) {GPIO_Write(GPIOB,(GPIO_ReadOutputData(GPIOB)&0xff00)|(DataValue&0x00FF));} //????4???®???????±???? #define OLED_SCLK PAout(5) #define OLED_SDIN PAout(7) #define OLED_CMD 0 //???ü?? #define OLED_DATA 1 //?????? //OLED?????????? void OLED_WR_Byte(u8 dat,u8 cmd); void OLED_Display_On(void); void OLED_Display_Off(void); void OLED_Refresh_Gram(void); void OLED_Init(void); void OLED_Clear(void); void OLED_DrawPoint(u8 x,u8 y,u8 t); void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot); void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode); void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); void OLED_ShowString(u8 x,u8 y,const u8 *p); #endif [/mw_shl_code]
这是OLED.h的文件
[mw_shl_code=c,true]void OLED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //???ì???? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD ; //???ì???? GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_Write(GPIOB,0X03); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //???ì???? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_4); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //?è??SPI???ò?ò?????ò??????????:SPI?è???????????ò?????¤ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //?è??SPI?¤×÷????:?è?????÷SPI SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //?è??SPI???????ó??:SPI·???????8?????á?? SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //???????®???±????????:?±???ü???? SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //?????????????????±???? SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS???????????¨NSS?????©?????í???¨????SSI???©???í:????NSS??????SSI?????? SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //?¨???¨?????¤·???????:?¨?????¤·???????256 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //???¨??????????MSB??????LSB??????:??????????MSB?????? SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC?????????à???? SPI_Init(SPI1, &SPI_InitStructure); //?ù??SPI_InitStruct?????¨???????????????èSPIx?????÷ SPI_Cmd(SPI1, ENABLE); //????SPI???è // SPIx_ReadWriteByte(0xff);//???????? #endif OLED_WR_Byte(0xAE,OLED_CMD); //??±????? OLED_WR_Byte(0xD5,OLED_CMD); //?è???±??·????ò×?,???????? OLED_WR_Byte(80,OLED_CMD); //[3:0],·????ò×?;[7:4],???????? OLED_WR_Byte(0xA8,OLED_CMD); //?è???????·?? OLED_WR_Byte(0X3F,OLED_CMD); //????0X3F(1/64) OLED_WR_Byte(0xD3,OLED_CMD); //?è?????????? OLED_WR_Byte(0X00,OLED_CMD); //??????0 OLED_WR_Byte(0x40,OLED_CMD); //?è???????????? [5:0],????. OLED_WR_Byte(0x8D,OLED_CMD); //????±??è?? OLED_WR_Byte(0x14,OLED_CMD); //bit2??????/??±? OLED_WR_Byte(0x20,OLED_CMD); //?è?????????·???? OLED_WR_Byte(0x02,OLED_CMD); //[1:0],00???????·????;01???????·????;10,?????·????;????10; OLED_WR_Byte(0xA1,OLED_CMD); //?????¨???è??,bit0:0,0->0;1,0->127; OLED_WR_Byte(0xC0,OLED_CMD); //?è??COM?¨?è·??ò;bit3:0,???¨????;1,???¨?????? COM[N-1]->COM0;N:?????·?? OLED_WR_Byte(0xDA,OLED_CMD); //?è??COM???????????? OLED_WR_Byte(0x12,OLED_CMD); //[5:4]???? OLED_WR_Byte(0x81,OLED_CMD); //??±????è?? OLED_WR_Byte(0xEF,OLED_CMD); //1~255;????0X7F (?????è??,???ó????) OLED_WR_Byte(0xD9,OLED_CMD); //?è???¤???????? OLED_WR_Byte(0xf1,OLED_CMD); //[3:0],PHASE 1;[7:4],PHASE 2; OLED_WR_Byte(0xDB,OLED_CMD); //?è??VCOMH ????±??? OLED_WR_Byte(0x30,OLED_CMD); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc; OLED_WR_Byte(0xA4,OLED_CMD); //????????????;bit0:1,????;0,??±?;(°×??/????) OLED_WR_Byte(0xA6,OLED_CMD); //?è??????·???;bit0:1,·??à????;0,???????? OLED_WR_Byte(0xAF,OLED_CMD); //???????? OLED_Clear(); } [/mw_shl_code]
这是OLED_INIT();

本人STM32还未入门,可能有非常多的低级错误,希望各位大神指出。不胜感激!另Q523886078,随时可以Q我,讨论。
请各位大神指教!

最佳答案

查看完整内容[请看2#楼]

你参考哪个版本的mini板 例程  参考这个改改   把相应的IO改改就行了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-6-27 00:30:16 | 显示全部楼层
你参考哪个版本的mini板 例程  参考这个改改   把相应的IO改改就行了

ALIENTEK MINISTM32 实验10 OLED显示实验.zip

324.4 KB, 下载次数: 50

回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2015-6-27 10:40:06 | 显示全部楼层
是的。改动仅仅是io口的。
还有,我们用的模拟spi方式,你用的硬件spi方式,这个你要熟悉stm32 spi才行。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2014-2-11
在线时间
4 小时
 楼主| 发表于 2015-6-28 15:56:54 | 显示全部楼层
恩,今天已经把模拟SPI控制OLED搞懂了。现在硬件OLED有问题了:
OLED连接方式
OLED                  STM32
CLK --------------->SCK
MOSI-------------->MOSI
RES --------------->A3
DC ---------------->MISO
CS ---------------->NSS



现在板子不能显示。不知道是驱动SPI的问题还是OLED的读写问题?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 19:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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