STM8教程-第七章 STM8S207 GPIO模塊及其應用_第1頁
STM8教程-第七章 STM8S207 GPIO模塊及其應用_第2頁
STM8教程-第七章 STM8S207 GPIO模塊及其應用_第3頁
STM8教程-第七章 STM8S207 GPIO模塊及其應用_第4頁
STM8教程-第七章 STM8S207 GPIO模塊及其應用_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、第七章 STM8S207 GPIO模塊及其應用本章終于開始 STM8S207 的例程編寫了,通過前面章節(jié)的學習,相信對STM8S207 已經(jīng)有了一定的認識。本章從 STM8S207 最簡單的 IO 口模塊開始STM8S207 的編程。 7.1 GPIO 簡介 STM8S207 內(nèi)部有非常豐富的輸入、輸出端口資源,同時也集成了多種功能模塊,其輸入、輸出引腳大多為復用引腳。STM8S207 單片機的 IO 口包括 PA、PB、PC、PD、PE、PF、PG、PI 等 52 個 IO 口 通用輸入/輸出口用于芯片和外部進行數(shù)據(jù)傳輸。一個 IO 端口可以包括多達8 個引腳,每個引腳可以被獨立編程作為數(shù)字

2、輸入或者數(shù)字輸出口。另外部分口還可能會有如模擬輸入,外部中斷,片上外設的輸入/輸出等復用功能。但是在同一時刻僅有一個復用功能可以映射到引腳上。復用功能的映射是通過選項字節(jié)控制的。請參考數(shù)據(jù)手冊關于選項字節(jié)的描述。 每個 IO 口都有 5 個對應的寄存器,IO 的工作方式也由這 5 個寄存器控制,它們分別為: 1、數(shù)據(jù)方向寄存器 2、配置寄存器 1 3、配置寄存器 2 4、輸出數(shù)據(jù)寄存器 5、輸入數(shù)據(jù)寄存器 一個 I/O 口工作在輸入還是輸出是取決于該口的數(shù)據(jù)方向寄存器的狀態(tài)。 7.1.1 GPIO 主要功能 1、端口的各個位可以被單獨配置 2、可選擇的輸入模式:浮動輸入和帶上拉輸入 3、可選擇

3、的輸出模式:推挽式輸出和開漏輸出 4、數(shù)據(jù)輸入和輸出采用獨立的寄存器 5、外部中斷可以單獨使能和關閉 6、輸出擺率控制用以減少 EMC 噪聲 7、片上外設的 I/O 功能復用 8、當作為模擬輸入時可以關閉輸入施密特觸發(fā)器來降低功耗 9、在數(shù)據(jù)輸出鎖存時支持讀-修改-寫 10、輸入兼容 5V 電壓 11、I/O 口工作電壓范圍為 1.6 V 到 VDDIOmaxGPIO 模塊框圖7.2 IO 口的配置和使用 每一個端口都有一個輸出數(shù)據(jù)寄存器 (ODR),一個引腳輸入寄存器 (IDR)和一個數(shù)據(jù)方向寄存器 (DDR)。 控制寄存器 1(CR1)和控制寄存器 2(CR2)用于對輸入/輸出進行配置。任

4、何一個 I/O 引腳可以通過對 DDR、CR1 和 CR2 寄存器的相應位進行編程來配置。寄存器中的位 n 對應于口的引腳 n 。STM8S 的每個 IO 端口都有 5 個寄存器來控制,CR1 和 CR2 一起配置模式,DDR方向控制,ODR 輸出數(shù)據(jù)寄存器,IDR 輸入數(shù)據(jù)寄存器。 7.2.1 IO 口端口寄存器設置 除了 IO 口默認功能外,要使用 IO 口操作時,必須先設置 IO 口寄存器,讓對應 IO 口工作于實際所需的功能。這里分別講解 DDR 方向寄存器,CR1 和 CR2配置寄存器,輸出時的 ODR 輸出數(shù)據(jù)寄存器以及 IDR 輸入數(shù)據(jù)寄存器。 1、方向寄存器 DDR如果對應位數(shù)

5、據(jù)方向寄存器 DDRx x 取值(0-7)的數(shù)值為ÿ0,即將對應引腳定義為輸入;如果對應數(shù)據(jù)方向寄存器 DDRx 的數(shù)值為ÿ1,即將對應引腳定義為輸出。 這里注意的地方是在 IAR 環(huán)境中,例如 PA 口定義為輸出時,可以定義為PA_DDR = 0xFF,其它端口也一致。還有就是單獨操作一個引腳時,可以這樣定義 PA_DDR_DDR0 就是 PA 的第一個引腳,其他引腳也類似。2、配置寄存器 CR1、CR2CR1 和 CR2 是一起使用的,具體的功能是實現(xiàn)配置為上拉,懸浮,中斷以及高速 IO 口等等功能。上圖已經(jīng)詳細說明了 CR1,CR2 的功能使用方法。例如當配置為輸出時

6、,推挽模式,也是 PA 口,可以定義為 PA_CR1 = 0xFF; PA_CR2 = 0x00; 當然,當定義單獨一個引腳時,分別定義為 PA_CR1_C10 = 1; /PA0 PA_CR2_C20 = 0; 3、輸出數(shù)據(jù)寄存器 ODR當對應 IO 口定義為輸出時,如何輸出一個讓程序控制的數(shù)值呢?這就要用到輸出數(shù)據(jù)寄存器。具體實現(xiàn)的是當向?qū)妮敵鰯?shù)據(jù)寄存器寫入數(shù)據(jù)時,這個數(shù)值就會在對應的引腳中產(chǎn)生相應的高低電平,具體實現(xiàn)辦法是,例如 PA0 輸出高電平可以定義為 PA_ODR |= 1; /其它寄存器已經(jīng)配置好當然也可以單獨一個位操作 PA_ODR_ODR0 = 1; /效率比上面的更高

7、 4、輸入數(shù)據(jù)寄存器 IDRIDR 實現(xiàn)的功能是:當 IO 口定義為輸入時,通過讀取 IDR 寄存器可以知道對應 IO 口的電平。這里簡單說明當 PA0 定義為輸入時,可以直接讀取 PA0_IDR 寄存器來判斷 PA0 電平的情況 if(PA_IDR & 0x01 = 1) /判斷 PA0 口的狀態(tài) 也可以單獨讀取一個 IO 口,例如 if(PA_IDR_IDR0 = 1) /效率比上面的更好 7.3 IO 口基礎應用實例 本節(jié)以通用 IO 口簡單應用的角度講解如何控制 LED 燈和按鍵開關信號,通過幾個實例的介紹,讓讀者掌握 IO 口的使用和編程方法。 7.3.1 輸出設備 LED

8、控制實例 典型 LED 有陽極和陰極兩個引腳,LED 在正向偏置的狀態(tài)下能夠發(fā)光,通過通用 IO 口連接到 LED 的一個引腳,LED 另一個引腳接固定電平,即可點亮 LED。 本實例硬件連接如下圖所示,PD03 端口連接 4 個 LED,編程實現(xiàn)明燈流水等操作。由電路圖可知,使用 STM8S207 的 PD0PD3 端口控制 4 個 LED,PD0PD3 端口輸出低電平點亮對應的 LED。本例中流水燈的流動速度沒有實現(xiàn)精確控制,即延時時間沒有精確計算,本書后面章節(jié)會討論如何實現(xiàn)精確定時。 為了熟練使用 IAR,這里詳細介紹這個實例的整個開發(fā)過程 1、 打開 IAR 軟件,出現(xiàn)如下圖所示:2、

9、選擇菜單 File>New>Workspace,新建一個 Workspace 3、選擇 Project>Create New Project,新建一個工程,并學著 C 按 OK,選擇保存路徑保存。 4、選擇 File>Save>Workspace,保存 Workspace,出現(xiàn)下圖所示5、編寫程序代碼就可以了,在 main 文件中添加如下代碼,實現(xiàn)流水燈#include "iostm8s207rb.h" void delay_ms(int value); int main( void ) unsigned char i=0; /配置PD0PD3

10、為輸出模式 PD_DDR |= 0x0F; /0000 1111, 1為輸出 PD_CR1 |= 0x0F; /推挽輸出 PD_CR2 = 0x00; while(1) /累加燈效果 PD_ODR = i & 0x0f; /先把i反轉(zhuǎn),再取低4位控制4個LED delay_ms(100); +i; /* * 簡單延時程序 * */ void delay_ms(int value) int i,j; if(value < 1) value = 1; for(i=0;i!=value;+i) for(j=0;j!=5000;+j); 6、工程選項配置 要下載的文件是 hex,默認生成

11、時 o 文件,所在要修改工程配置,具體如下:選擇 Project>Options,或者在 Workspace 窗口,選中 project 名字,右擊選擇選擇ÿOptions 設置如下圖所示:7、編譯下載 按編譯后,就會生成 hex 文件,在工程目錄的 Debug>Exe 下面 8、下載,這里不詳細說了,在第二章節(jié)中已經(jīng)詳細說明如下用串口下載程序。7.3.2 輸入設備按鍵開關讀取實例 用戶通過按鍵開關可以實現(xiàn)簡單的輸入控制。本實例按鍵開關的硬件連接如下圖所示:由電路圖可知,使用 STM8S207 的 PD5PD7 端口讀取 3 個按鍵的狀態(tài)。本例依然使用上面所使用的 LED

12、 燈控制電路,使用 STM8S207 的 PD5PD7 端口控制LED1LED3 三個 LED 燈,考慮通過 3 個 LED 燈的亮滅反應 3 個按鍵的狀態(tài)情況。 實例程序如下所示。 #include "iostm8s207rb.h" typedef unsigned char uchar; void delay_ms(int value); int main( void ) /PD0-PD2輸出LED PD5-PD7按鍵輸入 PD_DDR = 0x07; /低三位輸出 PD_CR1 = 0xFF; PD_CR2 = 0x00; /輸出選擇推挽,輸入選擇上拉 while(1) PD_ODR = (PD_IDR & 0xE0)>>5; delay_ms(10); /* * 簡單延時程序 * */ void delay_ms(int v

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論