STM32中如何使用底層的位址來控制IO口的電平

2021-09-14 01:52:23 字數 707 閱讀 1390

步驟一:使能時鐘

首先在資料手冊中找到暫存器映像,找到復位和時鐘控制(rcc)的初始位址為0x40021000,由於gpiob是掛在apb2匯流排上,找到apb2外設時鐘使能暫存器(rcc-apb2enr),偏移位址為0x18,所以rcc-apb2enr具體位址為0x40021018,其中iopben,埠b的時鐘使能是在位3,置一開啟,所以*(unsigned int*)0x40021018 |= ((1)<<(3))為開啟gpiob的時鐘。(unsigned int*)0x40021018是把0x40021018強制轉換成指標型別,指標是專門用來存放位址的,(unsigned int)0x40021018意思是(unsigned int*)0x40021018該位址上存放的變數,(unsigned int)0x40021018 |= ((1)<<(3))的意思是將這個位址上的變數的第三位置一,其餘位不變。

步驟二:配置i/o輸出模式,即輸入還是輸出

首先在暫存器映像找到gpio埠b,初始位址為0x40010c00,然後在找到gpiob下的crl暫存器,其偏移為0x00,如何使配置為推完輸出(0001),則*(unsigned int*)0x40010c00 |= (1<<(4*5))是將pb5設定為推完輸出模式。

步驟三:控制i/o輸出高低電平

這個是由gpiob下的odr暫存器控制的,odr暫存器偏移量為0x0c,(unsigned int)0x40010c0c &= ~(1<<5)設定pb5為低電平。

stm32 中位址的理解

stm32的中位址是按bit,byte,還是word作為單位的?例如0x8000000,它後面的單位是什麼?byte 為什麼有的位址是按照uint16 t,有的是按照uint32 t,這個是為什麼?為什麼有的位址是按照uint16 t,有的是按照uint32 t,這個是為什麼?define flas...

STM32中如何使用printf 函式

stm32串列埠通訊中使用printf傳送資料配置方法 開發環境 keil rvmdk 在stm32串列埠通訊程式中使用printf傳送資料,非常的方便。可在剛開始使用的時候總是遇到問題,常見的是硬體訪真時無法進入main主函式,其實只要簡單的配置一下就可以了。下面就說一下使用printf需要做哪些...

STM32 中斷使用

stm32中斷有時候用多了容易亂,特此記錄一下,因為之前一直是m3 m0交叉用,韌體庫有些區別容易弄混,這裡說一下m3外部中斷的配置 步驟 1.將對應的io配置為輸入 2.將io對應的中斷的優先等級用nvic配置好 3.設定好對應io的中斷模式和觸發方式 4.將io所屬的中斷線設為中斷輸入源 1 以...