




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第八章 STM8S207時(shí)鐘編程及其實(shí)例本章介紹 STM8S207 的時(shí)鐘編程。STM8S207 時(shí)鐘控制器功能強(qiáng)大而靈活易用,允許程序運(yùn)行中將主時(shí)鐘從一個(gè)時(shí)鐘源切換到另一個(gè)時(shí)鐘源,而且同一個(gè)時(shí)鐘源可以任意更改分頻系數(shù)。 8.1 STM8 時(shí)鐘控制簡(jiǎn)介 時(shí)鐘控制器功能強(qiáng)大而且靈活易用。其目的在于使用戶在獲得最好性能的同時(shí),亦能保證消耗的功率最低。 用戶可獨(dú)立地管理各個(gè)時(shí)鐘源,并將它們分配到 CPU 或各個(gè)外設(shè)。主時(shí)鐘和CPU 時(shí)鐘均帶有預(yù)分頻器。 具有安全可靠的無故障時(shí)鐘切換機(jī)制,可在程序運(yùn)行中將主時(shí)鐘從一個(gè)時(shí)鐘源切換到另一個(gè)時(shí)鐘源。 抗電磁干擾時(shí)鐘配置寄存器 為了避免由電磁干擾造成的對(duì)應(yīng)用程
2、序誤寫操作或系統(tǒng)掛起,大多數(shù)關(guān)鍵的時(shí)鐘配置寄存器都有一個(gè)互補(bǔ)寄存器與之相對(duì)應(yīng)。系統(tǒng)將會(huì)自動(dòng)檢測(cè)這些關(guān)鍵寄存器與其互補(bǔ)寄存器之間是否匹配。如果不匹配,則產(chǎn)生一個(gè) EMS 復(fù)位,從而使應(yīng)用程序恢復(fù)到正常操作。詳情請(qǐng)參見時(shí)鐘寄存器描述。 1、主時(shí)鐘源介紹 下面 4種時(shí)鐘源可用做主時(shí)鐘 1、1-24MHz 高速外部晶振(HSE) 2、最大 24MHz 高速外部時(shí)鐘信號(hào) 3、16MHz 高速內(nèi)部 RC 振蕩器(HSI) 4、128KHz 低速內(nèi)部 RC(LSI) 所以總的來說可以分為三種時(shí)鐘源,HSE、HSI、LSI 2、時(shí)鐘樹,如下圖所示由上圖可以發(fā)現(xiàn),作為 f_cpu 的時(shí)鐘源可以來源于 f_hse
3、、f_hsi 經(jīng)過 HSIDIV分頻后的時(shí)鐘、f_lsi 這三個(gè)時(shí)鐘源。而選擇開關(guān)在 CKM7:0中。由此事實(shí)上可以作為 f_master 的時(shí)鐘源頻率有: 外部 HSE 24MHz 內(nèi)部高速 HSI 16MHz、2 分頻的8MHz、4 分頻的4MHz、8 分頻的2MHz(復(fù)位默認(rèn)時(shí)鐘源) 內(nèi)部低速 LSI 128KHz 上面得到的頻率是 f_master 的頻率,然后 f_master 還可以通過 CPUDIV 來分頻后提供 f_cpu 的時(shí)鐘,CPUDIV 可以為 1、2、4、8、16、32、64、128 分頻,最終得到是 CPU 的時(shí)鐘頻率 f_cpu。3、時(shí)鐘切換 時(shí)鐘切換功能為用戶提
4、供了一種易用、快速、安全的從一個(gè)時(shí)鐘源切換到另一個(gè)時(shí)鐘源的途徑。 (1)、系統(tǒng)啟動(dòng) 為使系統(tǒng)快速啟動(dòng),復(fù)位后時(shí)鐘控制器自動(dòng)使用 HSI 的 8 分頻(HSI/8)做為主時(shí)鐘(2MHz)。其原因?yàn)?HSI 的穩(wěn)定時(shí)間短,而 8 分頻可保證系統(tǒng)在較差的 VDD條件下安全啟動(dòng)。 一旦主時(shí)鐘源穩(wěn)定,用戶程序可將主時(shí)鐘切換到另外的時(shí)鐘源。 (2)、主時(shí)鐘切換的過程 用戶可選擇下面兩種方式切換時(shí)鐘源:自動(dòng)切換、手動(dòng)切換 自動(dòng)切換使用戶可使用最少的指令完成時(shí)鐘源的切換。應(yīng)用軟件可繼續(xù)其它操作而不用考慮切換事件所占的確切時(shí)間。具體方法在實(shí)例中講解 手動(dòng)切換與自動(dòng)切換不同,不能夠立即切換,但它允許用戶精確地控制
5、切換事件發(fā)生的時(shí)間。具體方法在實(shí)例中講解 8.2 時(shí)鐘控制寄存器及設(shè)置 第六章的 IO 口實(shí)驗(yàn)之所以能正常運(yùn)行的原因是在于 STM8S207 上電復(fù)位后有默認(rèn)的時(shí)鐘源,所以可以正常工作,但是為了更好使用和理解 STM8S207 是有必要清楚掌握 STM8S207 的時(shí)鐘編程。 1、主時(shí)鐘切換寄存器 CLK_SWR由上面的時(shí)鐘樹可知,CLK_SWR 對(duì)應(yīng)的就是 CKM7:0,我也很好奇為什么不一致。 CLK_SWR 有特定的值才有效,是選擇三個(gè)時(shí)鐘源之一作為 f_master 的時(shí)鐘輸入。具體如下所示: 0xE1:HSI 為主時(shí)鐘源(復(fù)位值) 0xD2:LSI 為主時(shí)鐘源(僅當(dāng) LSI_EN 選
6、項(xiàng)位為 1 時(shí)) 0xB4:HSE 為主時(shí)鐘源2、主時(shí)鐘狀態(tài)寄存器 CLK_CMSR對(duì)應(yīng)著 CLK_SWR,由硬件置位或清除。用以指示當(dāng)前所選的主時(shí)鐘源。如果該寄存器中的值為無效值,則產(chǎn)生 MCU 復(fù)位 0xE1:HSI 為主時(shí)鐘源(復(fù)位值) 0xD2:LSI 為主時(shí)鐘源(僅當(dāng) LSI_EN 選項(xiàng)位為 1 時(shí)) 0xB4:HSE 為主時(shí)鐘源 3、時(shí)鐘分頻寄存器 CLK_CKDIVR這個(gè)寄存器對(duì)應(yīng)了時(shí)鐘樹中的 HSIDIV 以及 CPUDIV,正如前面所說的 HSIDIV可以把內(nèi)部高速 RC 時(shí)鐘源分頻后才對(duì) f_master 提供時(shí)鐘周期;CPUDIC 就是把f_master 的時(shí)鐘周期分頻后
7、再對(duì) f_cpu 提供時(shí)鐘周期。具體分頻倍數(shù)為: HSIDIV1:0:高速內(nèi)部時(shí)鐘預(yù)分頻器,由軟件寫入,用于指定 HSI 分頻因子。 00:fHSI = fHSI RC 輸出 01:fHSI = fHSI RC 輸出/2 10:fHSI = fHSI RC 輸出/4 11:fHSI = fHSI RC 輸出/8 CPUDIV2:0:CPU 時(shí)鐘預(yù)分頻器,由軟件寫入,用于指定 CPU 時(shí)鐘預(yù)分頻因子。 000:fCPU = fMASTER 001:fCPU = fMASTER/2 010:fCPU = fMASTER/4 011:fCPU = fMASTER/8 100:fCPU = fMAST
8、ER/16 101:fCPU = fMASTER/32 110:fCPU = fMASTER/64 111:fCPU = fMASTER/128 4、切換控制寄存器 CLK_SWCR這個(gè)寄存器主要是查看時(shí)鐘源的切換標(biāo)志位,具體含義如下: SWIF:時(shí)鐘切換中斷標(biāo)志位 由硬件置位或軟件寫 0 清除。該位的含義取決于 SWEN 位的狀態(tài)。 手動(dòng)切換模式下(SWEN=0): 0:目標(biāo)時(shí)鐘源未準(zhǔn)備就緒 1:目標(biāo)時(shí)鐘源準(zhǔn)備就緒 自動(dòng)切換模式下(SWEN=0): 0:無時(shí)鐘切換事件發(fā)生 1:有時(shí)鐘切換事件發(fā)生 SWIEN:時(shí)鐘切換中斷使能由軟件置位或清除 0:時(shí)鐘切換中斷禁用 1:時(shí)鐘切換中斷使能 SWE
9、N:切換啟動(dòng)/停止由軟件置位或清除。向該位寫 1 將切換主時(shí)鐘至寄存器 CLK_SWR 指定的時(shí)鐘源。 0:禁止時(shí)鐘切換的執(zhí)行 1:使能時(shí)鐘切換的執(zhí)行 SWBSY:切換忙由硬件置位或清除??捎绍浖宄詮?fù)位時(shí)鐘切換過程。 0:無時(shí)鐘切換在進(jìn)行。 1:時(shí)鐘切換正在進(jìn)行。 除上面上面主要涉及到的寄存器之外還有 內(nèi)部時(shí)鐘寄存器 CLK_ICKR 外部時(shí)鐘寄存器 CLK_ECKR 外設(shè)時(shí)鐘門控寄存器 1 CLK_PCKENR1 外設(shè)時(shí)鐘門控寄存器 2 CLK_PCKENR2 時(shí)鐘安全系統(tǒng)寄存器 CLK_CSSR 可配置時(shí)鐘輸出寄存器 CLK_CCOR HIS 時(shí)鐘修正寄存器 CLK_HSITRIMR
10、SWIM 時(shí)鐘控制寄存器 CLK_SWIMCCR 這些寄存器在本章最后小節(jié)中才略為說明,時(shí)鐘編程主要以前面3個(gè)寄存器有關(guān)。例如 CLK_SWR 是選擇時(shí)鐘源、CLK_SWCR 是時(shí)鐘切換的控制寄存器,控制切換過程的設(shè)置而 CLK_CKDIVR 是設(shè)置 HIS 的分頻系數(shù)和 f_cpu 的分頻系數(shù)8.3 時(shí)鐘編程基礎(chǔ)應(yīng)用 為了從不同角度理解時(shí)鐘編程,這節(jié)分三個(gè)基礎(chǔ)例程分別實(shí)現(xiàn) CPU 和內(nèi)部高速時(shí)鐘分頻例程、自動(dòng)切換時(shí)鐘源例程以及手動(dòng)切換時(shí)鐘源例程。 8.3.1 CPU 分頻以及 HIS 分頻例程 時(shí)鐘編程本身并不需要外部設(shè)備,為了檢驗(yàn)時(shí)鐘分頻的效果,在這里采用了一個(gè) LED 燈閃耀的效果來檢驗(yàn)
11、時(shí)鐘的快慢,具體實(shí)現(xiàn)是相同的延時(shí)函數(shù),在不同的時(shí)鐘頻率下跑的效果有很大差異,這樣就達(dá)到了檢查實(shí)驗(yàn)的效果。 如下圖所示:在這里使用了 LED1,也就是 PD0 端口,對(duì)應(yīng)的 IO 口操作在前一章已經(jīng)有過詳細(xì)介紹。本實(shí)驗(yàn)操作的寄存器只有一個(gè),就是 CLK_CKDIVR ,具體如下所示: HSIDIV1:0:高速內(nèi)部時(shí)鐘預(yù)分頻器,由軟件寫入,用于指定 HSI 分頻因子。 00:fHSI = fHSI RC 輸出 01:fHSI = fHSI RC 輸出/2 10:fHSI = fHSI RC 輸出/4 11:fHSI = fHSI RC 輸出/8(默認(rèn)) CPUDIV2:0:CPU 時(shí)鐘預(yù)分頻器,由
12、軟件寫入,用于指定 CPU 時(shí)鐘預(yù)分頻因子。 000:fCPU = fMASTER 001:fCPU = fMASTER/2 010:fCPU = fMASTER/4 011:fCPU = fMASTER/8 100:fCPU = fMASTER/16 101:fCPU = fMASTER/32 110:fCPU = fMASTER/64 111:fCPU = fMASTER/128 程序代碼如下: /* 每一個(gè)時(shí)鐘分頻周期為閃耀燈5次 HSI CPU 1:1 16M HSI CPU 1:4 4MHSI CPU 2:4 2M */ #include "iostm8s207rb.h&q
13、uot; void delay_ms(int value); int main( void ) int i; /配置PD0為輸出 PD_DDR_DDR0 = 1; PD_CR1_C10 = 1; PD_CR2_C20 = 0; PD_ODR_ODR0 = 1; while(1) /HSI CPU 1:1 16M CLK_CKDIVR = 0x00; for(i=0;i!=10;+i) PD_ODR_ODR0 = PD_ODR_ODR0; delay_ms(100); delay_ms(100); /HSI CPU 1:4 4M CLK_CKDIVR_HSIDIV = 0; CLK_CKDIVR
14、_CPUDIV = 2; for(i=0;i!=10;+i) PD_ODR_ODR0 = PD_ODR_ODR0; delay_ms(100); delay_ms(100); /HSI CPU 2:4 2M CLK_CKDIVR_HSIDIV = 1; CLK_CKDIVR_CPUDIV = 2; for(i=0;i!=10;+i) PD_ODR_ODR0 = PD_ODR_ODR0; delay_ms(100); delay_ms(100); /* * 簡(jiǎn)單延時(shí) * */ void delay_ms(int value) int i,j; if(value < 1) value = 1
15、; for(i=0;i!=value;+i) for(j=0;j!=5000;+j); 8.3.2 自動(dòng)切換時(shí)鐘源 因?yàn)?STM8S 單片機(jī)上電復(fù)位是采用了內(nèi)部時(shí)鐘源 HIS,所以在這里實(shí)現(xiàn)的功能是切換外部時(shí)鐘源。由于 STM8S207 開發(fā)板使用的外部晶振是 24M,在主頻大于 16M 以上時(shí),需要更改選項(xiàng)字,這里降低實(shí)驗(yàn)的難易程度,決定在這里采用外部時(shí)鐘然后通過 CPUDIV 2 分頻得到的 f_cpu 主頻為12M 自動(dòng)切換時(shí)鐘源的對(duì)應(yīng)步驟: 1、設(shè)置切換控制寄存器(CLK_SWCR)中的位 SWEN,使能切換機(jī)制。 2、向主時(shí)鐘切換寄存器(CLK_SWR)寫入一個(gè) 8 位的值,用以選擇
16、目標(biāo)時(shí)鐘源。寄存器 CLK_SWCR 中的 SWBSY 被硬件置位,目標(biāo)源振蕩器啟動(dòng)。原時(shí)鐘源依然被用于驅(qū)動(dòng)內(nèi)核和外設(shè)。 一旦目標(biāo)時(shí)鐘源穩(wěn)定,寄存器 CLK_SWR 中的值將被復(fù)制到主時(shí)鐘狀態(tài)寄存器(CLK_CMSR)中去。此時(shí),SWBSY 位被清除,新時(shí)鐘源替代舊時(shí)鐘源。寄存器CLK_SWCR 中的標(biāo)志位 SWIF 被置位,如果 SWIEN 為 1,則會(huì)產(chǎn)生一個(gè)中斷。硬件采用 8.3.1 的電路圖,也是通過 LED 實(shí)現(xiàn)檢測(cè)效果 詳細(xì)代碼如下: #include "iostm8s207rb.h" void delay_ms(int value); int main( vo
17、id ) int i; /配置PD0為輸出模式 PD_DDR_DDR0 = 1; PD_CR1_C10 = 1; /推挽輸出 PD_CR2_C20 = 0; PD_ODR_ODR0 = 1; /LED1滅while(1) /自動(dòng)切換方式 CLK_SWCR_SWIEN = 0; /禁止時(shí)鐘切換中斷 CLK_SWCR_SWEN = 1; /使能切換機(jī)制 CLK_SWR = 0xB4; /0XE1: HSI為主時(shí)鐘源(復(fù)位值,內(nèi)部16MHz) /0XD2: LSI為主時(shí)鐘源(僅當(dāng)LSI_EN選項(xiàng)為1時(shí)) /0XB4: HSE為主時(shí)鐘源(外部時(shí)鐘) CLK_CKDIVR = 1; /CPUDIV 2分
18、頻 /切換后的時(shí)鐘為12M delay_ms(100); for(i=0;i!=10;+i) PD_ODR_ODR0 = PD_ODR_ODR0; delay_ms(100); /自動(dòng)切換方式 CLK_SWCR_SWIEN = 0; /禁止時(shí)鐘切換中斷 CLK_SWCR_SWEN = 1; /使能切換機(jī)制 CLK_SWR = 0xE1; /0XE1: HSI為主時(shí)鐘源(復(fù)位值,內(nèi)部16MHz) /0XD2: LSI為主時(shí)鐘源(僅當(dāng)LSI_EN選項(xiàng)為1時(shí)) /0XB4: HSE為主時(shí)鐘源(外部時(shí)鐘) /切換后的時(shí)鐘時(shí)16M/2 = 8M delay_ms(100); for(i=0;i!=10;
19、+i) PD_ODR_ODR0 = PD_ODR_ODR0; delay_ms(100); /* * 簡(jiǎn)單延時(shí)程序 * */ 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); 8.3.3 手動(dòng)切換時(shí)鐘源 手動(dòng)切換與自動(dòng)切換不同,不能夠立即切換,但它允許用戶精確地控制切換事件發(fā)生的時(shí)間。 具體操作步驟: 1、向主時(shí)鐘切換寄存器(CLK_SWR)寫入一個(gè) 8 位的值,用以選擇目標(biāo)時(shí)鐘源。寄存器 CLK_SWCR 中的 SWBSY 被硬件置位,目
20、標(biāo)源振蕩器啟動(dòng)。原時(shí)鐘源依然被用于驅(qū)動(dòng)內(nèi)核和外設(shè)。 2、用戶軟件需等待至目標(biāo)時(shí)鐘源穩(wěn)定。寄存器 CLK_SWCR 中的標(biāo)志位 SWIF用以指示目標(biāo)時(shí)鐘源是否已穩(wěn)定,如果 SWIEN 為 1,則會(huì)產(chǎn)生一個(gè)中斷。 3、最后,由用戶軟件在所選的時(shí)間點(diǎn),設(shè)置寄存器 CLK_SWCR 中的位 SWEN,執(zhí)行切換。 在前兩個(gè)例程的基礎(chǔ)上,我們可以進(jìn)行時(shí)鐘編程的第三個(gè)例程了,具體的步驟如上所示,下面進(jìn)行我們的軟件編寫。 /* * 手動(dòng)切換順序 1、向CLK_SWR寫入一個(gè)數(shù)據(jù),選擇目標(biāo)時(shí)鐘源 2、等待CLK_SWCR_SWIF = 1,時(shí)鐘穩(wěn)定 3、設(shè)置CLK_SWCR_SWEN = 1,開啟時(shí)鐘 * */
21、 #include "iostm8s207rb.h" void delay_ms(int value); int main( void ) int i; /配置LED1 PD_DDR_DDR0 = 1; PD_CR1_C10 = 1; /推挽輸出 PD_CR2_C20 = 0; PD_ODR_ODR0 = 1; /LED1滅 CLK_SWCR_SWIEN = 0; /禁止中斷 CLK_CKDIVR = 1; /CPUDIV設(shè)置為2分頻 while(1) /手動(dòng)切換方式 CLK_SWR = 0xB4; /0XE1: HSI為主時(shí)鐘源(復(fù)位值,內(nèi)部16MHz)/0XD2: LS
22、I為主時(shí)鐘源(僅當(dāng)LSI_EN選項(xiàng)為1時(shí)) /0XB4: HSE為主時(shí)鐘源(外部時(shí)鐘) while(CLK_SWCR_SWIF = 0); /等待時(shí)鐘穩(wěn)定,輸出時(shí)鐘為12M CLK_SWCR_SWEN = 1; /切換時(shí)鐘 for(i=0;i!=10;+i) PD_ODR_ODR0 = PD_ODR_ODR0; delay_ms(100); delay_ms(100); /手動(dòng)切換方式 CLK_SWR = 0xE1; /0XE1: HSI為主時(shí)鐘源(復(fù)位值,內(nèi)部16MHz) /0XD2: LSI為主時(shí)鐘源(僅當(dāng)LSI_EN選項(xiàng)為1時(shí)) /0XB4: HSE為主時(shí)鐘源(外部時(shí)鐘) while(CLK_SWCR_SWIF = 0); /等待時(shí)鐘穩(wěn)定,輸出時(shí)鐘為8M CLK_SWCR_SWEN = 1; /切換時(shí)鐘 for(i=0;i!=10;+i) PD_ODR_ODR0 = PD_ODR_ODR0; delay_ms(100); delay_ms(100); /* * 簡(jiǎn)單延時(shí)程序 * */ 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); 8.4 其它關(guān)于時(shí)鐘編程寄存器 時(shí)鐘編程的其它寄存器涉及到外設(shè)和時(shí)鐘安全方面
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023-2024學(xué)年江蘇省蘇州市高二下學(xué)期4月期中調(diào)研數(shù)學(xué)試題(解析版)
- 可行性研究報(bào)告弊端
- 環(huán)境工程材料課件
- 食堂傳染病防控應(yīng)急預(yù)案
- 作業(yè)場(chǎng)所定制管理制度
- 作業(yè)許可審批管理制度
- 佳迪物業(yè)公司管理制度
- 供暖公司保安管理制度
- 供水企業(yè)印章管理制度
- 供熱公司封條管理制度
- 2023年南昌市外國與學(xué)校小升初能力試題
- 北京市朝陽區(qū)2021-2022學(xué)年四年級(jí)下學(xué)期期末語文試卷
- 金融系統(tǒng)反洗錢考試題庫(含答案)
- 甘肅省張掖市2023年中考地理真題試題(含解析)
- 人教小學(xué)數(shù)學(xué)五年級(jí)下冊(cè)綜合與實(shí)踐《怎樣通知最快》示范公開課教學(xué)課件
- 脫不花三十天溝通訓(xùn)練營
- 2023年湖南常德中考語文真題及答案
- “滾球法”計(jì)算接閃器保護(hù)范圍
- 生產(chǎn)專案持續(xù)改善工作匯報(bào)
- 2022年南通如皋市醫(yī)療系統(tǒng)事業(yè)編制鄉(xiāng)村醫(yī)生招聘筆試試題及答案解析
- SB/T 10347-2017糖果壓片糖果
評(píng)論
0/150
提交評(píng)論