stm32 中庫函數、結構體、地址的強制類型轉換、相應特殊功能寄存器之間的關系


以一個掛接在APB2上的外設函數使能為例

 

A : RCC_APB2PeriphClockCmd();時鍾使能函數

  1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 

B : RCC_APB2Periph_AFIO是什么呢?

 1 #define RCC_APB2Periph_AFIO  ((uint32_t)0x00000001) RCC_APB2Periph_AFIO就是代表十六進制 1

C: 知道RCC_APB2Periph_AFIO是什么之后接下來看看這個函數內的具體是如何定義的

 1 void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)  2 {  3   /* Check the parameters */
 4  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph)); 這塊在我的assert_param()函數文章中有解釋
5
assert_param(IS_FUNCTIONAL_STATE(NewState)); 6 if (NewState != DISABLE) 7 { 8 RCC->APB2ENR |= RCC_APB2Periph;//將RCC->APB2ENR寄存器賦值(本例賦值RCC_APB2Periph_AFIO也就是1) 9 } //RCC->APB2ENR是如何表示RCC下APB2外設時鍾使能寄存器(RCC->APB2ENR)的呢? 10 else //H中有介紹但需要了解D-G 11 { 12 RCC->APB2ENR &= ~RCC_APB2Periph; 13 } 14 }

D:函數中有RCC,那RCC又是什么呢?

  1 #define RCC    ((RCC_TypeDef *) RCC_BASE)   //定義RCC對應為(RCC_TypeDef *) RCC_BASE

RCC_BASE為RCC的基地址;RCC_TypeDef 為定義一種的結構體數據類型;(RCC_TypeDef *) RCC_BASE就是講RCC_BASE強制轉化為(RCC_TypeDef *)的地址通俗點說就是強制把RCC_BASE地址變成RCC_TypeDef數據類型的字節地址

E:那又有疑問了Rcc基地址是啥?

就是對應STM32內核中RCC的物理基地址 (是一個常數)

  1 #define RCC_BASE   (AHBPERIPH_BASE + 0x1000)    //RCC基地址

F: 1 #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)  //AHB外設基地址

G:   1 #define PERIPH_BASE ((uint32_t)0x40000000)    //外設基地址 

H: RCC_TypeDef這個結構體有什么作用呢?

 

 1 typedef struct //(D中)根據上面的解釋RCC就是從RCC_BASE這個地址對應的RCC_TypeDef數據類型的內存,
 2 { //而這段內存正好對應左邊這些特殊功能寄存器的能存CR就是這段內存的起始的一小段  3  __IO uint32_t CR; //這一小段是unit32_t數據類型的內存,那RCC->APB2ENR就能訪問APB2ENR這一小段  4  __IO uint32_t CFGR; //所以RCC->APB2ENR賦值就是對應APB2外設時鍾使能寄存器(RCC->APB2ENR)賦值 
5
__IO uint32_t CIR; 6 __IO uint32_t APB2RSTR; 7 __IO uint32_t APB1RSTR; 8 __IO uint32_t AHBENR; 9 __IO uint32_t APB2ENR; 10 __IO uint32_t APB1ENR; 11 __IO uint32_t BDCR; 12 __IO uint32_t CSR; 23 } RCC_TypeDef;
總結 C段中 RCC->APB2ENR |= RCC_APB2Periph;也就代表了將RCC_APB2Periph賦值RCC->APB2ENR本例中是把
RCC_APB2Periph_AFIO也就是十六進制的1賦給了RCC->APB2ENR
查看中文參考手冊克制
RCC->APB2ENR寄存器賦值一是就是AFIOEN開啟(看下圖最后一個)
相應的A段代碼RCC_APB2PeriphClockCmd (RCC_APB2Periph_AFIO,ENABLE)函數的意義就是把AFIO打開

中文參考手冊對應的APB2外設時鍾使能寄存器(RCC->APB2ENR)各位的功能

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM