目錄
一、調(diào)試方式
二、OLED簡介
三、OLED硬件電路
四、OLED驅(qū)動函數(shù)
五、OLED顯示屏使用
1、硬件接線圖
2、添加OLED驅(qū)動函數(shù)
3、程序
4、實物展示
?六、Keil軟件自帶調(diào)試模式
一、調(diào)試方式
????????對于單片機(jī)的編程而言,經(jīng)常會遇到一個很大的問題,就是程序調(diào)試,單片機(jī)不像電腦,電腦有一個很大的屏幕,想看什么變量、參數(shù),直接打印到屏幕就可以了,但是單片機(jī)不一樣,很多時候由于成本和電路結(jié)構(gòu)的限制,它并不會有一個像電腦屏幕那樣強(qiáng)大的顯示屏,這就對我們的調(diào)試造成了困難,例如,如果學(xué)習(xí)C語言,但是不允許使用printf這個打印函數(shù),那C語言就根本沒法學(xué)習(xí)了,所以,如果單片機(jī)沒有任何可以顯示參數(shù)的東西,那單片機(jī)也沒辦法學(xué)習(xí)。
三種常用的調(diào)試方法
串口調(diào)試:
????????通過串口通信,將調(diào)試信息發(fā)送到電腦端,電腦使用串口助手顯示調(diào)試信息。
????????串口調(diào)試的優(yōu)點(diǎn)是可以借助強(qiáng)大的電腦來調(diào)試,電腦端的軟件,不僅可以顯示單獨(dú)的參數(shù),而且可以顯示曲線、圖形、圖像等,還可以自己做一個軟件,來實現(xiàn)一個強(qiáng)大的用戶交互界面。
????????串口調(diào)試的缺點(diǎn)是調(diào)試的時候需要帶著電腦,而且通常的串口助手只能以信息流的方式呈現(xiàn)數(shù)據(jù),就是只能一行一行的打印,如果有很多不斷變化的數(shù)據(jù)需要顯示,那就只能在電腦上刷屏顯示,這樣用起來就不太方便。
顯示屏調(diào)試:
????????直接將顯示屏連接到單片機(jī),將調(diào)試信息打印在顯示屏上。
????????顯示屏調(diào)試的優(yōu)點(diǎn)是對于不斷變化的數(shù)據(jù),可以覆蓋刷新顯示,而且顯示屏可以始終接在單片機(jī)上,顯示方式很直接,如果我們做一個稍微復(fù)雜的東西,都會需要有一個人機(jī)交互的界面,這樣就可以直接把顯示屏當(dāng)作產(chǎn)品的一部分。
????????顯示屏的缺點(diǎn)就是顯示屏幕太小,顯示內(nèi)容有限,沒有電腦軟件那么強(qiáng)大的功能。
Keil調(diào)試模式:借助Keil軟件的調(diào)試模式,可使用單步運(yùn)行、設(shè)置斷點(diǎn)、查看寄存器及變量等功能。
二、OLED簡介
OLED(Organic Light Emitting Diode):有機(jī)發(fā)光二極管
OLED顯示屏:性能優(yōu)異的新型顯示屏。具有如下特點(diǎn):
功耗低:因為OLED每一個像素都是一個單獨(dú)的發(fā)光二極管,不像LCD那樣需要有背光,所以O(shè)LED屏幕會比較省電。
響應(yīng)速度快:這個特性可以使OLED有更高的刷新率,總線時序快,也可以避免阻塞我們的程序。
寬視角:因為OLED屏幕上是自發(fā)光的,所以在任何角度看,顯示內(nèi)容都是清晰的。
輕薄柔韌:在手機(jī)上的折疊屏、柔性屏等,用的就是OLED顯示屏。
本次課程使用的0.96寸OLED模塊:小巧玲瓏、占用接口少、簡單易用,是電子設(shè)計中非常常見的顯示屏模塊。
供電:3~5.5V
通信協(xié)議:I2C(4針腳),SPI(7針腳)
分辨率:128*64
三、OLED硬件電路
?4針腳OLED硬件電路如上圖所示,GND接GND,VCC接3.3V,給OLED供電,剩下的是SCL和SDA是I2C的通信引腳,需要接在單片機(jī)I2C通信的引腳上,由于驅(qū)動函數(shù)模塊用的是GPIO口模擬的I2C通信,所以這兩個端口就可以接在任意的GPIO口上。
7針腳OLED電路圖如上所示,?GND接GND,VCC接3.3V,給OLED供電,剩下的引腳是SPI通信協(xié)議的引腳,如果是GPIO口模擬的通信協(xié)議,那也是接在任意的GPIO口上就行了。
四、OLED驅(qū)動函數(shù)
OLED實物圖
OLED屏幕坐標(biāo)圖?
?驅(qū)動函數(shù)
OLED_Clear();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//將OLED清屏
OLED_ShowChar(1, 1,? 'A');? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????????????????? //顯示一個字符
一個參數(shù)起始行,第二個參數(shù)起始列,第三個參數(shù)是要顯示的字符。
OLED_ShowString(1, 3, "HelloWorld!");? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //顯示字符串
一個參數(shù)起始行,第二個參數(shù)起始列,第三個參數(shù)是要顯示的字符串。
如果想要OLED清除部分?jǐn)?shù)據(jù),只需要在對應(yīng)的位置顯示空格即可。
OLED_ShowNum(2, 1, 12345, 5);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//顯示無符號十進(jìn)制數(shù)字
一個參數(shù)起始行,第二個參數(shù)起始列,第三個參數(shù)是要顯示的數(shù)字,第四個參數(shù)是數(shù)字的長度。
OLED_ShowSignedNum(2, 7, -66, 2);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//顯示有符號十進(jìn)制數(shù)字
一個參數(shù)起始行,第二個參數(shù)起始列,第三個參數(shù)是要顯示的數(shù)字和正負(fù)號,第四個參數(shù)是數(shù)字的長度。
OLED_ShowHexNum(3, 1, 0xAA55, 4);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//顯示16進(jìn)制數(shù)字
一個參數(shù)起始行,第二個參數(shù)起始列,第三個參數(shù)是要顯示的數(shù)字,第四個參數(shù)是數(shù)字的長度。
OLED_ShowBinNum(4, 1, 0xAA55, 16);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //顯示2進(jìn)制數(shù)字
一個參數(shù)起始行,第二個參數(shù)起始列,第三個參數(shù)是要顯示數(shù)字的十六進(jìn)制,第四個參數(shù)是數(shù)字的長度。
五、OLED顯示屏使用
1、硬件接線圖
記得將PB7用跳線接到邊上的正極,PB6接邊上的負(fù)極。?
Stm32的引腳上電后,如果不初始化,默認(rèn)是浮空輸入的模式,在這個模式下,引腳不會輸出電平,所以不會有什么影響。
2、添加OLED驅(qū)動函數(shù)
在江科大給的資料中,程序源碼的位置能找到OLED模塊的驅(qū)動函數(shù),選擇4針腳版本的,然后復(fù)制到新建工程文件夾4.1? OLED顯示屏中的Hardware文件夾中。
然后在Keil軟件中,右鍵Hardware文件夾,選擇第三個添加文件至Hardware,然后文件類型選擇所有文件類型,Ctrl選中紅框內(nèi)的三個文件,再點(diǎn)擊Add添加,即完成在Keil軟件中添加OLED驅(qū)動函數(shù)。
添加完成后,還需要對部分代碼進(jìn)行修改,打開OLED.c文件,找到下面代碼,之前的硬件接線圖中,我們將OLED的SCL口接到了PB8,SDA口接到了PB9,則后面的引腳選擇都得改成GPIOB, GPIO_Pin_8和GPIO_Pin_9,包括后面的OLED初始化函數(shù)都得改成對應(yīng)的引腳。
在OLED.Font.h文件中,存放的是OLDE的字庫數(shù)據(jù)。由于OLED顯示屏沒有自帶字庫,因此想要顯示圖形,還得先定義字符的點(diǎn)陣數(shù)據(jù),OLED.c文件的顯示函數(shù)會用到這些數(shù)據(jù)。
3、程序
主函數(shù)
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
int main(void)
{
OLED_Init();
OLED_ShowChar(1, 1, 'A');
OLED_ShowString(1, 3, "HelloWorld!");
OLED_ShowNum(2, 1, 12345, 5);
OLED_ShowSignedNum(2, 7,-66, 2);
OLED_ShowHexNum(3, 1, 0xAA55, 4);
OLED_ShowBinNum(4, 1, 0xAA55, 16);
while(1)
{
}
}
4、實物展示
?六、Keil軟件自帶調(diào)試模式
如上圖所示,首先點(diǎn)擊工程選項,然后點(diǎn)擊Debug這里,可以對調(diào)試選項進(jìn)行配置, 默認(rèn)是選擇右邊紅色框內(nèi)這一項,這個是在硬件上在線仿真,需要把STLINK和stm32都連接好,如果不想連接硬件,也可以選擇左邊黃色框內(nèi),選擇使用仿真器的這個選項,這樣就是電腦模擬stm32的運(yùn)行了。
我們這里使用硬件在線仿真,在進(jìn)入調(diào)試模式之前,需要連接好stm32。然后點(diǎn)擊下圖中的放大鏡里面帶個d的圖標(biāo),進(jìn)入調(diào)試模式。
?
紅色框內(nèi),即主窗口就是我們編寫的C語言程序,上面黃色框內(nèi)的窗口,就是C語言翻譯成的匯編語言,能夠看到每一句C語言實際上執(zhí)行了哪些操作,左邊藍(lán)色框內(nèi)的窗口是寄存器組和狀態(tài)標(biāo)志位等信息,這個是單片機(jī)硬件底層很重要的東西,如果用匯編語言,這些東西都是必須要非常清楚的,但是如果用的C語言,那這些東西就不需要管。
?
接下來看工具欄的作用,左起第一個紅色框內(nèi)的是復(fù)位,第二個黃色框內(nèi)的是全速運(yùn)行,第三個藍(lán)色框內(nèi)的是停止全速運(yùn)行 。
?
接下來,左起第一個紅色框內(nèi)的是單步運(yùn)行,第二個黃色框內(nèi)的是跳過當(dāng)前單步運(yùn)行,第三個藍(lán)色框內(nèi)的是跳出當(dāng)前函數(shù)單步運(yùn)行,第四個綠色框內(nèi)的是調(diào)到光標(biāo)指定行單步運(yùn)行。
?
?在主窗口中,左邊藍(lán)色和黃色兩個箭頭連在一起的就是下一句將要執(zhí)行的代碼,我們還可以在深灰色區(qū)域左鍵設(shè)置斷點(diǎn),然后點(diǎn)擊全速運(yùn)行,程序就會一直運(yùn)行,直到斷點(diǎn)停下,如果沒有斷點(diǎn),程序全速運(yùn)行,就不會停下來,點(diǎn)擊停止全速運(yùn)行按鈕,程序才會停下來。
接下來繼續(xù)看窗口功能,第一個紅色框內(nèi)的是命令窗口,我們點(diǎn)擊它可以打開和關(guān)閉命令窗口,命令窗口在軟件的左下角位置。
第二個黃色框內(nèi)的是反匯編窗口,也是可以打開和關(guān)閉的,即主窗口上面的窗口。
第三個藍(lán)色框內(nèi)的是符號窗口,打開后會顯示在主窗口的右邊,在這里我們可以實時查看程序中所有變量的值。
?
繼續(xù)看工具欄,第一個紅色框內(nèi)的是串口顯示,第二個黃色框內(nèi)的是邏輯分析儀。
?我們還可以點(diǎn)擊這個外設(shè)菜單欄,選擇第一個系統(tǒng)資源查看,這里就能看到所有的外設(shè)寄存器了,比如我們選擇GPIOA,點(diǎn)擊,就會在主窗口的右邊顯示GPIOA外設(shè)的所有寄存器,點(diǎn)擊ODR寄存器,這里ODR0就是PA0的輸出數(shù)據(jù)寄存器。?
Stm32實時執(zhí)行程序,Keil軟件實時顯示外設(shè)寄存器狀態(tài),還能隨時控制程序的開始、停止、單步運(yùn)行,所以當(dāng)我們遇到一個比較難調(diào)試的程序時,如果不清楚程序時如何執(zhí)行的,或者想看一大堆變量卻不方便顯示的,或者想看一下寄存器是不是配置正確了,都可以考慮使用Keil自帶的調(diào)試模式。文章來源:http://www.zghlxwxcb.cn/news/detail-769251.html
最后再說明一下,如果想修改程序的話,是不能直接在這個調(diào)試模式下修改的,修改程序得先退出調(diào)試模式,重新編譯,再進(jìn)入調(diào)試模式。?文章來源地址http://www.zghlxwxcb.cn/news/detail-769251.html
到了這里,關(guān)于STM32——OLED顯示屏(4)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!