從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)該是滿大街都是,隨便哪里都可以買(mǎi)得到,但我選的第一種顯然做不到。為此,大概浪費(fèi)了一年多時(shí)間吧,現(xiàn)在,回到對(duì)我來(lái)說(shuō)是正確的道路上來(lái)啦,邊學(xué)邊寫(xiě)點(diǎn)東西。
這里寫(xiě)的是我的學(xué)習(xí)的過(guò)程,顯然,很多時(shí)候會(huì)是不全面的,不系統(tǒng)的,感悟式的,甚至有時(shí)會(huì)是錯(cuò)誤的,有些做法會(huì)是不專業(yè)的。那么,為什么我還要寫(xiě)呢?這是一個(gè)有趣的問(wèn)題,它甚至涉及到博客為什么要存在的問(wèn)題。顯然,博客里面的寫(xiě)的東西,其正確性、權(quán)威性大多沒(méi)法和書(shū)比,可為什么博客會(huì)存在呢?理由很多,我非專家,只說(shuō)我的感慨。
我們讀武俠小說(shuō),總會(huì)有一些創(chuàng)出獨(dú)門(mén)功夫的宗師,功夫極高,然后他的弟子則基本上無(wú)法超越他。我在想,這位宗師在創(chuàng)造他自己的獨(dú)門(mén)功夫時(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ù)雜。
工程師STM32單片機(jī)學(xué)習(xí)基礎(chǔ)手記(2):從勉強(qiáng)看懂一行程序到IO口研究
STM學(xué)習(xí)筆記——用定時(shí)器實(shí)現(xiàn)熒火蟲(chóng)燈
在第6篇筆記中,我用軟件延時(shí)的方法實(shí)現(xiàn)了熒火蟲(chóng),學(xué)了定時(shí)器,當(dāng)然就要用一用定時(shí)器了,這里仍是用熒火蟲(chóng)燈為例。
用ST庫(kù)所帶的例子Tim中的TimBase為例來(lái)修改,這個(gè)例子的位置以及如何建立工程請(qǐng)參考第7篇筆記,這里就不再重復(fù)了,下面簡(jiǎn)述一下修改的過(guò)程。
?。?) 由于我的板子上的燈是由PD8~PD11來(lái)控制的,因此,要將
void RCC_Configuration(void)
中的:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //打開(kāi)GPIOC的時(shí)鐘
改為
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //打開(kāi)GPIOD的時(shí)鐘
(2) 將四個(gè)通道全部設(shè)置為T(mén)IM_OCMode_Toggle模式,即將
/* Output Compare Timing Mode configuration: Channel1 *
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
改為:
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
(3)例子中原來(lái)中斷產(chǎn)生的頻率很低,是不適合于做這種熒火蟲(chóng)燈的,但為了比較,我只改了最后一個(gè)值:
詳情參閱:工程師STM32單片機(jī)學(xué)習(xí)手記(3):修修改改玩串口
從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)該是滿大街都是,隨便哪里都可以買(mǎi)得到,但我選的第一種顯然做不到。為此,大概浪費(fèi)了一年多時(shí)間吧,現(xiàn)在,回到對(duì)我來(lái)說(shuō)是正確的道路上來(lái)啦,邊學(xué)邊寫(xiě)點(diǎn)東西。
這里寫(xiě)的是我的學(xué)習(xí)的過(guò)程,顯然,很多時(shí)候會(huì)是不全面的,不系統(tǒng)的,感悟式的,甚至有時(shí)會(huì)是錯(cuò)誤的,有些做法會(huì)是不專業(yè)的。那么,為什么我還要寫(xiě)呢?這是一個(gè)有趣的問(wèn)題,它甚至涉及到博客為什么要存在的問(wèn)題。顯然,博客里面的寫(xiě)的東西,其正確性、權(quán)威性大多沒(méi)法和書(shū)比,可為什么博客會(huì)存在呢?理由很多,我非專家,只說(shuō)作為一個(gè)學(xué)習(xí)32位單片機(jī)的工程師角度來(lái)分享整個(gè)學(xué)習(xí)過(guò)程,整理成一個(gè)學(xué)習(xí)手記,也便于以后文檔備份。
詳情參閱:STM32學(xué)習(xí)手記(5):數(shù)據(jù)的保存與毀滅!
STM32單片機(jī)小Tips之RTC實(shí)踐
BKP還沒(méi)有搞完,怎么又換到了RTC上了,因?yàn)镽TC和BKP有些聯(lián)系,想不關(guān)聯(lián)還不行呢。
以下是數(shù)據(jù)手冊(cè)上有關(guān)RTC的介紹:
******介紹開(kāi)始
15.1 RTC 簡(jiǎn)介
實(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,開(kāi)發(fā)STM32
?
評(píng)論