平臺(tái):樹莓派 bcm2835 Raspberry Pi 3 Model B Rev 1.2
應(yīng)用層控制gpio目前知道有兩種方式——通過gpio設(shè)備文件和內(nèi)存映射。
第一種,通過gpio設(shè)備文件
設(shè)備文件位于/sys/class/gpio目錄下
通過向export中寫gpio號(hào)可以掛載對(duì)應(yīng)的gpio,gpio號(hào)是bcm的號(hào),不是wiringPi的。
掛載后在gpio的文件夾下會(huì)有配置接口文件,向這些接口文件寫命令就能控制gpio了。
上面用echo這種方式寫成shell腳本就可以用腳本控制gpio了。
如果通過c語(yǔ)言控制,使用Linux操作文件的API編程即可。
第二種,內(nèi)存映射
將gpio的地址映射到內(nèi)存空間,之后所有對(duì)這片內(nèi)存的操作就是對(duì)gpio的操作。使用mmap函數(shù)實(shí)現(xiàn)映射。物理內(nèi)存的設(shè)備文件是/dev/mem。
bcm2835的外設(shè)地址是0x3f000000,gpio的地址是外設(shè)地址基礎(chǔ)上偏移0x200000。
使用open函數(shù)可以打開mem設(shè)備文件,之后使用mmap函數(shù)映射,其返回值就是分配的內(nèi)存空間的起始地址。
注:必須有管理員權(quán)限才能打開mem設(shè)備文件,所以運(yùn)行命令時(shí)必須加上sudo。
gpio有41個(gè)寄存器,每個(gè)寄存器都是32位的。
前六個(gè)用來設(shè)置gpio的功能,前五個(gè)寄存器每個(gè)設(shè)置10個(gè)gpio,最后一個(gè)設(shè)置4個(gè),三個(gè)位設(shè)置一種功能。
gpio的設(shè)置寄存器是第8和9,清除寄存器是第11和12。一個(gè)位對(duì)應(yīng)一個(gè)gpio。
根據(jù)以上寄存器的布局方式,可以使用下面的代碼來設(shè)置和控制gpio。圖中小寫gpio就是映射后返回的地址指針,g是gpio號(hào)。
小結(jié): 第一種方式比較適合對(duì)單獨(dú)gpio的控制,比如調(diào)試和測(cè)試,更適用腳本編程;第二種方式適合c代碼編程,更加通用方便。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3083瀏覽量
74606 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4355瀏覽量
63323 -
命令
+關(guān)注
關(guān)注
5文章
706瀏覽量
22247 -
GPIO
+關(guān)注
關(guān)注
16文章
1224瀏覽量
52764 -
樹莓派
+關(guān)注
關(guān)注
118文章
1716瀏覽量
106125
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
樹莓派是如何控制GPIO輸入輸出的?
通過Python RPi.GPIO控制樹莓派引腳
樹莓派gpio應(yīng)用
樹莓派gpio接口及編程方法
樹莓派的gpio有什么用_怎么用
用網(wǎng)頁(yè)控制樹莓派的GPIO引腳

樹莓派驅(qū)動(dòng)步進(jìn)電機(jī)

樹莓派控制步進(jìn)電機(jī)

樹莓派控制PWM控制電機(jī)轉(zhuǎn)速

Linux樹莓派開發(fā)之wiringPi庫(kù),樹莓派控制繼電器

使用樹莓派GPIO口點(diǎn)亮雙色LED燈

評(píng)論