關(guān)于STM32開發(fā)板晶振相關(guān)的問題匯總
1、自己做了個(gè)STM32的板子,但是手里沒有8M的晶振,所以就用了,12M的,但是不正常,上電之后PA15和PA14接的是兩個(gè)led,PA15接的led常亮,PA14接的的led不亮,而且芯片下載程序又能下載,應(yīng)該不是芯片壞的問題吧,而且不管我些什么程序進(jìn)去,兩個(gè)腳的狀態(tài)都不變,我懷疑是電路有問題,可是我仔細(xì)檢查了電路和板子,都沒問題,JTAG正常使用。我用的是12M的晶振,這會(huì)有影響嗎?感覺不管下什么程序進(jìn)去感覺芯片好像沒有運(yùn)行。
答:如果使用12M的晶振,那么要修改啟動(dòng)文檔中的關(guān)于RCC的語句。因?yàn)槿绻闶褂脦?kù)文件的話,ST的庫(kù),默認(rèn)外部晶振是8M,所以如果你不修改RCC部分的語句,會(huì)造成CPU不啟動(dòng),或者啟動(dòng)不成功?,F(xiàn)象是,在MDK環(huán)境下,能夠通過JTAG識(shí)別到芯片,但是無法下載或者debug。會(huì)提示can not attach CPU。
2、突然想到這個(gè)問題,外部無源晶振選擇大小的區(qū)別是什么?對(duì)STM32芯片它都要先分頻,再倍頻。我在想,假設(shè),如果它分頻都要降到2M,再倍頻上去那我直接2M的晶振1分頻再倍頻,跟24M先12分頻再倍頻他們的區(qū)別是什么?還是說本身就是任意的,根據(jù)自己需要選擇?
答:方便各種應(yīng)用場(chǎng)景。
3、自己做的STM32F103RBT6板子,外接8M晶振,現(xiàn)在程序下載正常,運(yùn)行正常,在程序初始化時(shí)用到Stm32_Clock_Init(9)這條語句,我想問下是不是外部晶振如果沒起振在執(zhí)行這條語句時(shí)會(huì)停止?也就是說我的程序下載和運(yùn)行都正常說明外部晶振肯定起振了,而且已經(jīng)倍頻到72M了。
答:默認(rèn)是用內(nèi)部8M RC震蕩的,你切換為PLL之后,才是使用8M倍頻的,如果你注釋掉Stm32_Clock_Init(9),那么代碼也會(huì)跑,但是是用內(nèi)部8M RC震蕩。
4、外部晶振換成了25MHz,但是想方便的移植以前8MHz板子上程序,應(yīng)該怎么修改系統(tǒng)時(shí)鐘?看了system_stm32f10x.c系統(tǒng)時(shí)鐘設(shè)置,但是不知道怎么修改!下面參數(shù)是system_stm32f10x.c系統(tǒng)時(shí)鐘設(shè)置
//默認(rèn)SYSCLK_FREQ_72MHz 可在system_stm32f10x.c改變?cè)O(shè)置。
//默認(rèn) HCLK = SYSCLK;
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
//默認(rèn) PCLK2 = HCLK
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
//默認(rèn) PCLK1 = HCLK
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
//默認(rèn) PLL as system clock source; RCC_CFGR_SW_PLL;
答:25M不用想了,必須是25的整數(shù)倍才行。
要是把它設(shè)置成75MHz 具體怎么修改哪些配置參數(shù)?25*3=75,設(shè)置倍頻數(shù)為3。但是庫(kù)函數(shù)這個(gè)不懂,寄存器的就很簡(jiǎn)單。
5、STM32的RTC不能用,想確定是否硬件問題。但不知道測(cè)量的是哪2個(gè)引腳。
答:1,去掉RTC晶振的電容。
2,換晶振。
如果1、2還不行,多換幾個(gè)晶振;如果還不行,換MCU。換到能用為止; STM32的RTC,就這么蛋疼。
6、手頭有幾塊RTC初始化不成功的,到底是啥原因,用示波器也看不到波形,一共有30塊板子大概有5塊出現(xiàn)這種問題,時(shí)鐘不正常,其中拿一塊是換了IC,然后OK的,不會(huì)是IC問題吧,如果是IC問題,那后期生產(chǎn)不好弄啊。
答:就算你用6pf負(fù)載電容晶振,STM32的rtc還是會(huì)有一部分不能起振的。如果產(chǎn)品確實(shí)需要RTC功能,我建議你還是外加RTC芯片靠譜點(diǎn)。
7、32K內(nèi)部晶振、16M內(nèi)部晶振、32K外部晶振,弱弱的想有16M的可以分頻還要那兩個(gè)干嘛啊,為什么分內(nèi)外啊16M的為什么不設(shè)成外部晶振呢?以下是百度的一段話,外部晶振穩(wěn)定內(nèi)部晶振的誤差比較大,但如果對(duì)頻率要求不高的話(比如不涉及串口通信和精確定時(shí)等的話,用內(nèi)部晶振就行。內(nèi)部時(shí)鐘,頻率受溫度等其它影響,但是能省下晶振的錢,還有2個(gè)I/O。如果對(duì)頻率要求不高,一般是優(yōu)先選用內(nèi)部振蕩。如果你要省電,用了SLEEP,那你就不能用內(nèi)部振蕩了,內(nèi)部振蕩回停止!
答:STM32一般推薦用內(nèi)部8MRC或者外部8M晶振。你這個(gè)16M,除非個(gè)人癖好,一般沒必要用。 用內(nèi)部還是外部,主要看你自己的考慮了。理論上說,外部準(zhǔn)確度高,用到USB通信的時(shí)候,建議用外部晶振。另外,內(nèi)部RC是無法倍頻到72M的,最高是4*16=64Mhz。但是內(nèi)部晶振如你所說:1、不占空間。2、省成本。所以,底用內(nèi)部還是用外部,根據(jù)自己需求來就可以了。
8、求一個(gè)用內(nèi)部晶振HSI作系統(tǒng)時(shí)鐘源的系統(tǒng)時(shí)鐘配置函數(shù)。最好是寄存器版的。
答:把我們的Stm32_Clock_Init屏蔽,用的就是內(nèi)部8M RC震蕩了。
9、焊接了一個(gè)STM32F103C8T6的最小系統(tǒng),晶振是16MHZ,程序不能正常運(yùn)行?怎樣修改哪些程序使芯片的還是在72MHZ下工作。只用下面這個(gè)函數(shù)修改時(shí)鐘,但是程序還是不能運(yùn)行,串口發(fā)送數(shù)據(jù)一堆沒用的數(shù)據(jù)。該怎樣設(shè)置???
答:修改SetSysClockTo72函數(shù)中有關(guān)時(shí)鐘配置的地方。
RCC->CFGR&=(uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
RCC->CFGR=(uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL9);
以上是8M晶振的設(shè)置,把分頻和倍頻改成你要的值。
10、請(qǐng)問在“OptionforTarget”里的“Target”的XTAL填的MHZ數(shù)就是開發(fā)板上那個(gè)兩頭圓的晶振的參數(shù)嗎,我的那個(gè)上面顯示的Y8.000,是不是就填8就可以了。另外,還有一個(gè)圓柱形兩個(gè)管腳的聽說那也是晶振,那“Target”里XTAL的參數(shù)到底該照誰的填?ALIENTEK教程里的源代碼默認(rèn)都是72MHZ,應(yīng)該都要改吧。
答:填8M,32.768K是rtc晶振不用填。
11、STM32沒有8M的外部晶振,依然可以運(yùn)行跑馬燈實(shí)驗(yàn)(程序設(shè)定使用外部晶振),有人知道是為啥不?自己焊了一塊板子,沒有接外部的8MHZ晶振,可是將原子的跑馬燈程序下載進(jìn)去之后,小燈竟然間歇性的閃爍了。可是原子的程序里面明明是用的外部晶振??!
答:沒外部的直接切換到內(nèi)部晶振。
12、stm32f103c8t6的五六腳應(yīng)該接多大的晶振?
答:系統(tǒng)時(shí)鐘(SYSCLK)有3個(gè)來源,內(nèi)部高速8M時(shí)鐘(HSI),PLL時(shí)鐘和外部高速時(shí)鐘(56腳接的HSE),而PLL時(shí)鐘又有2個(gè)來源,即內(nèi)部高速時(shí)鐘2分頻(HSI/2=4M)和外部高速時(shí)鐘(HSE)。通常SYSCLK常用PLL倍頻而來,當(dāng)SYSCLK=72M,外部(5-6腳)接8M晶振,經(jīng)過9倍頻即為72M,如果外部使用12M,那只需要6倍頻即可得到72M SYSCLK,具體的細(xì)節(jié)請(qǐng)參考STM32參考手冊(cè)6.2節(jié)(那個(gè)時(shí)鐘樹很清晰明了)。
13、戰(zhàn)艦stm32開發(fā)板上,32.768K晶振電路的作用?這部分電路有什么作用???去掉會(huì)有什么影響嗎?提供時(shí)鐘的不是8M晶振那部分時(shí)鐘電路嗎?
答:建議你看看時(shí)鐘樹,32.768可以做RTC的時(shí)鐘源。
14、系統(tǒng)時(shí)鐘可以由內(nèi)部時(shí)鐘RC振蕩器、外部時(shí)鐘、鎖相環(huán)三者提供,那么設(shè)置成內(nèi)部時(shí)鐘,是不用外部放置8M晶振了?
答:可以用內(nèi)部時(shí)鐘,不用接外部晶振,只是外部時(shí)鐘更好一些。
15、如果不用RTC,最小系統(tǒng)可以去掉一個(gè)晶振嗎?最近正在自制32的最小系統(tǒng),用來參加電設(shè)比賽的,感覺用不上RTC的功能。請(qǐng)問可以把32.768K的晶振部分去掉,當(dāng)作普通IO口使用嗎?
答:是的,不過32.768K晶振那兩個(gè)腳當(dāng)GPIO用的話,驅(qū)動(dòng)能力會(huì)比其它的弱,具體的看手冊(cè)上有具體說明。
16、做最小系統(tǒng)版的時(shí)候晶振布在底層是否會(huì)有影響?
答:放在底層或者頂層沒什么影響,但是晶振最好靠近芯片,晶振下面也最好不要走線。
17、疑問?對(duì)于PCLK1是高速時(shí)鐘,手冊(cè)高速我們是不能超過36M,如果配置他為系統(tǒng)時(shí)鐘,會(huì)有哪些影響。我有一份代碼一直都是按照系統(tǒng)時(shí)鐘運(yùn)行的,所以,我也不清楚會(huì)造成什么問題?
答:系統(tǒng)時(shí)鐘是HCLK,不是PCLK1,PCLK1是無法設(shè)置為系統(tǒng)時(shí)鐘的。
18、最近開始畫原理圖,首先就是最小系統(tǒng)啦,參考戰(zhàn)艦開發(fā)板、某火開發(fā)板、官方的硬件開發(fā)使用入門的外部晶振電路,都各不相同,又看了ST的晶體振蕩器電路設(shè)計(jì)指南,還是有些不懂啊。我的理解是調(diào)整兩個(gè)外部電容,使之與晶振的負(fù)載電容相等,看看戰(zhàn)艦板上是22pF,難道8M晶振的負(fù)載電容是10pF?還有并聯(lián)1M的電阻起什么作用呢?不加限流電阻是因?yàn)榫д窆牡停?/p>
答:因?yàn)槊恳环N晶振都有各自的特性,所以最好按制造廠商所提供的數(shù)值選擇外部元器件。
?、僭谠S可范圍內(nèi),C1,C2值越低越好。C值偏大雖有利于振蕩器的穩(wěn)定,但將會(huì)增加起振時(shí)間。
?、诠ぷ髁己玫恼袷幉ㄐ螒?yīng)該是一個(gè)漂亮的正弦波,峰峰值應(yīng)該大于電源電壓的70%。
若峰峰值小于70%,可適當(dāng)減小OSCI及OSCO管腳上的外接負(fù)載電容。
反之,若峰峰值接近電源電壓且振蕩波形發(fā)生畸變,則可適當(dāng)增加負(fù)載電容。
例子:若取中心值15pF,則C1,C2各取30pF可得到其串聯(lián)等效電容值15pF,這個(gè)值與晶振內(nèi)部等效電容接近最好。
如果要達(dá)到8pF(內(nèi)部電容的),則要選擇外部?jī)蓚€(gè)電容為15pF。
通常廠家建議的外接負(fù)載電容為10~30pF左右。并且C1,C2使用瓷片電容為佳。
③用示波器檢測(cè)OSCI(Oscillator input)管腳,容易導(dǎo)致振蕩器停振,原因是:部分的探頭阻抗小不可以直接測(cè)試,可以用串電容的方法來進(jìn)行測(cè)試。
?、墚?dāng)波形出現(xiàn)削峰,畸變時(shí),可增加負(fù)載電阻調(diào)整(幾十K到幾百K)。要穩(wěn)定波形是并聯(lián)一個(gè)1M左右的反饋電阻,電阻使穩(wěn)定,并加速晶振起振時(shí)間。