找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 796|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

技術(shù)分享-如何配置硬件IIC

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1012195 發(fā)表于 2022-3-31 17:36 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
以下文章摘自公眾號(hào)——開(kāi)源電子網(wǎng)《技術(shù)干貨!網(wǎng)絡(luò)調(diào)試助手直接連接阿里云?》
更多技術(shù)文章,請(qǐng)掃下方二維碼關(guān)注








如何配置硬件IIC



       IIC英文全稱(chēng):Inter Integrated Circuit,集成電路總線,是飛利浦公司在八十年代開(kāi)發(fā)的一種串行、同步、半雙工總線。

       IIC總線協(xié)議無(wú)非就是幾樣?xùn)|西:起始信號(hào)、停止信號(hào)、應(yīng)答信號(hào)、以及數(shù)據(jù)有效性。大家學(xué)習(xí)了正點(diǎn)原子的IIC實(shí)驗(yàn),應(yīng)該很了解IIC時(shí)序。正點(diǎn)原子使用的是軟件模擬IIC,也就是用IO口模擬出IIC時(shí)序去通信。使用硬件IIC,就可以不用管時(shí)序信號(hào),配置好之后就可以產(chǎn)生時(shí)序。雖說(shuō)ST的硬件IIC很雞肋,但是某些方面還是比軟件模擬IIC稍微強(qiáng)一點(diǎn)。
關(guān)注公眾號(hào),回復(fù)“硬件IIC”免費(fèi)獲取項(xiàng)目文件

        下面列出一個(gè)硬件IIC和軟件IIC的對(duì)比表

         

        軟件IIC整個(gè)流程很清晰,假如出了bug,你能很快找到問(wèn)題,硬件IIC就需要?jiǎng)佑肈S100示波器去看波形,波形的查看教程可以參考以下推文

      《嵌入式工程師必備技能—如何使用示波器查看IIC波形》
         https://mp.weixin.qq.com/s/lnSORSbXeNJe-QVwW0EVbg

       其實(shí)很多時(shí)候是在管腳上考量使用軟件IIC。硬件IIC雖然被聽(tīng)說(shuō)吐槽過(guò)千百遍,但是有些人還是有興趣想使用STM32的IIC外設(shè)的,那么本文就教一下大家使用硬件IIC,側(cè)重于使用(這里使用的是F1 HAL庫(kù))。

       首先,先看HAL庫(kù)給IIC定義好的結(jié)構(gòu)體,這里主要講解IIC初始化結(jié)構(gòu)體

         

       ClockSpeed:IIC的傳輸速率,主要看從機(jī),從機(jī)AT24C02是最大為400kHz,低于400kHz即可。

       DutyCycle:SCL線時(shí)鐘占空比,就是低電平與高電平的比值,沒(méi)有嚴(yán)格限制,選擇2:1或者16:9即可。

       OwnAddress1:STM32的IIC設(shè)備的自身地址,掛載在IIC總線上的器件每一個(gè)都有自己唯一地址,作為主機(jī)也不例外。特別注意:這里地址的設(shè)置不要跟從機(jī)一樣即可。

       AddressingMode:地址的位數(shù)是使用7位還是10位,這要看從機(jī)了。對(duì)于AT24C02來(lái)說(shuō),直接使用7位。

       DualAddressMode:用來(lái)配置是否支持雙設(shè)備地址,沒(méi)有用到可以不配置。

       OwnAddress2:STM32的IIC設(shè)備的自身地址,是否有效取決于DualAddressMode成員的設(shè)置。

       GeneralCallMode:廣播呼叫模式,作為從機(jī)時(shí)使用,通常用不上。

       NoStrethMode:時(shí)鐘線延長(zhǎng),也是作為從機(jī)時(shí)使用的,通常用不上。

       在IIC實(shí)驗(yàn)例程中,編寫(xiě)hwiic_init如下:

         

       這里是調(diào)用HAL_I2C_Init函數(shù)對(duì)IIC進(jìn)行初始化,在IIC的初始化回調(diào)函數(shù)中就要使能I2C1時(shí)鐘以及對(duì)相關(guān)引腳進(jìn)行初始化,特別注意GPIO口的模式(復(fù)用開(kāi)漏輸出),這部分代碼比較簡(jiǎn)單就不列出來(lái)了。

       初始化完成后,使用HAL庫(kù)提供的IIC發(fā)送和接收函數(shù),函數(shù)如下:

         

        hi2c:IIC的句柄結(jié)構(gòu)體地址。

        DevAddress:從機(jī)的設(shè)備地址,這里并不是通訊地址。

        MemAddress:要寫(xiě)入的地址。

        MemAddSize:地址的長(zhǎng)度。

        pData:要寫(xiě)入的數(shù)據(jù)的地址。

        Size:寫(xiě)入數(shù)據(jù)的個(gè)數(shù)

        Timeout:函數(shù)執(zhí)行的超時(shí)時(shí)間。

        以往的AT24C02的寫(xiě)操作函數(shù)和讀操作函數(shù),函數(shù)體內(nèi)一堆代碼,現(xiàn)在只是幾行代碼。

       at24c02寫(xiě)一字節(jié)函數(shù)代碼如下:

         

       at24c02讀一字節(jié)函數(shù)代碼如下:

         

       假如說(shuō)直接用HAL_I2C_Mem_Write來(lái)編寫(xiě)連續(xù)寫(xiě)函數(shù),就有頁(yè)寫(xiě)限制,也就是最多8字節(jié),當(dāng)你寫(xiě)入的數(shù)據(jù)大于8字節(jié)時(shí),就會(huì)出現(xiàn)錯(cuò)誤了。

       所以編寫(xiě)at24c02的連續(xù)寫(xiě)函數(shù)最好就是調(diào)用at24c02_write_one_byte這個(gè)函數(shù)接口。

       最終可以比對(duì)一下相同數(shù)據(jù)量的傳輸下,軟件模擬IIC和硬件IIC的速度對(duì)比。

       硬件IIC的配置使用還是挺簡(jiǎn)單的,速度上面還是比模擬IIC快,假如說(shuō)是驅(qū)動(dòng)OLED屏幕的話,可以試用一下硬件IIC提高一下刷新率,得到更好的顯示效果。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表