萬事開頭難,前兩天,我們已經建好了工程,寫了點亮led的程式,是不是感覺stm32也沒想象中那麼難?接下來,go on!
開發板上的led在閃爍著,間隔是多長時間呢?能不能讓它像鐘錶一樣,一秒閃一下呢?答案是肯定的。今天我的目標,就是教它「讀」秒~
還是上乙個函式,功能都有了,就是缺個精確的延時。說到「精確的延時」,大家首先想到的一定是定時器。對!就是它。翻開stm32的參考資料(cortex-m3技術參考手冊、cortex-m3權威指南、stm32f10***資料手冊,這些都可以),有個systick,就用它吧。一般人們把它叫做「系統節拍時鐘」,或者叫「滴答定時器」,因為它可以可靠的提供乙個精確的時鐘。本質上說,systick是個24位的計數器,計數完成,就中斷了,然後清零,過載,又計數。下邊還是通過程式來看,這個傢伙到底怎麼用的。
void systick_configuration(void)
systick_countercmd(systick_counter_disable); //systick計數失能;
systick_clksourceconfig(systick_clksource_hclk_div8);//systick時鐘為hclk8分頻;
systick_countercmd(systick_counter_clear); //清除systick計數器;
systick_setreload(9000*1000); //設定systick過載值;
根據上次的程式,可以輕易的推測void systick_configuration(void)是systick的配置函式,而且,要在工程lib檔案中新增stm32f10x_systick.c。裡面的設定和我們以前用定時器很相似,先失能(遮蔽中斷),在清除計數器(清除中斷標誌位),然後設定計數值。(這麼說我都覺得有些牽強···)計數值怎麼算呢?這要根據時鐘源了。前面的rcc_configuration()函式設定hclk為72mhz,上面的函式中,systick時鐘源是hclk8分頻,也就是f=9mhz,那麼,t=1/9m,1s=t*n,所以過載值n=9000000。還要注意一下,systick是cortex-m3的「內設」,不需要用rcc來開啟時鐘。
這個只是初始化配置,用的時候有是怎樣呢?
void delay_second(void)
systick_countercmd(systick_counter_enable); //systick使能;
while(systick_getflagstatus(systick_flag_count)== 0); //等待systick計數至0;
systick_countercmd(systick_counter_disable); //systick計數失能;
systick_countercmd(systick_counter_clear); //清除systick計數器;
那一刻的綻放
那一刻的綻放 青色的湖面倒映著碧藍的天空,在雪山山尖的那抹白色的映襯下顯的愈發平靜,甚至有些慵懶。這其中孕育著美麗,這美麗則因中國綻放。青海湖波光粼粼的湖面與天空透明的藍色交織著,呈現出一種好看的微青,延伸至地平線。展翅的鳥兒與雲朵點綴在其間,使其藍得更加澄澈。然而這一路的好心情在到了我們要住下的民...
那一刻,真想擁她入懷
廈門 晴 2005年8月1日 於8月3日為8月1日補上一筆,今天應該是個可以紀念的日子。同家人在廈門玩了一天,其實旅遊對我來說應該就是一種心情,到 應該都差不多,重要的自己是否真正得到了旅遊的快樂,大部分時間都是很可惜的,因為至今我還沒有發現旅遊的快樂,自己更傾向的是那種徒步走過,真真正正融入到各地...
幸福只是在那一刻
幸福只是在那一刻,大家都知道筆者很喜歡寫文章記錄往事。幸福我們相聚的時刻。因為這樣的機會很少,所以我們要珍惜。上次網路營銷大會,我遇到了我的前同事,心裡還是很激動的。經理請我吃了飯,激動的不是飯而是對我的那份情。我是乙個不怎麼會交流的人,懷念曾經一起和你們的日子,懷念你照顧我的日子,這些是我永遠不會...