日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32F4 编程手册学习1_编程模型

發布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F4 编程手册学习1_编程模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

STM32F4 programming manual_1

1. 處理器模式與特權等級

處理器模式分為以下兩種:

  • 線程模式:
    用來執行應用軟件;
    處理器從reset出來時,進入線程模式;
    CONTROL寄存器控制軟件的執行狀態時特權的還是非特權的。

  • 處理模式:
    用來處理異常;
    完成異常處理后,進入線程模式;
    該模式下,軟件運行在特權等級上。

特權等級有以下兩種:

  • 非特權:
    對于MSR、MRS指令受限的權限,不能使用CPS指令;
    不能使用系統定時器、NVIC、系統控制塊;
    對于部分內存和外設的訪問受限
    必須使用SVC指令來執行超級訪問者調用以控制特權等級的軟件

  • 特權:
    可以使用所有指令,訪問所有資源。
    可以寫CONTROL寄存器來改變軟件執行的特權等級。

2. 棧

處理器使用向下增長的棧,這意味著棧指針指向棧內存的最后一個成員。當處理器將數據壓入棧時,首先將棧指針減小相應的字節數,然后將數據寫入棧指針所指的內存地址。處理器使用了兩個的棧main stackprocess stack,他倆擁有棧指針的獨立拷貝。

在線程模式下,CONTROL寄存器控制處理器使用哪個棧(main stack or process stack)。在處理模式下,處理器總是使用 main stack。

處理器模式用途特權等級棧
線程模式運行應用特權 或 非特權main stack or process stack
處理模式處理異常總是特權main stack

3. 核心寄存器

  • 通用寄存器
    R0-R12 是32位通用寄存器,其中R0-R3四個寄存器可用于參數傳遞與結果返回。

  • 棧指針SP
    R13用于存儲棧指針,在線程模式下,CONTROL寄存器的bit[1]表示使用哪個棧(main stack or process stack)。
    bit[1] = 0: 使用主棧main stack pointor(MSP), 這是reset時設置的值,也就是默認值。
    bit[1] = 1:使用process stack pointor(PSP)
    reset時,MSP被裝載0x00000000.

  • 鏈接寄存器LR
    R14用于存儲鏈接指針,主要是在發生函數調用的場合,LR寄存器存儲子函數的返回地址。發生指令跳轉時,如BL指令,首先將PC中地址存入LR寄存器中,然后將跳轉目的地址存到PC中。
    reset時,該值被置為0xFFFFFFFFF.

  • 程序計數器PC
    R15用于存儲當前程序地址,reset時該寄存器裝載reset向量的地址,這在地址 0x00000004的位置。
    reset時,bit[0]的值被裝載到EPSR的T位,而且必須為1。

  • 程序狀態寄存器PSR,該寄存器內存在幾個互斥的位域可分別用以下寄存器表示。(同一個物理地址,幾個不同名字)
    應用程序狀態寄存器 APSR
    中斷程序狀態寄存器 IPSR
    異常程序狀態寄存器 EPSR

  • CONTROL 寄存器
    該寄存器控制在線程模式下使用哪個棧以及軟件運行的特權等級
    指示FPU狀態是否激活

處理模式下,處理器總是使用MSP的,因此處理器會忽略對寄存器bit[1]的寫入操作。

在OS環境中,建議線程運行在線程模式下使用PSP(process stack);kernel和異常處理使用MSP(main stack)。

默認情況下,線程模式使用MSP(main stack)。可以通過下面兩種方式將棧指針切換到PSP。

  • 使用MSR指令,將CONTROL寄存器的bit[1]設置為1
  • 異常返回到線程模式時,使用一個合適的EXC_RETURN值。

當改變棧指針時,軟件必須在使用MSR指令后,立即使用ISB指令。這保證了ISB指令之后的指令使用新的棧指針。

ISR指令是指令同步屏障(instruction synchronization barrier),它刷新了處理器的管道線,導致該指令之后的指令都要重新fetch。這條指令不會改變標志位。

The Cortex microcontroller software interface standard (CMSIS)

該標準定義了如下內容

  • 訪問外設的方式
  • 定義異常向量的方式
  • 核心外設寄存器的名字
  • 核心異常向量的名字
  • 使用RTOS內核的設備無關接口,包括調試模式

CMSIS包含了Cortex-M4處理器核心外設的地址和數據結構定義

簡化了軟件開發過程

本文圖表引用自《PM0214: STM32F3, STM32F4 and STM32L4 Series Cortex?-M4 programming manual》

本文參考ST官方文檔《PM0214: STM32F3, STM32F4 and STM32L4 Series Cortex?-M4 programming manual》

轉載于:https://www.cnblogs.com/gexin/p/7610341.html

總結

以上是生活随笔為你收集整理的STM32F4 编程手册学习1_编程模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。