OpenEdv-开源电子网

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

关于使用7脚OLED屏幕遇到的诡异现象

[复制链接]

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2019-10-22
在线时间
46 小时
发表于 2020-9-22 13:50:30 | 显示全部楼层 |阅读模式
1金钱
事情是这样的,我自己画了一个STM32F103RCT6的板子,有关OLED的IO连接如下:
D0  -> PB3

D1  -> PB5

RES -> PD2

DC  -> PC12

CS  -> PC11
端口宏定义:
#define OLED_SCL_Clr() GPIOB->BRR = GPIO_Pin_3//CLK
#define OLED_SCL_Set() GPIOB->BSRR = GPIO_Pin_3

#define OLED_SDA_Clr() GPIOB->BRR = GPIO_Pin_5///DIN
#define OLED_SDA_Set() GPIOB->BSRR = GPIO_Pin_5

#define OLED_RES_Clr() GPIOD->BRR = GPIO_Pin_2///RES
#define OLED_RES_Set() GPIOD->BSRR = GPIO_Pin_2

#define OLED_DC_Clr() GPIOC->BRR = GPIO_Pin_12//DC
#define OLED_DC_Set() GPIOC->BSRR = GPIO_Pin_12
              
#define OLED_CS_Clr()  GPIOC->BRR = GPIO_Pin_11//CS
#define OLED_CS_Set()  GPIOC->BSRR = GPIO_Pin_11

板子到手焊接完成后发现OLED点不亮,尝试搜索各种资料仍然无法解决。
有关IO的初始化代码如下(基于中景园的资料例程改的)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    GPIO_InitTypeDef  GPIO_InitStructure;
   
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD/*|RCC_APB2Periph_AFIO*/, ENABLE);     //使能端口时钟
                                                                                                                                         //AFIO的问题请继续往下看
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
     GPIO_Init(GPIOB, &GPIO_InitStructure);     
     GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_3);
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_11;
     GPIO_Init(GPIOC, &GPIO_InitStructure);     
     GPIO_SetBits(GPIOC,GPIO_Pin_12|GPIO_Pin_11);
   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
     GPIO_Init(GPIOD, &GPIO_InitStructure);     
     GPIO_SetBits(GPIOD,GPIO_Pin_2);

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
然后神奇的事情发生了,我把串口1初始化之后,屏  幕  它  亮  了!
我想到我的串口使用了部分重映象,仔细一看串口的那部分代码
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
猜想是AFIO的问题,果然,把AFIO时钟的使能去掉后屏幕就不亮了

最大的问题:如果我不用串口,在OLED的IO时钟使能的时候,如果在那里一起把AFIO使能了,屏幕它就又不亮了

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO, ENABLE);

上面的初始化程序时钟使能部分这么写并同时注释掉main函数里的串口初始化的话,屏幕就不亮。
总结:在串口那里使能AFIO,行。
         在OLED初始化这里使能AFIO,不行......
这到底是哪里出了问题





OLED的IO连接

OLED的IO连接

最佳答案

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

你的PB3,PB4在JTAG默认接口上,你得先关闭JTAG,只留下SWD,才可以正常使用这两个iO,否则这两个IO默认就是仿真器用的。 具体代码可以参考下我们mini板的例程,液晶屏实验之类的,都有用到PB3,PB4,都有先关闭JTAG
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-9-22 13:50:31 | 显示全部楼层
你的PB3,PB4在JTAG默认接口上,你得先关闭JTAG,只留下SWD,才可以正常使用这两个iO,否则这两个IO默认就是仿真器用的。
具体代码可以参考下我们mini板的例程,液晶屏实验之类的,都有用到PB3,PB4,都有先关闭JTAG
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2019-10-22
在线时间
46 小时
 楼主| 发表于 2020-9-23 22:01:31 | 显示全部楼层
关了的,初始化代码一上来就关了的,问题在于AFIO的使能扔到串口那里就能点亮,扔到OLED的初始化就不行0.0
回复

使用道具 举报

4

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2019-10-22
在线时间
46 小时
 楼主| 发表于 2020-9-23 22:03:03 | 显示全部楼层
正点原子 发表于 2020-9-22 13:50
你的PB3,PB4在JTAG默认接口上,你得先关闭JTAG,只留下SWD,才可以正常使用这两个iO,否则这两个IO默认就是 ...

关了JTAG的,一上来就把JTAG关了,现在问题是在串口的代码部分使能AFIO可以把屏幕点亮,但是在OLED初始化的代码那里使能AFIO就不行
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-16 20:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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