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