STM32入門之軟體安裝 暫存器理解

2022-05-03 18:33:09 字數 3289 閱讀 9266

裝置:stm32f103vet6秉火

啟用--點file>license management>選中一行》複製cid在下面輸入序列號-然後點addlic

開啟軟體》工具欄按鈕pack install(魔術棒那排最後的那個)>

軟體:mcuisp.exe

&(按位與)、|(按位或)、^(按位異或)、~ (按位取反)

如上示例:

設定pb0輸出為低電平gpiob_odr &= ~(1<<0);

設定pb0輸出為高電平gpiob_odr |= (1<<0);

新建工程

projrct>new uvision project>device選項》選擇晶元型號stm32f103ve>

target選項頁》use microlib-√

output選項頁》create hex file-√>select folder for objects-選擇專案輸出的資料夾-output資料夾

listing選項頁》select folder for listing-選擇彙編的檔案清單》listings資料夾

c/c++選項頁》define-stm32f10x_hd, use_stdperiph_driver>include paths>設定目錄如下

....\libraries\cmsis

....\user

....\libraries\fwlib\inc

....\user\led

debug選項頁》use-cmsis-dap debugger

utilities選項頁》use debug driver-√

debug選項頁》settings>debug選項頁》max clock-5mhz>flash download選項頁》選擇erase seclors-另外三個全勾選

如需要hex檔案請勾選optput>create hex file

io沒設定時表現為:高阻態(高阻態不是乙個電平狀態引腳上的電壓不穩定,可能是高電平,也可能是低電平)

有些感測器等元氣件,他們的訊號輸出有效時候會輸出乙個高電平(或者低電平),無效時候不輸出,為開路。對此所以有了下面的上拉輸入與下拉輸入的模式

-另外有模式輸入還有模式輸出

ttl輸出低電平要<0.8v,高電平》2.4v

ttl輸入低電平要<1.2v,高電平》2.0v

rs232邏輯0為+3+15v,邏輯1:-3-15v

找到相關的型號的資料手冊文件引腳定義的章節

例如:有讓管腳gpiob2輸出高電平其它不改

操作步驟開啟埠時鐘>設定埠工作模式(crl和crh)>設定高低電平(odr,brr和bsrr)

以下操作的相關文件都在stm32f10x中文參考手冊中查詢(儲存器映像表也可在"資料手冊"的第4節儲存器映像表找到)

開啟時鐘

通過系統框架圖可得知gpiobapb2匯流排上,所以要開啟其匯流排rcc對應的時鐘rcc才行,因我的裝置為大容量,所以應該是在6.章節,而不是7.章節

先檢視中的2.3儲存器映像中找到rcc的基位址0x4002 1000

然後可以看到其暫存器表的第3位iopb en-其描述為0表示io埠b時鐘關閉 1表示io埠b時鐘開啟》所以我們只要將其置1即可

可得到其暫存器的位址為:0x4002 1000+0x18=0x4002 1018,

然後讓其第3位-置1*(unsigned int*)(0x4002 1018) |= (1<<3);不影響其它位,設定第3位為1;

設定埠工作模式

先找到2.3儲存器映像找到gpio埠b的基位址0x4001 0c00設定埠高低電平(這裡只先講odr)

因為我們要輸出高低電平,也就是等於輸出資料,所以找到8.2.4 gpiox_odr(注意odr是表示output data register的縮寫輸出資料暫存器,如要用到別的功能再找別的)得到 位址偏移:0x0c 復位值:0x0000 0000

如上即可得到暫存器位址為:0x4001 0c00+0x0c=0x4001 0c0c

然後**就可以寫成*(unsigned int*)(0x4001 0c0c) |= (1<<2);不影響其它位,設定為1輸出高電平

如要輸出低電平應寫成*(unsigned int*)(0x4001 0c0c) &= ~(1<<2);

因開發板電路低電平點亮led

這裡得出的暫存器記憶體操作**為

int main(void)

typedef unsigned int uint32_t; /*無符號32 位變數*/

typedef unsigned short int uint16_t; /*無符號16 位變數*/

/* gpio 暫存器列表 */

/* gpio 暫存器列表 */

typedef struct gpio_typedef;

gpio_typedef * gpiox;

#include "stm32f10x.h"

int main(void)

下一章進入韌體庫編

STM32之暫存器開發

首先克服心理作用,不要總是預設暫存器開發難,其實暫存器開發和庫函式開發所用的方法和難度是一樣的,並不難,下面用以stm32為例解釋。1.明確自己需要的功能 庫函式開發也需要 2.檢視手冊,找到功能對應的微控制器資源 3.找到功能所需暫存器 庫函式開發需要找到相應的功能函式 4.根據位址每位對應的功能...

STM32之暫存器訪問

一般的暫存器訪問需要通過讀 改 寫三步曲和位運算的清0置1來實現,但在stm32的程式設計中,通過利用它的一些優秀的特性如埠位設定 復位寄存bsrr 位繫結等,我們可以大大提公升暫存器的訪問速度和簡化暫存器的操作。一般暫存器操作 gpiox odr 0x10 pin4置1 gpiox odr 0x1...

STM32蜂鳴器 暫存器

這次實驗犯了個笑話,竟然在巨集定義後面加分號.就像這樣 define 大家千萬不要學我,結果報錯expected expression,還苦惱半天,想為啥操作不了暫存器了?我真愚蠢!剛開始我也不會寫這些東西,其實摸清套路就好,rcc時鐘使能 gpio初始化 相關暫存器初始化 延時函式 串列埠等初始化...