一、io口
1、使用的時候開啟時鐘,若該io被當做外設的埠需要使能復用時鐘。
2、若該埠被當做外部中斷引腳也需要開啟復用時鐘。
二、讀操作
1、當讀暫存器付給某個變數時,注意這個變數的型別,一般為unsigned int 32位的,如果型別不對在移位操作的時候將得不到正確的結果。
2、這個變數可以定義為volatile型別。
三、中斷
1、異常處理在主堆疊中,如果中斷巢狀太深,注意堆疊的使用情況。
2、軟體中斷,手動設定中斷 寫stir暫存器。
3、svc和pendsv(系統服務呼叫、可懸起的系統服務)
svc和pendsv主要配合作業系統的呼叫,svc用於使用者呼叫呼叫系統函式,如果在作業系統中不會讓使用者程式直接訪問硬體而是通過系統函式。svc的請求要求必須立即響應,如果有更高的優先順序在執行則會返回乙個fault。
pendsv,懸起系統服務和中斷掛起一樣,os使用它可以緩期執行乙個異常直到其他重要的任務完成後在執行,在os中用在上下文的切換(任務間的切換),比較好的解決了os實時性的問題。
觸發上下文切換的源:① 系統呼叫 ② systick異常執行任務的切換 。任務切換期間是禁止中斷的。在ucosii中用的systick當做系統時鐘,在systick中斷時進行任務的切換。
假如在執行乙個中斷的isr,這時來了乙個systick異常(優先順序高於isr)要進行任務的切換,那麼isr的響應將會被延遲,具體的延遲時間沒法估計,對實時性是致命的。
假如systick異常進行任務切換之前會判斷當前系統中有沒有isr在執行,如果沒有isr在執行任務切換,這樣任務的切換會至少延遲乙個以上的systick週期,當isr與systick中斷的週期接近時將會引起共振。
pendsv解決了這個問題,如果有isr,pendsv會在systick異常後把任務的切換延遲進行不會再等待下乙個systick異常。但是需要將pendsv異常的優先順序設定為最低的優先順序。
現在好了,如果isr正在執行期間來了乙個systick異常,systick異常會置位nvic中的pendsv位掛起pendsv異常,在pendsv異常中進行任務的切換,pendsv會等到其他isr執行完後再執行任務的切換。
ucosii中,程序級的任務切換和中斷中的任務切換,os都會掛起pendsv,在pendsv的isr中執行任務的切換,任務切換都是用彙編寫的,在os_cpu_a.asm檔案中
osctxsw
ldr r0, =nvic_int_ctrl ; trigger the pendsv exception (causes context switch)
ldr r1, =nvic_pendsvset
str r1, [r0]
bx lr
STM32延時注意事項
一般stm32延時函式大家都這樣用,但是要注意nms的範圍,systick load為24位暫存器,所以,最大延時為 nms 0xffffff 8 1000 sysclk sysclk的單位為hz nms的單位為 ms 對72m條件下,nms 1864。所以平時在寫程式時,延時1000即1秒時對的,...
Keil MDK下學習STM32注意事項
摘自 1 stm32韌體庫使用外圍裝置的主要思路 在stm32中,外圍裝置的配置思路比較固定。首先是使能相關的時鐘,一方面是裝置本身的時鐘,另一方面如果裝置通過io口輸出還需要使能io口的時鐘 最後如果對應的io口是復用功能的io口,則還必須使能afio的時鐘。其次是配置gpio,gpio的各種屬性...
STM32硬體電路設計注意事項
stm32 原檔名 iar stm32 sk revb.pdf 原檔名 iar stm32f103ze sk.pdf 原檔名 mcbstm32 v1.1.pdf 原檔名 mcbstm32e baseboard v1.93.pdf 原檔名 mcbstm32e displayboard v2.0.pdf...