從51開始,單片機(jī)玩了很長時(shí)間了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直沒有開始,原因-----不知道玩了ARM可以做什么(對我自己而言)。如果為學(xué)習(xí)而學(xué)習(xí),肯定學(xué)不好。然后cortex-m3出來了,據(jù)說,這東西可以替代單片機(jī),于是馬上開始關(guān)注。也在第一時(shí)間開始學(xué)習(xí),可惜一開始就有點(diǎn)站錯(cuò)了隊(duì),選錯(cuò)了型(仍是對我自己而言)。我希望這種芯片應(yīng)該是滿大街都是,隨便哪里都可以買得到,但我選的第一種顯然做不到。為此,大概浪費(fèi)了一年多時(shí)間吧,現(xiàn)在,回到對我來說是正確的道路上來啦,邊學(xué)邊寫點(diǎn)東西。
這里寫的是我的學(xué)習(xí)的過程,顯然,很多時(shí)候會是不全面的,不系統(tǒng)的,感悟式的,甚至有時(shí)會是錯(cuò)誤的,有些做法會是不專業(yè)的。那么,為什么我還要寫呢?這是一個(gè)有趣的問題,它甚至涉及到博客為什么要存在的問題。顯然,博客里面的寫的東西,其正確性、權(quán)威性大多沒法和書比,可為什么博客會存在呢?理由很多,我非專家,只說我的感慨。
我們讀武俠小說,總會有一些創(chuàng)出獨(dú)門功夫的宗師,功夫極高,然后他的弟子則基本上無法超越他。我在想,這位宗師在創(chuàng)造他自己的獨(dú)門功夫時(shí),必然會有很多的次的曲折、彎路、甚至失敗,會浪費(fèi)他的很多時(shí)間,而他教給弟子時(shí),則已去掉了這些曲折和彎路,當(dāng)然更不會把失敗教給弟子,按理說,效率應(yīng)該更高,可是沒用,弟子大都不如師。為什么呢?也許知識本身并不是最重要的,獲取知識的過程才是最重要的?也許所謂的知識,并不僅僅是一條條的結(jié)論,而是附帶著很多說不清道不明的東西?如植物的根,一條主根上必帶有大量的小小的觸須?
閑話多了些,就權(quán)當(dāng)前言了。下面準(zhǔn)備開始。
詳情參閱:STM32單片機(jī)小Tips(1):充分準(zhǔn)備與開始編程
勉勉強(qiáng)強(qiáng)看懂一行程序
繼續(xù)學(xué)習(xí)中,先把開發(fā)板自帶一個(gè)例子做了些精簡,以免看得嚇人。。。。
就是這個(gè),讓PORTD上接的4個(gè)LED分別點(diǎn)亮。
開始研究代碼
int main(void)
{
Init_All_Periph();
。。。。。。
看到這一行,開始跟蹤,于是又看到了下面的內(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();
}
這一長串的又是什么,如何來用呢?看來,偷懶是不成的了,只能回過頭去研究STM32的時(shí)鐘構(gòu)成了。
相當(dāng)?shù)膹?fù)雜。
工程師STM32單片機(jī)學(xué)習(xí)基礎(chǔ)手記(2):從勉強(qiáng)看懂一行程序到IO口研究
STM學(xué)習(xí)筆記——用定時(shí)器實(shí)現(xiàn)熒火蟲燈
在第6篇筆記中,我用軟件延時(shí)的方法實(shí)現(xiàn)了熒火蟲,學(xué)了定時(shí)器,當(dāng)然就要用一用定時(shí)器了,這里仍是用熒火蟲燈為例。
用ST庫所帶的例子Tim中的TimBase為例來修改,這個(gè)例子的位置以及如何建立工程請參考第7篇筆記,這里就不再重復(fù)了,下面簡述一下修改的過程。
?。?) 由于我的板子上的燈是由PD8~PD11來控制的,因此,要將
void RCC_Configuration(void)
中的:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //打開GPIOC的時(shí)鐘
改為
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //打開GPIOD的時(shí)鐘
?。?) 將四個(gè)通道全部設(shè)置為TIM_OCMode_Toggle模式,即將
/* Output Compare Timing Mode configuration: Channel1 *
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
改為:
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
?。?)例子中原來中斷產(chǎn)生的頻率很低,是不適合于做這種熒火蟲燈的,但為了比較,我只改了最后一個(gè)值:
詳情參閱:工程師STM32單片機(jī)學(xué)習(xí)手記(3):修修改改玩串口
從51開始,單片機(jī)玩了很長時(shí)間了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直沒有開始,原因-----不知道玩了ARM可以做什么(對我自己而言)。如果為學(xué)習(xí)而學(xué)習(xí),肯定學(xué)不好。然后cortex-m3出來了,據(jù)說,這東西可以替代單片機(jī),于是馬上開始關(guān)注。也在第一時(shí)間開始學(xué)習(xí),可惜一開始就有點(diǎn)站錯(cuò)了隊(duì),選錯(cuò)了型(仍是對我自己而言)。我希望這種芯片應(yīng)該是滿大街都是,隨便哪里都可以買得到,但我選的第一種顯然做不到。為此,大概浪費(fèi)了一年多時(shí)間吧,現(xiàn)在,回到對我來說是正確的道路上來啦,邊學(xué)邊寫點(diǎn)東西。
這里寫的是我的學(xué)習(xí)的過程,顯然,很多時(shí)候會是不全面的,不系統(tǒng)的,感悟式的,甚至有時(shí)會是錯(cuò)誤的,有些做法會是不專業(yè)的。那么,為什么我還要寫呢?這是一個(gè)有趣的問題,它甚至涉及到博客為什么要存在的問題。顯然,博客里面的寫的東西,其正確性、權(quán)威性大多沒法和書比,可為什么博客會存在呢?理由很多,我非專家,只說作為一個(gè)學(xué)習(xí)32位單片機(jī)的工程師角度來分享整個(gè)學(xué)習(xí)過程,整理成一個(gè)學(xué)習(xí)手記,也便于以后文檔備份。
詳情參閱:STM32學(xué)習(xí)手記(5):數(shù)據(jù)的保存與毀滅!
STM32單片機(jī)小Tips之RTC實(shí)踐
BKP還沒有搞完,怎么又換到了RTC上了,因?yàn)镽TC和BKP有些聯(lián)系,想不關(guān)聯(lián)還不行呢。
以下是數(shù)據(jù)手冊上有關(guān)RTC的介紹:
******介紹開始
15.1 RTC 簡介
實(shí)時(shí)時(shí)鐘是一個(gè)獨(dú)立的定時(shí)器。RTC模塊擁有一組連續(xù)計(jì)數(shù)的計(jì)數(shù)器,在相應(yīng)軟件配置下,可提供時(shí)鐘日歷的功能。修改計(jì)數(shù)器的值可以重新設(shè)置系統(tǒng)當(dāng)前的時(shí)間和日期。
RTC模塊和時(shí)鐘配置系統(tǒng)(RCC_BDCR寄存器)是在后備區(qū)域,即在系統(tǒng)復(fù)位或從待機(jī)模式喚醒后RTC的設(shè)置和時(shí)間維持不變。
詳情參閱:STM32單片機(jī)小Tips(6):玩轉(zhuǎn)IAR,開發(fā)STM32
?
評論