|
STM32 注意的地方
注:AHB主要負(fù)責(zé)外部存儲(chǔ)器時(shí)鐘。PB2負(fù)責(zé)AD,I/O,高級(jí)TIM,串口1。APB1負(fù)責(zé)DA,USB,SPI,I2C,CAN,串口2345,普通TIM。
使用MDK KeiluVision4進(jìn)行學(xué)習(xí),照著前面幾個(gè)歷程進(jìn)行學(xué)習(xí),看懂幾個(gè)歷程后想自己也照著搞搞,開(kāi)始有些錯(cuò)誤經(jīng)調(diào)試后都解決了,但是在其他問(wèn)題都解決后,編譯就出現(xiàn)了More More than one section matches selector - cannot all be FIRST/LAST這個(gè)錯(cuò)誤,還提示啥包涵了一個(gè)錯(cuò)誤的路徑,本人各種檢查路徑,和歷程的都一樣了,可這個(gè)問(wèn)題還沒(méi)解決,當(dāng)然后來(lái)發(fā)現(xiàn)這個(gè)不是路徑的問(wèn)題,上網(wǎng)找了好久,終于發(fā)現(xiàn)了,在歷程中RVMDK以及STM32_EVAL中的幾個(gè)初始匯編文件前有三個(gè)紅點(diǎn),而自己的工程中沒(méi)有,再找資料才發(fā)現(xiàn)了如何設(shè)置,在此分享下,希望對(duì)大家有幫助:
對(duì)需要設(shè)置的文件(就是文件上有三個(gè)紅點(diǎn)的文件,幾個(gè)歷程基本都一樣),點(diǎn)右鍵Options for File'***',勾去灰化的Include in Target Build和Always Build,然后才重新編譯,就能順利通過(guò)了。
類型說(shuō)明------100腳
S - 電源
I - 輸入
O - 輸出
I/O - 輸入輸出
FT - 5V 兼容
VDD - 單片機(jī)3.3V 電源正
VSS - 單片機(jī)3.3V 電源負(fù)
VDDA - 單片機(jī)A/D 轉(zhuǎn)換器電源正
VSSA - 單片機(jī)A/D 轉(zhuǎn)換器電源負(fù)
VREF+ - 單片機(jī)A/D 轉(zhuǎn)換器參考電壓正
VREF- - 單片機(jī)A/D 轉(zhuǎn)換器參考電壓負(fù)
由于STM32F103 系列單片機(jī)的內(nèi)部高速RC 振蕩器(HSI)由VDDA、VSSA 供電,故
即使不使用單片機(jī)自帶的A/D 轉(zhuǎn)換器,也必須保證VDDA、VSSA 的供電,否則STM32F103
單片機(jī)不能正常啟動(dòng)。在EC30-EKSTM32 核心板的背面,VDDA 和VSSA 分別通過(guò)電感連接
到VDD 和VSS。如果外部有VDDA、VSSA 的處理電路,需要將背面這兩個(gè)電感拆除。
STM32F103 有兩個(gè)獨(dú)立的12 位A/D 轉(zhuǎn)換器,16 個(gè)A/D 轉(zhuǎn)換通道。EC30-EKSTM32 只
使用第1 個(gè)A/D 轉(zhuǎn)換器ADC1。16 個(gè)A/D 轉(zhuǎn)換通道分布在PA0 ~ PA7、PB0、PB1、PC0 ~ PC5
這16 個(gè)管腳上,其中任何一個(gè)管腳都可以配置為模擬量輸入管腳AIWx。
設(shè)置NVIC優(yōu)先級(jí)分組,方式。注:一共16個(gè)優(yōu)先級(jí),分為搶占式和響應(yīng)式。兩種優(yōu)先級(jí)所占的數(shù)量由此代碼確定,NVIC_PriorityGroup_x可以是0、1、2、3、4,分別代表?yè)屨純?yōu)先級(jí)有1、2、4、8、16個(gè)和響應(yīng)優(yōu)先級(jí)有16、8、4、2、1個(gè)。規(guī)定兩種優(yōu)先級(jí)的數(shù)量后,所有的中斷級(jí)別必須在其中選擇,搶占級(jí)別高的會(huì)打斷其他中斷優(yōu)先執(zhí)行,而響應(yīng)級(jí)別高的會(huì)在其他中斷執(zhí)行完優(yōu)先執(zhí)行。
STM32中有些硬件功能可以由用戶自己配置,選擇字節(jié)用于這些配置。這些通過(guò)用戶選擇字節(jié)配置的功能不能簡(jiǎn)單地通過(guò)軟件配置,相應(yīng)的功能必須在芯片上電時(shí)存在。如內(nèi)部的獨(dú)立看門狗,可以通過(guò)用戶選擇字節(jié)配置為做看門狗用,也可以通過(guò)用戶選擇字節(jié)配置為做普通計(jì)數(shù)器用;做看門狗使用時(shí),軟件是無(wú)法停止它的,所以芯片上電時(shí)這個(gè)功能就必須有效。
STM32三種啟動(dòng)模式中存儲(chǔ)器的存儲(chǔ)介質(zhì)
STM32三種啟動(dòng)模式對(duì)應(yīng)的存儲(chǔ)介質(zhì)均是芯片內(nèi)置的,它們是:
1)用戶閃存 = 芯片內(nèi)置的Flash。
2)SRAM = 芯片內(nèi)置的RAM區(qū),就是內(nèi)存啦。
3)系統(tǒng)存儲(chǔ)器 = 芯片內(nèi)部一塊特定的區(qū)域,芯片出廠時(shí)在這個(gè)區(qū)域預(yù)置了一段Bootloader,就是通常說(shuō)的ISP程序。這個(gè)區(qū)域的內(nèi)容在芯片出廠后沒(méi)有人能夠修改或擦除,即它是一個(gè)ROM區(qū)。在每個(gè)STM32的芯片上都有兩個(gè)管腳BOOT0和BOOT1,這兩個(gè)管腳在芯片復(fù)位時(shí)的電平狀態(tài)決定了芯片復(fù)位后從哪個(gè)區(qū)域開(kāi)始執(zhí)行程序,見(jiàn)下表:
BOOT1=x BOOT0=0 從用戶閃存啟動(dòng),這是正常的工作模BOOT1=0 BOOT0=1 從系統(tǒng)存儲(chǔ)器啟動(dòng),這種模式啟動(dòng)的程序功能由廠家設(shè)置。
BOOT1=1 BOOT0=1 從內(nèi)置SRAM啟動(dòng),這種模式可以用于調(diào)試。
STM32 GPIO端口的輸出速度設(shè)置
當(dāng)STM32的GPIO端口設(shè)置為輸出模式時(shí),有三種速度可以選擇:2MHz、10MHz和50MHz,這個(gè)速度是指I/O口驅(qū)動(dòng)電路的速度,是用來(lái)選擇不同的輸出驅(qū)動(dòng)模塊,達(dá)到最佳的噪聲控制和降低功耗的目的。
高頻的驅(qū)動(dòng)電路,噪聲也高,當(dāng)你不需要高的輸出頻率時(shí),請(qǐng)選用低頻驅(qū)動(dòng)電路,這樣非常有利于提高系統(tǒng)的EMI性能。
當(dāng)然如果你要輸出較高頻率的信號(hào),但卻選用了較低頻率的驅(qū)動(dòng)模塊,你很可能會(huì)得到失真的輸出信號(hào)。
實(shí)際上芯片內(nèi)部在I/O口的輸出部分安排了多個(gè)響應(yīng)速度不同的輸出驅(qū)動(dòng)電路,用戶可以根據(jù)自己的需要選擇合適的驅(qū)動(dòng)電路。
注意:GPIO的引腳速度是指I/O口驅(qū)動(dòng)電路的響應(yīng)速度而不是輸出信號(hào)的速度,輸出信號(hào)的速度與你的程序有關(guān)。
關(guān)鍵是,GPIO的引腳速度跟應(yīng)用匹配。
比如對(duì)于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引腳速度就夠了,既省電也噪聲小。
對(duì)于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引腳速度或許不夠,這時(shí)可以選用10M的GPIO引腳速度。深圳STM32技術(shù)實(shí)訓(xùn)QQ754634522
對(duì)于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引腳速度顯然不夠了,需要選用50M的GPIO的引腳速度。
|
|