R40 gpio 使用 原創

2021-09-03 02:26:42 字數 1620 閱讀 2831

首先要申請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...