本來這是一篇內容,但卻昨天實在太晚,沒有完成,這里把內容補充完整。
OLED屏點不亮跟兩個方面有關:硬件(硬件驅動)和軟件(用戶程序)。
OLED屏分兩種接口,SPI接口和IIC接口。
1. 這里以SPI接口為例(網上有一家做的挺好,硬件驅動也非常工整、詳細,你如果仔細學習一下,可以用他們家的函數在屏幕上做出各種參數的矢量圖。但他們家也存在函數不統一的現象。后面的程序均以此家為例)還是拿STM32103C8T6來講。這款芯片有2個硬件SPI接口,你會發現廠家的OLED屏驅動引腳落在其中一組SPI引腳上(PA5,PA7),也僅有這兩個引腳可以復用SPI,其他的是普通引腳。所以說廠家的驅動程序是軟件模擬SPI接口,知道了這一點,我們可以做很多事情,也可以避免很多坑。
不要設定硬件SPI,特別是使用STM32CubeMX設定硬件環境的。如果設了,你可能會點不亮屏,還不知什么原因。
2.有人就會說,那是不是我就可以隨便選擇引腳了呢。請看下面這個坑。
芯片STM32F103T8,這個芯片QFN封裝,36個引腳。
a.使用內部晶振和OLED屏。使用普通引腳無法點亮,但把引腳設在SPI這幾個引腳上(引腳定義普通IO,不復用SPI硬件)卻可以點亮。
b.使用外部晶振和OLED屏普通引腳可以點亮,你可以隨便選。
為什么會這樣,這要回到單片機的物理特性了--PIN腳工作頻率。有人會說,我初始化時已經明確引腳頻率了。可是你可能沒有用示波器真實測過引腳的頻率,
實際的頻率遠比你設定的要低。
但有一個明確的規律,硬件SPI的頻率高于普通引腳的頻率,使用硬件晶振的引腳頻率高于使用內部晶振的引腳頻率。所以你就會明白,OLED為什么點不亮,頻率不匹配。
3.使用SPI引腳(PA15,PB3,PB4,PB5)時存在以下問題,當開啟Serial Wire Debug模式時,如果使用這幾個SPI引腳(PA15,PB3,PB4,PB5),你會點不亮OLED屏。查到的資料是說,在開啟Serial Wire Debug模式下,系統默認那幾個引腳是調試引腳,所以當你設為OLED屏驅動引腳時,是無法點亮屏幕的。
你可以在引腳初始化函數里加上下面這兩行代碼,打開這幾個腳,就可以點亮了。
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//打開時鐘
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//禁用調試功能
看到這個,你會發現,禁用了調試功能。沒錯,結果就是,屏幕亮了,卻不能Debug和燒錄程序了。 怎么辦,長按reset鍵,再次燒錄,程序會刪除芯片中內容,并報錯。不要管錯誤,再次識別,發現芯片可以寫了。記著把剛才兩句刪掉。
這幾個腳不是不能用,只是調試的時候慎用。
下面再聊一下軟件。
4.看下面代碼
int main(void)
{
delay_init();
OLED_Init();
while(1)
{
OLED_ShowString(0,48,"ASCII:",16);
OLED_ShowString(63,48,"CODE:",16);
}
}
該有的好像都有了,驅動也是原廠的,可就是點不亮屏幕。
這個版本的驅動程序有一條指令:OLED_Refresh(),刷新屏幕。這個版本的邏輯是,上面的指令只是把內容寫進了顯存。你還需要下指令讓它更新屏幕。
5.對于某些實例,7腳的SPI接口只定義4個引腳接口。新手會越看越糊涂。
其實很好理解,7腳的SPI接口OLED屏最后一個引腳CS是片選引腳,也就是控制OLED屏是否可以使用。低電平有效,如果你對屏幕沒有特殊需求,可以把該腳直接接地。可以節省一個IO口。
寫到這里,也就到結尾了。使用中總會碰到一些特殊的情況,特別記錄下來,供大家參考。如有不同意見,歡迎提出,共同學習。
|