從51開(kāi)始,單片機(jī)玩了很長(zhǎng)時(shí)間了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直沒(méi)有開(kāi)始,原因-----不知道玩了ARM可以做什么(對(duì)我自己而言)。如果為學(xué)習(xí)而學(xué)習(xí),肯定學(xué)不好。然后cortex-m3出來(lái)了,據(jù)說(shuō),這東西可以替代單片機(jī),于是馬上開(kāi)始關(guān)注。也在第一時(shí)間開(kāi)始學(xué)習(xí),可惜一開(kāi)始就有點(diǎn)站錯(cuò)了隊(duì),選錯(cuò)了型(仍是對(duì)我自己而言)。我希望這種芯片應(yīng)該是滿大街都是,隨便哪里都可以買得到,但我選的第一種顯然做不到。為此,大概浪費(fèi)了一年多時(shí)間吧,現(xiàn)在,回到對(duì)我來(lái)說(shuō)是正確的道路上來(lái)啦,邊學(xué)邊寫點(diǎn)東西。

這里寫的是我的學(xué)習(xí)的過(guò)程,顯然,很多時(shí)候會(huì)是不全面的,不系統(tǒng)的,感悟式的,甚至有時(shí)會(huì)是錯(cuò)誤的,有些做法會(huì)是不專業(yè)的。那么,為什么我還要寫呢?這是一個(gè)有趣的問(wèn)題,它甚至涉及到博客為什么要存在的問(wèn)題。顯然,博客里面的寫的東西,其正確性、權(quán)威性大多沒(méi)法和書比,可為什么博客會(huì)存在呢?理由很多,我非專家,只說(shuō)我的感慨。
我們讀武俠小說(shuō),總會(huì)有一些創(chuàng)出獨(dú)門功夫的宗師,功夫極高,然后他的弟子則基本上無(wú)法超越他。我在想,這位宗師在創(chuàng)造他自己的獨(dú)門功夫時(shí),必然會(huì)有很多的次的曲折、彎路、甚至失敗,會(huì)浪費(fèi)他的很多時(shí)間,而他教給弟子時(shí),則已去掉了這些曲折和彎路,當(dāng)然更不會(huì)把失敗教給弟子,按理說(shuō),效率應(yīng)該更高,可是沒(méi)用,弟子大都不如師。為什么呢?也許知識(shí)本身并不是最重要的,獲取知識(shí)的過(guò)程才是最重要的?也許所謂的知識(shí),并不僅僅是一條條的結(jié)論,而是附帶著很多說(shuō)不清道不明的東西?如植物的根,一條主根上必帶有大量的小小的觸須?
閑話多了些,就權(quán)當(dāng)前言了。下面準(zhǔn)備開(kāi)始。
詳情參閱:STM32單片機(jī)小Tips(1):充分準(zhǔn)備與開(kāi)始編程
勉勉強(qiáng)強(qiáng)看懂一行程序
繼續(xù)學(xué)習(xí)中,先把開(kāi)發(fā)板自帶一個(gè)例子做了些精簡(jiǎn),以免看得嚇人。。。。
就是這個(gè),讓PORTD上接的4個(gè)LED分別點(diǎn)亮。
開(kāi)始研究代碼
int main(void)
{
Init_All_Periph();
。。。。。。
看到這一行,開(kāi)始跟蹤,于是又看到了下面的內(nèi)容
void Init_All_Periph(void)
{
RCC_Configuration();
。。。。。。
繼續(xù)跟蹤
void RCC_Configuration(void)
{
SystemInit();
。。。。。。
這行代碼在system_stm32f10x.c中找到了。
void SystemInit (void)
{
/* Reset the RCC clock configuration to the default reset state(for debug purpose) */
/* Set HSION bit */
RCC-》CR |= (uint32_t)0x00000001;
/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
RCC-》CFGR &= (uint32_t)0xF8FF0000;
#else
RCC-》CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */
/* Reset HSEON, CSSON and PLLON bits */
RCC-》CR &= (uint32_t)0xFEF6FFFF;
/* Reset HSEBYP bit */
RCC-》CR &= (uint32_t)0xFFFBFFFF;
/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
RCC-》CFGR &= (uint32_t)0xFF80FFFF;
#ifndef STM32F10X_CL
/* Disable all interrupts and clear pending bits */
RCC-》CIR = 0x009F0000;
#else
/* Reset PLL2ON and PLL3ON bits */
RCC-》CR &= (uint32_t)0xEBFFFFFF;
/* Disable all interrupts and clear pending bits */
RCC-》CIR = 0x00FF0000;
/* Reset CFGR2 register */
RCC-》CFGR2 = 0x00000000;
#endif /* STM32F10X_CL */
/* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
/* Configure the Flash Latency cycles and enable prefetch buffer */
SetSysClock();
}
這一長(zhǎng)串的又是什么,如何來(lái)用呢?看來(lái),偷懶是不成的了,只能回過(guò)頭去研究STM32的時(shí)鐘構(gòu)成了。
相當(dāng)?shù)膹?fù)雜。
電子發(fā)燒友App








評(píng)論