久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2879|回復(fù): 4
收起左側(cè)

StC32G12K128單片機(jī)高速模式應(yīng)用例程分享與解析-溫度顯示器例程

[復(fù)制鏈接]
ID:1039438 發(fā)表于 2023-2-20 20:03 | 顯示全部樓層 |閱讀模式
    本例程是為驗(yàn)證stc32g12k128高速模式的應(yīng)用,spi-dma彩屏驅(qū)動(dòng)程序?qū)嶋H應(yīng)用和動(dòng)態(tài)曲線刷新方法。
    溫度顯示器與普通溫度計(jì)的區(qū)別在于,它不僅能看到當(dāng)前溫度測(cè)量值,還能看到過去溫度值,在這里算是前述實(shí)驗(yàn)?zāi)康牡囊粋(gè)載體吧。
    關(guān)于spi-dma彩屏驅(qū)動(dòng)程序,在前面的帖子里講過了。當(dāng)時(shí)是在編寫階段,這里是實(shí)際應(yīng)用,通過這個(gè)例程可以看到。相關(guān)驅(qū)動(dòng)能很好地在復(fù)雜的(存在四個(gè)中斷函數(shù))實(shí)際應(yīng)用中工作。
    下面說stc32g12k128的高速模式:
    這里的高速模式是指mcu端口工作頻率高于系統(tǒng)時(shí)鐘(SYSCLK)的狀態(tài)。
    一般來講,如果mcu系統(tǒng)時(shí)鐘是12M,則IO端口的工作頻率不能高于12M(比如6M)。而stc32g12k128為我們提供了一種模式,可以讓IO端口以高于系統(tǒng)時(shí)鐘的速度運(yùn)行。這就是它的高速模式。
    一方面,提高mcu的系統(tǒng)時(shí)鐘,能提高IO端口的頻率,比如把系統(tǒng)時(shí)鐘提到36M,端口速度會(huì)提高很多,另一方面,端口本身能實(shí)現(xiàn)的速度是有限的。一般在20M左右(與電源電壓有關(guān)并受電路實(shí)際情況的影響)。那么,mcu的高速模式有什么用呢?我認(rèn)為主要在以下兩個(gè)方面。
    一、在保證端口速度的前提下,降低mcu的系統(tǒng)時(shí)鐘,實(shí)現(xiàn)節(jié)能。
    系統(tǒng)時(shí)鐘高了耗電多,采用高速模式,能實(shí)現(xiàn)在較低系統(tǒng)時(shí)鐘下的較高速度的端口工作狀態(tài)。省電而不影響工作。
    二、滿足外設(shè)對(duì)端口的不同要求
    本例程中我采用ds18b20進(jìn)行溫度數(shù)據(jù)采集,編寫的程序模塊時(shí)使用了11.0592主頻(MCLK,在不分頻的情況下,MCLK=SYSCLK)。顯示上采用了320x240spi接口彩屏。如果還使用11.0592M的主頻,刷屏速度就有點(diǎn)慢了。提高主頻的話,就要重整ds18b20的驅(qū)動(dòng)。而且提高主頻除了多耗電,s18b20的采集速度不會(huì)提高。兩種外設(shè)需要不同的頻率時(shí),就想到了stc32g12k128的高速模式。就是讓mcu的主頻仍工作在11.0592M,但開啟spi的高速模式,大大提高了刷屏速度。達(dá)到預(yù)期效果。
    要進(jìn)一步了解高速模式,最好看一下官方的資料。我們看一下圖一:
    在左下角的位置1處看到,能采用高速模式的端口有兩類,PWM和SPI。位置2處是端口時(shí)鐘的分頻器,它把時(shí)鐘頻率降低到你需要的值,位置3是時(shí)鐘來源,圖上看到,有兩路,一路是MCLK,也叫主時(shí)鐘,另一路是PLLCLK        ,叫高速時(shí)鐘,CLKSEL.HSIOCK的默認(rèn)值零,選擇的是主時(shí)鐘,這時(shí)端口的頻率不會(huì)高于主時(shí)鐘(但可以高于系統(tǒng)時(shí)鐘,只要你把主時(shí)鐘分頻后供給系統(tǒng)時(shí)鐘),只有CLKSEL,HSIOCK為1時(shí),選擇PLLCLK做為時(shí)鐘源,才能出現(xiàn)端口時(shí)鐘高于MCLK主時(shí)鐘的情況。在位置4看到,主時(shí)鐘經(jīng)分頻后產(chǎn)生系統(tǒng)時(shí)鐘SYSCLK,供mcu工作,        SYSCLK的頻率越低。系統(tǒng)用電越省。SYSCLK越高,mcu速度越快。在位置5看到。主時(shí)鐘MCLK和高速時(shí)鐘PLLCLK可以來自同樣時(shí)鐘源,主時(shí)鐘也可以有單獨(dú)的時(shí)鐘通道(PLLCKI).你可以通過設(shè)置選擇96M或144M,這個(gè)時(shí)鐘是通過12M(位置7)時(shí)鐘信號(hào)倍頻得到的。在位置6處的寄存器位CLKSEL.CKMS決定你選擇的是哪個(gè)頻率做時(shí)鐘源,默認(rèn)值是96M。在使用STC-ISP工具軟件設(shè)定MCU的頻率時(shí),設(shè)定的是系統(tǒng)時(shí)鐘內(nèi)部高速IRc(位置9),其值由9到8再通過PLLCKI到4成為主時(shí)鐘,再通過分頻就是這個(gè)系統(tǒng)時(shí)鐘了。這個(gè)過程中位置9到4再到系統(tǒng)時(shí)鐘的一條通路都采用默認(rèn)值 時(shí),STC-ISP的設(shè)定值就等于系統(tǒng)時(shí)鐘的值。我們開啟高速模式是開通的7、6、5、3、2、1這條通路。圖上有通路上各個(gè)寄存器的名稱。
    這里有兩種情況,一是STC-ISP設(shè)定頻率在12M附近,這時(shí)PCKI不需要分頻,可以直接送到PLL倍頻產(chǎn)生96/144高速時(shí)鐘,供后面使用。再一種情況是STC-ISP設(shè)定的頻率在24M附近,這時(shí)需要PCKI進(jìn)行2分頻,才能保證PLL倍頻器產(chǎn)生需要的頻率。我這里用了附近這個(gè)詞,就是說倍頻器PLL需要的是12M,允許有偏差,但不宜差太多。差多了影響精度。會(huì)不會(huì)影響起振,我沒測(cè)試過。
    通過時(shí)鐘關(guān)系圖我們可以明白,要使IO端口的頻率高于系統(tǒng)時(shí)鐘,有兩個(gè)辦法,一是提高主頻(MCLK),分頻后給系統(tǒng)時(shí)鐘STSCLK.再少分頻給PWM/SPI端口。二是使用PLLCLK做PWM/SPI端口的時(shí)鐘源,這樣的好處是可以少影響系統(tǒng)時(shí)鐘SYSCLK的設(shè)置和使用。如果使用方法一,直接提高主頻,又忘了分頻給系統(tǒng)時(shí)鐘,開機(jī)時(shí)可能直接死機(jī)了。調(diào)試程序時(shí)會(huì)增加麻煩。
    這里帶讀者看了一遍時(shí)鐘關(guān)系圖,是因?yàn)楹芏嗯笥褯]有耐心看這個(gè)圖,而我覺得這個(gè)圖應(yīng)該看懂它。官方數(shù)據(jù)手冊(cè)上有不少圖,如果能把這些圖在腦子里連接成整體,對(duì)這個(gè)芯片的用法會(huì)有所幫助。下面是我在例程中有關(guān)頻率設(shè)置的內(nèi)容:
        // //選擇外部 32K
X32KCR = 0xc0; //啟動(dòng)外部 32K 晶振
while (!(X32KCR & 0x01)); //等待時(shí)鐘穩(wěn)定
RTCCFG &= ~0x02; //選擇外部 32K 作為 RTC 時(shí)鐘源
INIYEAR = 23; //Y:2023
INIMONTH = 2; //M:12
INIDAY = 20; //D:31
INIHOUR = 19; //H:23
INIMIN = 59; //M:59
INISEC = 50; //S:50
INISSEC = 0; //S/128:0
RTCCR = 0x01; // RTC 使能
RTCCFG |= 0x01; //觸發(fā) RTC 寄存器初始化
while(RTCCFG & 0x01); //等待初始化完成,需要在 "RTC 使能" 之后判斷.
RTCIF = 0; //清中斷標(biāo)志
//開硬件SPI,這是開dma的前提
P_SW1=0x04;//spi口選在P2
SPSTAT=0xc0;
HSSPI_CFG2 |= 0x20; //使能 SPI 高速模式
SPCTL=0xd3;//spi速度選擇最高的
        //試著開一下高速SPI,注意stc-isp設(shè)置時(shí)鐘要求12M。11.0592M穩(wěn)定啟動(dòng)了
CLKSEL &= ~0x80; //默認(rèn)選擇 PLL 的 96M 作為 PLL 的輸出時(shí)鐘
//USBCLK |= 0x20; //PLL 輸入時(shí)鐘 2 分頻 ,因?yàn)閟tc-isp設(shè)定頻率為24M,
//屏蔽分頻語句,取默認(rèn)值不分頻,對(duì)應(yīng)stc-isp設(shè)定頻度12M
USBCLK |= 0x80; //使能 PLL 倍頻,在輸入頻率低時(shí)產(chǎn)生高頻率的輸出
delay(222);//等待PLL鎖頻
//CLKSEL &= ~0x40; //默認(rèn) HSPWM/HSSPI 選擇主時(shí)鐘為時(shí)鐘源
CLKSEL |=0x40; // HSPWM/HSSPI 選擇PLL輸出為時(shí)鐘源96m
HSCLKDIV = 4; //HSPWM/HSSPI 時(shí)鐘源4分頻
    使用高速模式時(shí),有時(shí)需要改變相關(guān)寄存器的設(shè)置值,對(duì)SPI來講,沒什么問題,我通常在進(jìn)入高速模式前就把相關(guān)設(shè)置做完了。但在PWM應(yīng)用里,需要在程序運(yùn)行中改變有關(guān)PWM設(shè)置,這時(shí)官方數(shù)據(jù)手冊(cè)要求,不能直接讀寫XFR,而要通過異步模式,稍顯麻煩,不過也就是把一個(gè)賦值語句改成一個(gè)賦值函數(shù)了。下面是我使用的PWM高速模式時(shí)的讀寄存器函數(shù)和寫寄存器函數(shù)(在本例程中沒有使用,僅展示一下)。
char ReadPWMA(char addr)
{
char dat;
while (HSPWMA_ADR & 0x80); //等待前一個(gè)異步讀寫完成
HSPWMA_ADR = addr | 0x80; //設(shè)置間接訪問地址,只需要設(shè)置原 XFR 地址的低 7 位
//HSPWMA_ADR 寄存器的最高位寫 1,表示讀數(shù)據(jù)
        while (HSPWMA_ADR & 0x80); //等待當(dāng)前異步讀取完成
dat = HSPWMA_DAT; //讀取異步數(shù)據(jù)
return dat;
}
void WritePWMA(char addr, char dat)
{
while (HSPWMA_ADR & 0x80); //等待前一個(gè)異步讀寫完成
HSPWMA_DAT = dat; //準(zhǔn)備需要寫入的數(shù)據(jù)
HSPWMA_ADR = addr & 0x7f; //設(shè)置間接訪問地址,只需要設(shè)置原 XFR 地址的低 7 位
//HSPWMA_ADR 寄存器的最高位寫 0,表示寫數(shù)據(jù)
}
       溫度顯示器程序由六部分組成,主程序main.c.測(cè)溫模塊ds_driver.c,mcu設(shè)置模塊mcu_initial.c,彩屏驅(qū)動(dòng)模塊tft24_dvr_bydma.c(驅(qū)動(dòng)模塊是我自己使用的,其中有本例程用不到的函數(shù),我用/**/屏蔽起來了),屏幕固定顯示內(nèi)容模塊face.c,中斷跳轉(zhuǎn)模塊isr.asm,
    編程的目的是展示stc32g12k128的高速模式的使用和基于dma的彩屏驅(qū)動(dòng)的應(yīng)用。另外程序中曲線的顯示采用了邊擦邊畫的模式進(jìn)行刷新,是個(gè)人的一個(gè)想法。驗(yàn)證了一下可行性。做為一個(gè)初學(xué)者,我是想到什么都會(huì)去試試。
    例程在降龍棍核心板上運(yùn)行通過,下面給出一個(gè)參考電路圖。供不使用核心板的朋友參考。
    完整程序放在附件里了,希望對(duì)其它學(xué)習(xí)mcu的朋友有所幫助。也歡迎業(yè)界大佬來指點(diǎn)和吐槽。

圖一 時(shí)鐘關(guān)系圖

圖一 時(shí)鐘關(guān)系圖

推薦電路圖

推薦電路圖

實(shí)際電路

實(shí)際電路

屏面顯示

屏面顯示

thermometry_t.zip

184.8 KB, 下載次數(shù): 34, 下載積分: 黑幣 -5

溫度顯示器

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:433219 發(fā)表于 2023-2-24 16:26 | 顯示全部樓層
  文字太多沒仔細(xì)看,,,,有沒有說到,對(duì)這個(gè)TFT整屏刷新,耗時(shí)多少ms???

如果像大幕拉開的速度,就毫無意義
回復(fù)

使用道具 舉報(bào)

ID:1039438 發(fā)表于 2023-2-24 19:01 | 顯示全部樓層
我采用了DMA_SPI刷屏,很快的,沒有測(cè),正常能接受
回復(fù)

使用道具 舉報(bào)

ID:1039438 發(fā)表于 2023-2-24 19:04 | 顯示全部樓層
而且標(biāo)題上說明了,采用了高速模式,就是說系統(tǒng)時(shí)鐘是11.0592,但SPI口的頻率是24M
回復(fù)

使用道具 舉報(bào)

ID:1039438 發(fā)表于 2023-2-24 19:06 | 顯示全部樓層
我這個(gè)例程的重點(diǎn)不是應(yīng)用本身,而是分享SPI彩屏的驅(qū)動(dòng)用法,高速模式加硬件SPI加DMA
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人高清 | 精品视频久久久 | 亚洲精品视频一区二区三区 | 亚洲三区在线观看 | 日韩一区二区三区在线 | 日本不卡一区二区 | 九九国产 | 国产精品123区 | 亚洲综合一区二区三区 | 国产乱码久久久久久一区二区 | 秋霞a级毛片在线看 | 日本高清中文字幕 | 日韩在线不卡 | 欧美一级α片 | 国产精品毛片一区二区三区 | 尤物在线视频 | 国产精品视频网 | 日韩三级在线观看 | 91精品国产综合久久久久久丝袜 | 翔田千里一区二区 | 成人精品一区二区 | 伊人春色在线 | 超碰成人免费 | 国产福利在线播放麻豆 | 成人小视频在线观看 | 97久久久久久久久 | 精品国产91亚洲一区二区三区www | 国产精品小视频在线观看 | 成人在线播放 | 亚洲国产日韩一区 | 国产精品福利视频 | 国产精品免费在线 | 久久久久久免费精品一区二区三区 | 色必久久 | 午夜精品久久久久久久久久久久久 | 日韩欧美综合 | 欧洲性生活视频 | 国产在线视频一区二区 | 久久久av | 国产精品久久久久久久毛片 | 亚洲不卡视频 |