RaspberryPi2B使用bcm2835c庫控制GPIO
網上有很多RaspberryPi控制GPIO的方法,有Python、WiringPi、bcm2835 C library
使用bcm2835 C庫控制GPIO時,發現不管怎么設置,GPIO都沒有反應,沒有輸出控制的值。
查資料發現:
bcm2835的C庫是bcm2835芯片專用的庫,在RaspberryPI上使用沒有問題,而RaspberryPi2B使用的是bcm2836芯片,雖說bcm2836和bcm2835芯片基本上一模一樣,可以拿bcm2835芯片的數據手冊,對應bcm2836芯片使用,但是畢竟兩個芯片還是有差別的,在這里只針對GPIO的區別簡單介紹:
在bcm2835庫src/bcm2835.h中GPIO的基地址為:0x20000000
#define BCM2835_PERI_BASE 0x20000000
需要改成bcm2836上對應的虛擬地址基地址:0x3F000000
#define BCM2835_PERI_BASE 0x3F000000
是因為虛擬地址和物理地址對應關系不統一造成控制GPIO無反應。
通過以上修改后,在RaspberryPi2B上重新配置並編譯安裝bcm2835庫后,就可以正常通過調用bcm2835庫控制GPIO。