亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > STM32F030 Nucleo-讓MCU全速點燈,其中隱藏的含義

STM32F030 Nucleo-讓MCU全速點燈,其中隱藏的含義 時間:2018-08-16      來源:未知

只要是有點基礎的騷友,點個燈就是個小KS!但是,我卻發現一些貓膩!!!先看程序:

從牛卡板卡的硬件原理圖得知LD1為ST-Link的RGB指示燈,LD3為牛客板卡的電源指示燈,那么只剩下LD2了,LD2為有主控MCU(STM32F030)控制的LED燈,

如下圖:

I/O:LD2--------GPIOA5

條件:SB21、SB42焊接或短路

點亮LD2條件:GPIOA5輸出高電平

以上是從原理圖中得到的信息,在檢查牛卡板卡!OK!SB21、SB42已經用0歐電阻連接了!那么硬件電路沒問題了!(其實板卡一上電,默認的程序就使LD2閃爍了,我在這里主要只是表現一下分析思路。

那么我的程序如下:

Led_Divice.c

Led_Divice.h

Main.c

程序寫好后!嗨!跑的蠻快啊!牛客板卡中STM32F030沒有焊接8M(4~36M)晶振,只有一個很黑一坨的32.768KHz大小的晶振作為RTC的振蕩源。而且我故意延時了那么久!它居然跑的很快!!!

唉!不管了,先驗證一下看會不會跑的更快!

然后我就再寫了一個函數:

如下:

上圖的函數中,我使用了STM32的內部RC振蕩器作為系統鎖相環PLL的時鐘源,配置思路如下:

(1)開啟內部RC振蕩器HSI,作為時鐘源

(2)打開Flash的存取BUFF

(3)配置HCLK為四天時鐘SYSCLK的1分頻

(4)配置PCLK為HCLK的1分頻

(5)HSI的2分頻作為鎖相環(PLL)的時鐘源,并倍頻為12,即設置鎖相環的時鐘為48MHz,并使能鎖相環,等待鎖相環啟動成功

(6)設置鎖相環時鐘為系統時鐘

(7)等待時鐘啟動成功

從以上的設置來看,AHB和APB總線的時鐘都為48M,依據是:在DataSheet中表21說明AHB、APB、HCLK、PCLK可以大能達到48MHz。如下圖:

所以肯定要跑的快!哈哈!

那么時鐘設置的思路源于什么呢???

三個字“時鐘樹”即“Clock Tree”.見下圖:

以上程序的思路就源于此圖的綠色線條了!哈哈!而且在時鐘樹中明明白白的標出了,當使用HSI作為PLL的時鐘源時,必須2分頻,所以就有:(8M/2) * 12 = 40MHz了。當然!其實STM32默認是走藍色線的,也就是當沒有任何設置是,系統默認時鐘為8MHz,其他的就看分頻了。

那么其實還需要注意一點:在看時鐘樹的時候,寫程序的時候要注意看看圖或者表在上面和下面的說明,別傻乎乎的就直接操作了,萬一碰到人家逆鱗了,人家就不給你工作了。上面的要找對自己的MCU(因為手冊都是以系列劃分的,區別是封裝、資源和內存(Flash和RAM)大小不同)。

對的!這個圖就是我們的STM32F030R8T6的時鐘樹下面的說明了。意思是,對于LSI/LSE不適用與STM32F030x8這個系列的MCU,所以當我們使用到STM32F030x8 MCU的時候,就別亂玩LSI和LSE這東西。比如牛客板上的STM32F030R8T6就不行。

OK!程序寫好了!那么調用驗證一下唄!看看是不是跑的更快了!

速度一樣的!沒變!啥情況呢????

其實!原因是這樣的!在程序進入Main開始執行之前,就已經配置過時鐘了!并且配置的效果和我上面那個函數:void RCC_Configuration(void)的效果是一樣的。

也就是說,就算我們不自己配置系統時鐘,ST也默認幫我們配置好了!使用HSI作為振蕩源,PLL作為系統時鐘源,所以跑起來SYSCLK也是48MHz,所以跑的速度也就一樣快了啊!

在這里廢話幾句:上面/下面所說的跑的快,其實就是MCU的運行速度,執行指令的速度,那么在我上面的程序的效果就是,LD2閃爍的速度!那么怎么驗證我上面的正確性呢??其實很簡單!調用如下:

進入main函數之后,第一件事就是把系統時鐘恢復默認值,在燒錄程序,再看效果!就能很明顯的看到,這LD2閃爍的是有多慢了!

RCC_DeInit();是外設標準庫提供的函數,當然,想操作寄存器就自己寫吧!哈哈!具體的位置就是stm32f0xx_rcc.h,stm32f0xx_rcc.c文件中。所有關于RCC的內容都在這兩個文件中找到,(其實ST提供了庫函數手冊,這個更方便了)。

那么問題就止于此了嗎????不是的!這只是問題的開始!哈哈哈!否則點個燈我就沒必要廢話那么多了!

我們要分析一下,到底在進入Main之前都干了啥???為什么把時鐘都設置了。

或許有些童鞋就說了,上課時/在很多C語言書上不是說C語言是從main函數開始執行的么??我簡單的回答一下這個問題:首先,我們初學時的C語言是標準的ANSI C語言,它運行的平臺通常是在操作系統之上,那么也就是所,我們用戶編寫的用戶程序肯定是從main開始了啊,因為在main之前的東西普通程序員是看不到的啊,比如PC機的BIOS和Windows內核我們也看不到也沒必要看,也不用關心,所以用戶程序肯定是從main開始執行的。但是作為嵌入式驅動開發工程師,那么main之前的是就需要連接、理解了,否則寫毛驅動啊!在main之前通常都是一下匯編代碼或者內嵌匯編代碼。一個硬件的啟動應該是這樣的:

(1)異常向量表/中斷向量表的建立

(2)必要的硬件、寄存器、內存等初始化,這部分通常是有匯編代碼實現

(3)堆棧的初始化

(4)進入用戶程序前的初始化

真實的CPU啟動要復雜很多,但是也就大概是這么個意思,以上只是我個人對MCU啟動的理解。

OK!進入正題!那么我們要分析main之前的是,應該從上面地方入手呢??答案是:MCU的啟動文件:比如我的工程中的startup_stm32f030.s文件,它是一個匯編文件,那么里面肯定是匯編調用了。整個代碼并不多!就兩百多行!所以,有能力的話,分析一下還是很好的!

為堆棧開辟空間!!

建立異常向量表

建立中斷向量表!!!

搞了這么久!終于到代碼段了,也就是啟動文件的開始和結束!哈哈!就這么一點點!!!

第一個紅色框,就是MCU上電就執行的第一個語句,很明顯,就是設置堆棧指針,人家的注釋說的明明白白了!

第二個紅色框就是前面所說的了,系統時鐘的初始化!先放著!后面分析!

第三個紅色框就是要調轉到用戶程序的main執行了。但是特別注意:在啟動文件中的__main和用戶程序的main是有區別的,區別如下:

當產生復位異常(就是復位):Reset_Handler PROC

IMPORT __main導入__main,然后執行下午,然后就是又從main重新執行,這就是為毛這叫復位了!

 

這些就是產生異常或者中斷,都來此進行調度的過程了!!

這才是真正的堆棧空間的開辟和初始化。

整個啟動文件就這樣就結束了!!!具體的解釋就不說了!我之前在CSDN看到了個哥們寫的非常好,我如果跟著解釋的話,未必有他的好!我就意思一下流程!有興趣全面理解的可以去CSDN找找!哈哈!!!(裝B失敗!)

那么解決我們未解決的問題!

跳轉到函數SystemInit,函數原型如下:

你看到的就是匯編語句LDR R0, =SystemInit 調用的函數原型了,是由C語言編寫的!(那么可能存在一下疑問,為毛在匯編里面調用C函數呢??答案是肯定的(廢話人家都調用了),因為啟動文件一上來就初始化了堆棧空間,只要堆棧空間初始化成功了,那么就可以運行C語言函數了。如果覺得奇怪的童鞋,我還告訴你,在C語言函數中還可以寫匯編代碼呢??(可以去了解了解))。

那么我們分享一下!

第一句:RCC->CR |= (uint32_t)0x00000001; 從語句可以看出,所操作的是RCC_CR寄存器的0位。所以就需要在參考手指中找到RCC_CR寄存器的說明,如下:

可以看出操作的是:HSION位,那么往下看說明:

一清二楚的說明了HSION位置1時,使能HSI振蕩器。OK!

基本上以這種方法就可以分析出這個void SystemInit (void)函數是干嘛的了!下面就不說廢話了!就算是剛剛入門的初學者,看到這里也應該會自己分析了!哈哈哈!瞬間感覺自信倍增。

我記得以前我在使用STM32F103系列的MCU時,在手冊(忘了是數據手冊還是應用筆記)上好像看到推薦使用外部石英晶體振蕩器作為時鐘源,剛好我手里有好多8M的晶振(三種直插封裝),為了表現的牛B!我就給咱的牛客板卡加了個高大的晶振(廢話說完就附圖)。看了下原理圖:

有這么幾件事要干:

(1)找兩個20pF的無極性封裝為0603的電容焊上,絲印分別是:C33和C34

(2)找兩個封裝為06030歐電阻焊上,絲印分別是:C35和C37

(3)把我高大的晶振焊上

OK!硬件連接好了!那么就重寫這么個程序!

使用外部晶振作為時鐘源進行配置!調用如下:

就這樣編譯和燒錄!牛客板卡有在48MHz的時鐘下飛快的跑起來了!哈哈!!!

為毛是48MHz呢??嘿嘿!因為咱牛客板上的MCU STM32F030的時鐘頻率高就是48MHz。

就到這里!對以上 只屬于個人理解!有不足或者錯誤的地方請告訴我一聲!讓我學習學習!資源共享交流才是學習好的幫手!哈哈!

本人QQ:641251565 東方青

好了!曬下我高大上的晶振:

手機太爛!!!莫有辦法!!!哈哈哈!!反正很高很大,是不是高大上就不知道了!嘿嘿!!

上一篇:Platform相親之旅

下一篇:STM32F030 Nucleo-開發調試的經驗USART的重要性

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: a视频在线观看 | 九九九热在线精品免费全部 | 欧美日韩北条麻妃一区二区 | 第一国内永久免费福利视频 | 老子影院我不卡在线理论 | 日本人69视频在线观看 | 国内一区二区三区精品视频 | 2019国内精品久久久久久 | 欧美午夜理伦三级在线观看 | 久久久久久久久影院 | 黄色网址免费在线播放 | jizz-jizz大全 | 欧美成人精品一级高清片 | 国产第一区二区三区在线观看 | 欧美性受 | 一区二区三区中文字幕 | 99久久免费精品国产免费高清 | 玖玖精品| 99热中文 | 欧美午夜在线 | 久久性色| 4444在线观看网站 | 国产卡一卡二卡3卡4卡无卡视频 | www.午夜视频 | 国产成人91青青草原精品 | 波多野结衣在线观看一区二区 | 久久国产精品偷 | 99久热只有精品视频免费看 | 4444亚洲国产成人精品 | 天天操人人 | 日日操夜夜操天天操 | 国产欧美亚洲精品第一页久久肉 | 特黄免费| 久久鲁视频 | 韩国一级在线观看 | 香蕉国产成版人视频在线观看 | 青草视频网站在线观看 | 精品国产91 | 久久狠狠干 | 欧美自拍偷拍视频 | 99久久综合给久久精品 |