ESP8266 RTOS 筆記(二)-GPIO(2)_OUTPUT設定與介紹
此章節為記錄 esp8266的gpio output部分
從關方手冊可以看到幾個有關GPIO的registers:
從關方手冊可以看到幾個有關GPIO的registers:
- Output enable register: GPIO_ENABLE_W1TS
- Output disable register: GPIO_ENABLE_W1TC
- Output low level register GPIO_OUT_W1TC
- Output high level register GPIO_OUT_W1TS
每個REGISTER皆為16個bits,bit[15:0]
1.GPIO_ENABLE_W1TS:
相對應的bit設為1,此IO的output將至能
例如:
欲將gpio4設為output,則此register設為0x10
欲將gpio5設為output,則此register設為0x20
若希望gpio4與gpio5皆設為output,則此register設為0x30
2.GPIO_ENABLE_W1TC:
關閉output功能,
相對應的bit設為1,此IO的output將被關閉
例如:
欲將gpio4的output失能,則此register設為0x10
欲將gpio5的output失能,則此register設為0x20
gpio4與gpio5的output皆失能,則此register設為0x30
3.GPIO_OUT_W1TC
bit[15:0] output low level bit
設為1則腳位為為High level
例如:
gpio4要設為low,則此register設為0x10
4.GPIO_OUT_W1TS
bit[15:0] output high level bit
設為1則腳位為為High level
例如:
gpio4要設為high,則此register設為0x10
看完register後再來看一下gpio.h中的一些定義:
void gpio_output_conf(uint32 set_mask, uint32 clear_mask, uint32 enable_mask, uint32 disable_mask)
{
GPIO_REG_WRITE(GPIO_OUT_W1TS_ADDRESS, set_mask);
GPIO_REG_WRITE(GPIO_OUT_W1TC_ADDRESS, clear_mask);
GPIO_REG_WRITE(GPIO_ENABLE_W1TS_ADDRESS, enable_mask);
GPIO_REG_WRITE(GPIO_ENABLE_W1TC_ADDRESS, disable_mask);
}
仔細看gpio.h,有許多output或input的定義都是透過gpio_output_conf(...)來進行設定
比如說:
實例:
使用前先進行init:
gpio_config(),這支韓是點進去看,會發現其實也就是用gpio_output_conf(...)來設定而已。
gpio5希望是 high,有幾種方法可以使用
1.GPIO_ENABLE_W1TS:
相對應的bit設為1,此IO的output將至能
例如:
欲將gpio4設為output,則此register設為0x10
欲將gpio5設為output,則此register設為0x20
若希望gpio4與gpio5皆設為output,則此register設為0x30
2.GPIO_ENABLE_W1TC:
關閉output功能,
相對應的bit設為1,此IO的output將被關閉
例如:
欲將gpio4的output失能,則此register設為0x10
欲將gpio5的output失能,則此register設為0x20
gpio4與gpio5的output皆失能,則此register設為0x30
3.GPIO_OUT_W1TC
bit[15:0] output low level bit
設為1則腳位為為High level
例如:
gpio4要設為low,則此register設為0x10
4.GPIO_OUT_W1TS
bit[15:0] output high level bit
設為1則腳位為為High level
例如:
gpio4要設為high,則此register設為0x10
看完register後再來看一下gpio.h中的一些定義:
void gpio_output_conf(uint32 set_mask, uint32 clear_mask, uint32 enable_mask, uint32 disable_mask)
{
GPIO_REG_WRITE(GPIO_OUT_W1TS_ADDRESS, set_mask);
GPIO_REG_WRITE(GPIO_OUT_W1TC_ADDRESS, clear_mask);
GPIO_REG_WRITE(GPIO_ENABLE_W1TS_ADDRESS, enable_mask);
GPIO_REG_WRITE(GPIO_ENABLE_W1TC_ADDRESS, disable_mask);
}
仔細看gpio.h,有許多output或input的定義都是透過gpio_output_conf(...)來進行設定
比如說:
#define GPIO_OUTPUT(gpio_bits, bit_value) \ if(bit_value) gpio_output_conf(gpio_bits, 0, gpio_bits, 0);\ else gpio_output_conf(0, gpio_bits, gpio_bits, 0)
實例:
使用前先進行init:
void init_output(void) { GPIO_ConfigTypeDef gpio_in_cfg; //Define GPIO Init Structure gpio_in_cfg.GPIO_IntrType = GPIO_PIN_INTR_DISABLE; gpio_in_cfg.GPIO_Mode = GPIO_Mode_Output; gpio_in_cfg.GPIO_Pullup = GPIO_PullUp_DIS; gpio_in_cfg.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5; // Enable GPIO gpio_config(&gpio_in_cfg); //Initialization function }
gpio_config(),這支韓是點進去看,會發現其實也就是用gpio_output_conf(...)來設定而已。
gpio5希望是 high,有幾種方法可以使用
GPIO_OUTPUT_SET(GPIO_ID_PIN(5),1);
gpio_output_conf(GPIO_Pin_5,0,0,0);在使用上非常簡單,原廠已經將煩人的暫存器封裝成函式了,節省大家的開發時間
留言
張貼留言