裝置: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節儲存器映像表找到)
通過系統框架圖可得知gpiob
在apb2
匯流排上,所以要開啟其匯流排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初始化 相關暫存器初始化 延時函式 串列埠等初始化...