精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32單片機中C語言操作寄存器的原理

單片機與嵌入式 ? 來源:單片機與嵌入式 ? 2023-11-30 14:08 ? 次閱讀

映射的概念

存儲器本身不具有地址信息,它的地址是由芯片廠商或用戶分配,給存儲器分配地址的過程就稱為存儲器映射,如下圖所示的4GB空間(從block0-block7每個block512M)。在梳理STM32芯片的內部架構中提到的被控單元FLASH、RAM、FSMC和APB等功能部件共同排列在這4GB的地址空間內。在編程的時候,可以通過他們的地址找到他們,然后通過C語言對它們進行數據的讀和寫操作。

8d6e0094-8f36-11ee-939d-92fbcf53809c.png

存儲器映射

在這 4GB 的地址空間中,ARM 已經粗線條的平均分成了 8 個塊,每塊 512MB,每個塊也都規定了用途,具體分類見如下表格。在這 8 個 Block 里面,有 3 個塊非常重要,也是我們最關心的三個塊。Block0 用來設計成內部FLASH,Block1 用來設計成內部 RAM,Block2 用來設計成片上的外設。其中,Block2 用于設計片內的外設,根據外設的總線速度不同,Block 被分成了AHB、APB1、APB2。

8d98e502-8f36-11ee-939d-92fbcf53809c.png

存儲器本身沒有地址,給存儲器分配地址的過程叫存儲器映射,那什么叫寄存器映射?寄存器到底是什么?在存儲器 Block2 這塊區域,設計的是片上外設,它們以四個字節為一個單元,共 32bit,每一個單元對應不同的功能,當我們控制這些單元時就可以驅動外設工作。我們可以找到每個單元的起始地址,然后通過 C 語言指針的操作方式來訪問這些單元,如果每次都是通過這種地址的方式來訪問,不僅不好記憶還容易出錯,這時我們可以根據每個單元功能的不同,以功能為名給這個內存單元取一個別名,這個別名就是我們經常說的寄存器,這個給已經分配好地址的有特定功能的內存單元取別名的過程就叫寄存器映射。

通過C語言操作寄存器的例子

GPIOB端口的輸出數據寄存器ODR的地址是0x40010C0C,ODR寄存器是32bit,低16bit有效,對應著16個外部IO,寫0、1對應的IO則輸出低、高電平?,F在我們通過C語言指針的操作方式,讓GPIOB的16個IO都輸出高電平,見如下代碼。

// GPIOB 端口全部輸出 高電平 
*(unsigned int*)(0x4001 0C0C) = 0xFFFF;

0x40010C0C在我們看來是GPIOB端口ODR的地址,但是在編譯器看來,這只是一個普通的變量,是一個立即數,要想讓編譯器也認為是指針,我們得進行強制類型轉換,把它轉換成指針,即(unsigned int *)0x4001 0C0C,然后再對這個指針進行*操作。

通過絕對地址訪問內存單元不好記憶且容易出錯,可以通過寄存器的方式來操作,具體見如下代碼。

//GPIOB端口全部輸出高電平
#defineGPIOB_ODR(unsignedint*)(GPIOB_BASE+0x0C)
*GPIOB_ODR=0xFF;

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6032

    文章

    44518

    瀏覽量

    633068
  • 寄存器
    +關注

    關注

    31

    文章

    5318

    瀏覽量

    120015
  • 存儲器
    +關注

    關注

    38

    文章

    7453

    瀏覽量

    163608
  • STM32
    +關注

    關注

    2266

    文章

    10872

    瀏覽量

    354827
  • C語言
    +關注

    關注

    180

    文章

    7598

    瀏覽量

    136208

原文標題:STM32單片機中C語言操作寄存器的原理

文章出處:【微信號:單片機與嵌入式,微信公眾號:單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM32單片機C語言基礎知識

    C語言單片機開發的必備基礎知識,本文列舉了部分STM32學習中比較常見的一些C
    發表于 09-21 17:21 ?4533次閱讀

    STM32單片機使用寄存器是如何進行操作

    以下實例為STM32單片機使用寄存器進行操作的一個頭文件的代碼因為直接對寄存器進行
    發表于 07-15 06:15

    51單片機匯編語言教程_單片機的特殊功能寄存器

    51單片機匯編語言教程:7課單片機的特殊功能寄存器
    發表于 01-19 15:26 ?0次下載

    STM32庫函數和寄存器應該如何操作

    從開始接觸51單片機,到現在開始轉型學習功能更加強大的STM32f407系列,學習過程引入了庫函數及相應操作,當時趕著進度做點東西出來,有點不求甚解?,F在返回來求索:相比于原來51
    發表于 09-10 17:26 ?3次下載
    <b class='flag-5'>STM32</b>庫函數和<b class='flag-5'>寄存器</b>應該如何<b class='flag-5'>操作</b>

    51單片機特殊功能寄存器C51程序的定義詳細說明

    具有位尋址能力,它們的字節地址都能被8整除,即字節地址是以8或0為尾數的。為了能直接訪問這些SPR,Franklin C51提供了一種自主形式的定義方法,這種定義方法與標準C語言不兼容,只適合與對MCS-51系列
    發表于 07-22 17:37 ?1次下載
    51<b class='flag-5'>單片機</b>特殊功能<b class='flag-5'>寄存器</b>在<b class='flag-5'>C</b>51程序<b class='flag-5'>中</b>的定義詳細說明

    STM32單片機不完全手冊之寄存器版本

    STM32單片機不完全手冊之寄存器版本
    發表于 07-31 16:10 ?0次下載

    單片機寄存器

    單片機寄存器其實就相當于一個變量,只不過這個變量在固定的地址,有一個特殊的名稱(當然也不強制)。初學者對寄存器操作比較困難的原因不是匯編語言
    發表于 11-10 18:35 ?11次下載
    <b class='flag-5'>單片機</b><b class='flag-5'>寄存器</b>

    C語言操作在(單片機)寄存器的應用

    C語言操作寄存器的應用本文參考另一篇博客寫成附鏈接,個人感覺內容過多不便于吸收,就寫了這篇博客。整體思想:設置一個位就是設置該位為1,
    發表于 11-29 10:06 ?8次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>位<b class='flag-5'>操作</b>在(<b class='flag-5'>單片機</b>)<b class='flag-5'>寄存器</b><b class='flag-5'>中</b>的應用

    32單片機 C語言 寄存器(四)

    32單片機C語言相關知識以及寄存器地址名稱映射分析
    發表于 11-29 10:06 ?12次下載
    32<b class='flag-5'>單片機</b> <b class='flag-5'>C</b><b class='flag-5'>語言</b> <b class='flag-5'>寄存器</b>(四)

    C語言寄存器操作

    C語言寄存器操作
    發表于 01-13 12:56 ?6次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    STM32寄存器操作

    STM32寄存器操作在使用STM32單片機編程時一般都用ST給的庫函數編程,庫函數編程的底層就是對單片
    發表于 01-13 15:43 ?19次下載
    <b class='flag-5'>STM32</b>的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    STM32單片機C語言操作寄存器的原理

    存儲本身不具有地址信息,它的地址是由芯片廠商或用戶分配,給存儲分配地址的過程就稱為存儲映射
    發表于 02-08 17:08 ?0次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>單片機</b><b class='flag-5'>中</b><b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>操作</b><b class='flag-5'>寄存器</b>的原理

    C語言操作寄存器的常見手法

    使用C語言寄存器賦值時,常常需要用到C語言的位操作方法。把
    的頭像 發表于 03-12 09:06 ?3285次閱讀

    單片機寄存器有哪些 單片機寄存器怎么理解 寄存器單片機的關系

    單片機寄存器是一種特殊的存儲器件,用于存儲和處理程序的數據和指令??梢詫?b class='flag-5'>單片機寄存器看作是CPU內部的工作區域,類似于人的大腦,用于暫時存
    發表于 04-01 15:47 ?6138次閱讀

    單片機工作寄存器作用 單片機常用專用寄存器

    除了通用寄存器(如累加、通用寄存器等),單片機還會有特定功能的寄存器,如定時
    的頭像 發表于 04-08 14:46 ?7355次閱讀