国内综合精彩aⅤ无码不卡_日本少妇做爰全过程_欧美性爱在线播放免费_午夜?V日韩一区二区_免费a级毛片无码免费播放_成在人线av无码喷水_亚洲精品网站色视频_国产婷婷精品成人_老师撩起裙子让我桶的视频_秋霞影院国产

基于ESP8266的外擴(kuò)IO程序

作者:新紀(jì)元 | 更新時(shí)間:2016-04-03 | 瀏覽量:3714

    我們都知道ESP8266外圍管腳資源非常有限,但是本人的項(xiàng)目需要通過ESP8266控制15路繼電器,如果直接采用腳對(duì)腳方式 那不可能完成的。故此 采用兩級(jí)74HC595通過三根數(shù)據(jù)線外擴(kuò)16路IO

    具體電路網(wǎng)上一大把,我就不浪費(fèi)時(shí)間(主要我是直接手動(dòng)焊接,并沒有具體畫電路圖)。管腳配置如下:

    GPIO10        RCK

    GPIO12        CLK

    GPIO13        DAT

    因?yàn)楸救耸褂密浖M方式,并沒有采用esp硬件SPI資源。然而通過使用官方提供的API進(jìn)行通信時(shí),通過示波器實(shí)測(cè) CLK時(shí)鐘只有不到500KHz(沒話說),所以控制io方面直接采用控制寄存器的方式了 具體如下:

#define GPIO_OUT_W1TS           0x60000304 /*寄存器地址*/
#define GPIO_OUT_W1TC           0x60000308 /*寄存器地址*/

/*eagle_soc.h文件中實(shí)現(xiàn)*/
//#define ETS_UNCACHED_ADDR(addr) (addr)
//#define READ_PERI_REG(addr) (*((volatile uint32_t *)ETS_UNCACHED_ADDR(addr)))
//#define WRITE_PERI_REG(addr, val) (*((volatile uint32_t *)ETS_UNCACHED_ADDR(addr))) = (uint32_t)(val)


#define CLK_595_SET				\
	WRITE_PERI_REG(GPIO_OUT_W1TS,READ_PERI_REG(GPIO_OUT_W1TS) | ((uint32)1 << 12))
#define CLK_595_RESET			\
	WRITE_PERI_REG(GPIO_OUT_W1TC,READ_PERI_REG(GPIO_OUT_W1TC) | ((uint32)1 << 12))
#define DAT_595_SET				\
	WRITE_PERI_REG(GPIO_OUT_W1TS,READ_PERI_REG(GPIO_OUT_W1TS) | ((uint32)1 << 13))
#define DAT_595_RESET			\
	WRITE_PERI_REG(GPIO_OUT_W1TC,READ_PERI_REG(GPIO_OUT_W1TC) | ((uint32)1 << 13))
	
		

    部分代碼如下:

void ICACHE_FLASH_ATTR
writeOneByte(unsigned char dat){
	unsigned int tmp;

	for(tmp = 8; tmp; tmp--){
		CLK_595_RESET;
		if(dat & 0x80){
			DAT_595_SET;
		}else{
			DAT_595_RESET;
		}
		CLK_595_SET;
		dat <<= 1;
	}
	//CLK_595_RESET;
}

其實(shí)很簡(jiǎn)單,稍微懂點(diǎn)單片機(jī)的都知道?。≈皇切酒煌?qū)動(dòng)IO的方式不同罷了!如上代碼時(shí)鐘速度也僅僅達(dá)到1.1MHz左右(實(shí)測(cè)),如果想通過外擴(kuò)IO方式實(shí)現(xiàn)一些速度要求較高的通信,建議還是放棄吧!但對(duì)于 比如我只是控制繼電器這種 外擴(kuò)IO就是一種很明智的選擇了 通過兩級(jí)595就可以達(dá)到外擴(kuò)16路IO了(三級(jí)3*8 = 24 。。。),另外我的GPIO12 GPIO13是跟Nokia5110屏幕公用的(通過片選選著)讓各位大神見笑了

595.zip




評(píng)論:共6條

貝殼物聯(lián) 評(píng)論于:2016-04-03 09:47:59
大神啊,還不忘謙虛,多謝分享!
ridxqqqq 評(píng)論于:2016-04-07 20:52:06
論壇資料好少啊 有視頻教程就好了
新紀(jì)元 回復(fù)于:2016-04-09 02:29:03
回復(fù) @ridxqqqq:來到這里玩的 還有誰教啊 都是看著一手看手冊(cè)一手看例程 外設(shè)驅(qū)動(dòng)是最簡(jiǎn)單的了 只要會(huì)驅(qū)動(dòng)IO 什么外設(shè)都能驅(qū)動(dòng)了
ridxqqqq 評(píng)論于:2016-04-09 16:34:45
唉 今天總算是有了點(diǎn)進(jìn)步 慢慢學(xué)習(xí)吧 感謝你的回復(fù)
simonc 評(píng)論于:2016-05-11 23:54:34
如果是用595拓展io,那么拓展的io能不能用于各種不同的傳感器呢,如果能要怎么做,感覺和液晶這類串行數(shù)據(jù)輸入的有區(qū)別
WECAN 評(píng)論于:2017-08-27 16:01:43
感謝樓主的分享啊!
返回頂部