stm32學習困惑,stm32 學習困惑

時間 2021-08-13 15:54:57

1樓:匿名使用者

正點原子的iap例程,應該能幫到你一點。

stm32的內部快閃記憶體(flash)地址起始於0x08000000,一般情況下,程式檔案就從此地

址開始寫入。此外stm32是基於cortex-m3核心的微控制器,其內部通過一張「中斷向量表」

來響應中斷,程式啟動後,將首先從「中斷向量表」取出復位中斷向量執行復位中斷程式完成

啟動,而這張「中斷向量表」的起始地址是0x08000004,當中斷來臨,stm32的內部硬體機

制亦會自動將pc指標定位到「中斷向量表」處,並根據中斷源取出對應的中斷向量執行中斷

服務程式。

在圖53.1.1中,stm32在復位後,先從0x08000004地址取出復位中斷向量的地址,並跳

轉到復位中斷服務程式,如圖示號①所示;在復位中斷服務程式執行完之後,會跳轉到我們的

main函式,如圖示號②所示;而我們的main函式一般都是一個死迴圈,在main函式執行過程

中,如果收到中斷請求(發生重中斷),此時stm32強制將pc指標指回中斷向量表處,如圖

標號③所示;然後,根據中斷源進入相應的中斷服務程式,如圖示號④所示;在執行完中斷服

務程式以後,程式再次返回main函式執行,如圖示號⑤所示。

2樓:匿名使用者

因為stm32設計的flash起始地址是在0x0800 0000位置開始的。全部**都只能在從這裡開始儲存。詳見stm32 referenc manual手冊第54頁。

這樣就還有一個問題,理論上,cm3中規定上電後cpu是從0地址開始執行,但是這裡中斷向量表卻被燒寫在0x0800 0000地址裡,這是因為stm32的flash是從0x0800 0000開始才有。但smt32也不能破壞arm定下的「規矩」,所以它做了一個啟動對映的過程,就是和晶片上總能見到的boot0和boot1有關了,當選擇從主flash啟動模式後,晶片一上電,flash的0x0800 0000地址被對映到0地址處,不影響cm3核心的讀取,所以這時的cm3既可以在0地址處訪問中斷向量表,也可以在0x0800 0000地址處訪問中斷向量表,而**還是在0x0800 0000地址處儲存的。這就是最難理解的地方,其實,這是基本上所有arm晶片採用的啟動對映方法。

arm7,arm9沒有內部flash的通常都是這樣做的。這個過程出自stm32 referenc manual手冊,裡面是有說明的:

還要注意,這個中斷向量表是可以在程式中再次被對映的。控制它的就是cm3已經規定的nvic暫存器scb->vtor。在stm32庫中給出的啟動**裡,startup_stm32f10x_hd.

s檔案裡,第146行,是上電後讀取中斷向量表中的復位中斷位置,並執行復位中斷處理**,**如下:

; reset handler

reset_handler   proc

export  reset_handler             [weak]

import  __main

import  systeminit

ldr     r0, =systeminit

blx     r0

ldr     r0, =__main

bx      r0

endp

注意復位後第一個被執行的是systeminit**,這個**在庫目錄下的system_stm32f10x.c檔案裡,它初始化了時鐘,nvic等一系列操作,這裡摘要與中斷向量有關的**:

void systeminit (void)

#ifdef vect_tab_sram

scb->vtor = sram_base | vect_tab_offset; /* vector table relocation in internal sram. */

#else

scb->vtor = flash_base | vect_tab_offset; /* vector table relocation in internal flash. */

#endif

}可以看出中斷向量重對映是一個選擇性編譯,通常巨集定義vect_tab_sram都沒有被定義,所以這裡執行結束後,scb->vtor就是flash_base了,值為0x0800 0000。以後cm3再取中斷向量裡,就會根據scb->vtor的設定,從這裡取向量執行了。中斷向量自此終於轉正。

注意這時連__main函式都還沒進,看起來中斷向量的重對映位置還是夠早的。

stm32執行一句語句需要多少,STM32執行一句語句需要多少ns

那要看你設定stm32的主頻是多少hz了,另外,有的指令是單週期的,還有是多週期完成的,看你用什麼指令了,單週期指令比如nop就可以用 stm32語句的執行時間是多少 stm32有多個系列,主頻也不一樣 可配置 misp也不一樣,可以通過測試來得到。如果需要延時的話,stm32定時器比較多,可以使用...

stm32的優勢主要有哪些,STM32的優勢主要有哪些

以下是stm32的優勢介紹,供參考 1.除新增的功能強化型外設介面外,stm32互連繫列還提供與其它stm32微控制器相同的標準介面,這種外設共用性提升了整個產品家族的應用靈活性,使開發人員可以在多個設計中重複使用同一個軟體。新stm32的標準外設包括10個定時器 兩個12位1 msample s ...

STM32 DAC太少怎麼辦,stm32 需要3個dac口怎麼辦

如果cpubu能更換的話,可以考慮使用專用的da 數模轉換器 如 ad5676 是spi介面,8通道模擬量輸出的,不過這款可能比較貴,因為精度高,你可以根據你們的需求選擇合適的.stm32 需要3個dac口怎麼辦 青城孤子 f3系列的很多型號都有3個dac,自己按需求選一個 為什麼我用stm32f4...