首先要申請gpio
if(0 != gpio_request(config->gpio, null))
然後需要設定模式,有下列方法: 1、
if (0 != gpio_direction_output(config->gpio, 0)) 2、
sunxi_gpio_to_name(config->gpio, pin_name); //pin_name 是pa1 ,pb3這樣的名字
config_set = sunxi_pincfg_pack(sunxi_pincfg_type_func,1); //第二個引數表示功能,具體參見datasheet,目前0表示輸入,1表示輸出模式。
pin_config_set(sunxi_pinctrl,pin_name,config_set);
printk(" gpio name: %s gpio : %d \n",pin_name,config->gpio);
設定gpio值也可以有兩種方法,如下: 1、
__gpio_set_value(n, 0); //n 是gpio號 2、
sunxi_gpio_to_name(n, pin_name);
config_set = sunxi_pincfg_pack(sunxi_pincfg_type_dat,0);
pin_config_set(sunxi_pinctrl,pin_name,config_set);
config_get = sunxi_pincfg_pack(sunxi_pincfg_type_dat,0xffff);
pin_config_get(sunxi_pinctrl,pin_name,&config_get); //取gpio值
printk(" [%s] pin value: %ld\n",pin_name,sunxi_pincfg_unpack_value(config_get));
下面是取gpio功能配置值的,可以檢視設定功能是否正確
config_get = sunxi_pincfg_pack(sunxi_pincfg_type_func,0xffff);
pin_config_get(sunxi_pinctrl,pin_name,&config_get); //取gpio的功能配置值
printk(" [%s] function value: %ld\n",pin_name,sunxi_pincfg_unpack_value(config_get));
取gpio上拉下拉電阻繼電器,看手冊 0不使用,1上拉 ,2下拉
config_get = sunxi_pincfg_pack(sunxi_pincfg_type_pud, 0xffff);
pin_config_get(sunxi_pinctrl, pin_name, &config_get);
printk(" [%s] pull value: %ld\n", pin_name, sunxi_pincfg_unpack_value(config_get));
//config_set = sunxi_pincfg_pack(sunxi_pincfg_type_pud, 1);
//pin_config_set(sunxi_pinctrl, pin_name, config_set);
R40gpio輸出無高低電平變化 原創
在配置gpio控制繼電器時,其中有幾個在gpio傳送高低電平繼電器沒有變化,測試繼電器是好的,於是用萬用表測io,發現推送高低電平時,沒有發生改變。幾經折騰,發現該組pg的電源沒開,硬體同事找到該組gpio的電源用的是dldo3 於是找到sys config.fex裡面的電源選項power sply...
GPIO時鐘使能和串列埠時鐘使能的關係
由於stm32有很多外設,為降低功耗,每個外設都對應著乙個時鐘。在晶元剛剛上電時,這些時鐘都是被關閉的。如果想要外設工作,必須把相應的時鐘開啟。即當gpio口復用usart進行通訊時,必須要先使能gpio的時鐘,然後再使能具體外設的時鐘 usart的時鐘 1.stm32微控制器的i o埠配置步驟 1...
Linux通過核心檢視晶元gpio配置使用情況
使用者空間使用gpio輸出試,出錯 使用pb08輸出1 對應40 32 b a 08 40 echo 40 export sh write error device or resource busy echo 41 export sh write error device or resource b...