1樓:匿名使用者
這是用i/o口暫存器定義的方法,其實就是
gpiog->crh&=0xffff0fff;gpiog->crh|=8<<12; //把pg11定義為輸入模式,即
gpiog->crh=0xffff8fff;則暫存器位配置cnf1、cnf0、mode1、mode0分別是1000.
同理gpiog->crh&=0xffff0fff;gpiog->crh|=3<<12;//是把pg11定義為推輓輸出模式,即
gpiog->crh&=0xffff3fff;則暫存器位配置cnf1、cnf0、mode1、mode0分別是0011.
2樓:a九尾妖姬
其實就是:
gpiog->crh&=0xffff0fff;gpiog->crh|=8<<12; //把pg11定義為輸入模式,即
gpiog->crh=0xffff8fff;則暫存器位配置cnf1、cnf0、mode1、mode0分別是1000.
同理gpiog->crh&=0xffff0fff;gpiog->crh|=3<<12;//是把pg11定義為推輓輸出模式,即
gpiog->crh&=0xffff3fff;則暫存器位配置cnf1、cnf0、mode1、mode0分別是0011.
gpio口配置是通過配置暫存器來進行的,每個gpio 埠有:
兩個32位配置暫存器(gpiox_crl,gpiox_crh)分別控制每個埠的高八位和低八位。如果io口是0-7號的話,則寫crl暫存器;如果io口是8-15號的話,則寫crh暫存器。
兩個32位資料暫存器(gpiox_idr,gpiox_odr)一個是隻讀作輸入資料暫存器,一個是隻寫作輸出暫存器。
一個32位置位/復位暫存器(gpiox_bsrr)。
一個16位復位暫存器(gpiox_brr)。
一個32位鎖定暫存器(gpiox_lckr)。
常用的io埠暫存器只有四個:crh,crl,idr,odr。
埠配置暫存器crh
3樓:匿名使用者
這是用i/o口暫存器定義的方法,其實就是
gpiog->crh&=0xffff0fff;gpiog->crh|=8<<12; //把pg11定義為輸入模式,即
gpiog->crh=0xffff8fff;則暫存器位配置cnf1、cnf0、mode1、mode0分別是1000.
同理gpiog->crh&=0xffff0fff;gpiog->crh|=3<<12;//是把pg11定義為推輓輸出模式,即
gpiog->crh&=0xffff3fff;則暫存器位配置cnf1、cnf0、mode1、mode0分別是0011.
4樓:匿名使用者
說一下我自己的理解吧,這個配置gpio的crh與crl分別對應的是gpio16個引腳的高8位於低8位,上面的**配置的是crh,也就是高8位的引腳,具體是哪個引腳因看第一個語句,gpiog->crh&=0xffff0fff;具體分析一下這個語句,
gpiog->crh=gpiog->crh&0xffff0fff;也就是用crh的第4位也就是gpiog的第11引腳的crh先清零,其他的位不變,然後再分析下面這個語句
gpiog->crh|=8<<12;把這個語句拆開可以這樣理解
gpiog->crh=gpiog->crh|8<<12;也就是說需要gpio->crh或上8<<12(這裡分析一下這個符號《與》該怎麼記憶呢,其實可以這樣箭頭向左就是左移,箭頭向右就是右移,這裡的8<<12也就是8左移12位,怎麼左移呢都用2進製表示一下就清楚了8用二進位制的話是1000左移12位是1000 0000 0000 0000,也就是0x8000,對於的就是複用推輓輸出模式)
gpiog->crh|=8<<12;這句話最終可以看成是這樣的gpiog->crh|=0x0000 8000;因為前面的模式已經清空了,這裡再重新配置
對於stm32,為什麼 gpioa->crh&=0x0f0fffff;的意思是pa13,15設定成輸入,**等
5樓:匿名使用者
是這樣的;所以pa13,15對應的是0x0(即0000);
0000 = cnf1 cnf0 mode1 mode0;mode00代表輸入模式,cnf 00在輸入模式下代表模擬輸入。
stm32的gpioa有16個引腳,但是gpioa也是暫存器嗎有多少位
6樓:
stm32是32位的,其中的所有暫存器都是32位的,但是不同暫存器中,有效的位數相應改變。
gpio有
埠配置低暫存器gpiox_crl:配置0-7引腳的模式,每個引腳配4bit,兩位用於配置輸入模式,兩位用於配置輸出模式
埠配置高暫存器gpiox_crh:配置8-15引腳的模式(同上)
埠輸入資料暫存器gpiox_idr(低16位有效)並行讀入16位資料
埠輸出資料暫存器gpiox_odr(低16位有效)並行輸出16位資料
埠位設定/清除暫存器gpiox_bsrr:拉高拉低相應引腳,1bit對應1引腳
埠位清除暫存器gpiox_brr(低16位有效):拉低相應引腳,同上
埠配置鎖存暫存器gpiox_lckr(17位有效)
x=a b c d e;
具體可以參看《stm32參考手冊》
為什麼程式不認識高位暫存器crh呢
7樓:匿名使用者
gel檔案裡的memory map設定了這個地址區域是不可讀的範圍。你要讀的話,需要修改gel檔案的相關讀寫許可權。但是最好先閱讀相關文件。
擅自更改memory map讀寫許可權可能會導致某些不可預計的錯誤。 檢視原帖》
暫存器間接定址方式中,運算元在中a通用暫存器 b
c.儲存單元 暫存器間接定址方式中,暫存器記憶體放的是 運算元的地址,而不是運算元 本回身,即運算元是答通過暫存器間接得到的,因此稱為暫存器間接定址。運算元放在ram某個儲存單元中,該單元的地址又放在暫存器r0或r1中。如要進行算術運算,要計算每班學員各科成績的平均值,可以編一個求平均成績的通用程式...
微控制器的特殊功能暫存器中哪些暫存器可以用暫存器定址
可以直接讀取,也就是暫存器定址是可以的,但80 ff的暫存器 52微控制器 必須採用暫存器間接定址。你用匯編嗎。如果用c的話就很簡單了。直接讀就好了。當然要看他的手冊,有的讀寫的時候,要先向暫存器寫入特定的值才能寫。比如你定義一個數 int dat dat gpiob 可以位bai定址的特殊功能du...
程式狀態字暫存器PSW到底屬於運算器還是控制器
狀態字暫存器psw屬於運算器部分,我們期末就考了這道題,是選擇題,你可以參考白中英主編版的權第四版組成原理,第128頁,還畫有cpu模型圖,控制器由程式計數器 指令暫存器 指令譯碼器 時序產生器 操作控制器組成 運算器由 算術邏輯單元 通用暫存器 資料緩衝暫存器dr,和狀態字暫存器psw組成。恩這個...