|
最近調(diào)STM8的I2C簡(jiǎn)直是爽呆呆,一直不成功,收不到從機(jī)寄存器的數(shù)據(jù),最后終于完成,究其原因可以總結(jié)為以下幾個(gè)方面:
1、I2C配置問(wèn)題,一定要注意配置問(wèn)題,特別的是I2C的時(shí)鐘,SCL時(shí)鐘的高低電平占空比,如果采用100kHz,占空比為1:1,若為400KHz,高低占空比為1:2,配置好之后直接應(yīng)答使能,方便后面通訊過(guò)程。注意配置好之后,程序運(yùn)行到這里SCL和SDA就會(huì)置1,并且能用電壓表和示波器查看電壓和波形;一定要去ST官網(wǎng)下載資料查看寄存器的配置,否則容易出錯(cuò)。
2、I2C讀數(shù)據(jù)通訊過(guò)程一定是包含這樣幾個(gè)過(guò)程:起始位,判斷CR1_SB,發(fā)送從機(jī)地址(7bit+1bit寫(xiě)操作),判斷ADDR,讀SR3清寄存器,發(fā)數(shù)據(jù),判斷BTF是否成功發(fā)送,重復(fù)起始,再讀SB,讀操作,ADDR,SR3,判斷RXNE,保存接收數(shù)據(jù),最后結(jié)束位和重新應(yīng)答使能;適當(dāng)?shù)募觧op延遲,I2C來(lái)不及應(yīng)答,注意不要多操作也不要少操作,嚴(yán)格按照流程來(lái),不然就會(huì)出錯(cuò)。只要寫(xiě)能成功,讀肯定沒(méi)問(wèn)題。
3、通過(guò)I/O口實(shí)現(xiàn)模擬I2C通訊,若實(shí)在是I2C硬件功能調(diào)不通,可先用對(duì)應(yīng)的I/O模擬出I2C的通訊過(guò)程。編程也是按照I2C通訊協(xié)議一步步走,不要漏掉和多出什么,否則容易出錯(cuò)。基本過(guò)程如下:1.配置系統(tǒng)時(shí)鐘(關(guān)鍵,時(shí)鐘決定了I2C通訊的速率);2.配置延時(shí)程序(這一點(diǎn)必須配置好,否者無(wú)法通訊成功);3.I2C初始化程序;4.起始信號(hào)程序;5.結(jié)束信號(hào)程序;6.接收從機(jī)應(yīng)答程序(給從機(jī)一個(gè)應(yīng)答位,保證接收到應(yīng)答才能進(jìn)行下一步操作);7.主機(jī)發(fā)送ack和Nack程序;8.檢測(cè)是否接收到應(yīng)答(對(duì)應(yīng)第6步,保證I2C數(shù)據(jù)傳輸正確,也可不要)9.寫(xiě)一個(gè)字節(jié)程序;10.讀一個(gè)字節(jié)程序。
將所有的這些程序編寫(xiě)好之后就能按照I2C通訊過(guò)程進(jìn)行調(diào)用和編寫(xiě),網(wǎng)上程序很多可以對(duì)著看,就不貼源代碼了。
|
評(píng)分
-
查看全部評(píng)分
|