初级会员

- 积分
- 178
- 金钱
- 178
- 注册时间
- 2019-10-22
- 在线时间
- 46 小时
|
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连接
最佳答案
查看完整内容[请看2#楼]
你的PB3,PB4在JTAG默认接口上,你得先关闭JTAG,只留下SWD,才可以正常使用这两个iO,否则这两个IO默认就是仿真器用的。
具体代码可以参考下我们mini板的例程,液晶屏实验之类的,都有用到PB3,PB4,都有先关闭JTAG
|