在我的板子上,引脚对应关系和原子哥的有些不同。。
OLED_CS-PC9 OLED_RS-PC8 OLED_RW-PC7 OLED_RD-PC6 D7-PB7 D6-PB6 D5-PB5 D4-PB9 D3-PB8 D2-PB1 D1-PB0 D0-PC5 RST也接到了复位脚。
我就把IO口进行了更改。但是程序下进去之后,OLED压根就没点亮。做了更改的地方如下:
//初始化SSD1306
void OLED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB, ENABLE); //使能PC,B端口时钟
//在LY PROJECT V1.0板子上,OLED_CS-PC9,OLED_RS-PC8,OLED_RW-PC7,OLED_RD-PC6,D7-PB7,D6-PB6,D5-PB5,D4-PB9,D3-PB8,D2-PB1,D1-PB0,D0-PC5,
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; //PC8,PC9推挽输出(OLED_RS-PC8、OLED_CS-PC9)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOC8,9
GPIO_SetBits(GPIOC,GPIO_Pin_8|GPIO_Pin_9); //PC8,PC9 输出高
#if OLED_MODE==1
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7|GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_1|GPIO_Pin_0; //PB7659810(D7~D1) OUT推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_1|GPIO_Pin_0); //D7~D1输出高
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5;//PC5即D0 OUT推挽输出
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_5);//PC5即D0输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //PC6,7 OUT推挽输出(OLED_RD-PC6,OLED_RW-PC7)
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_6|GPIO_Pin_7); //PC6,7 OUT 输出高
#else
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PB0即D1 OUT推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_0); //PB0即D1 OUT 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PC5即D0 OUT推挽输出
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_5); //PC5即D0 OUT 输出高
#endif
其他地方基本没改。
int main(void)
{ u8 t;
SystemInit();
delay_init();
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
OLED_Init(); //初始化OLED
OLED_ShowString(0,0, "0.96' OLED TEST");
OLED_ShowString(0,16,"ATOM@ALIENTEK");
OLED_ShowString(0,32,"2010/06/3");
OLED_ShowString(0,48,"ASCII:");
OLED_ShowString(63,48,"CODE:");
OLED_Refresh_Gram();
t=' ';
while(1)
{
OLED_ShowChar(48,48,t,16,1);//显示ASCII字符
OLED_Refresh_Gram();
t++;
if(t>'~')t=' ';
OLED_ShowNum(103,48,t,3,16);//显示ASCII字符的码值
delay_ms(500);
GPIO_SetBits(GPIOC,GPIO_Pin_1);//PC1=1,LED1灭
delay_ms(500);
}
}
运行的时候,进入了while循环,LED1在闪烁。但是OLED屏幕就是看不到任何东西。。。。
哪位大侠指点一下 是什么原因没点亮OLED呀
|