日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ds1302模块 树莓派_(16)给树莓派B+ 安装一个实时时钟芯片DS1302

發布時間:2025/3/19 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ds1302模块 树莓派_(16)给树莓派B+ 安装一个实时时钟芯片DS1302 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在這里首先感謝glgoo在google被墻的情況下提供搜索功能,還要感謝

http://wiringpi.com/?以及github,盡管自己眼瞎,幾經波折還是發現了塵封已久的少林“七十二絕技”,沒錯,每種絕技都能克制一個樹莓派GPIO控制外設的問題,七十二絕技的核心就是wiringpi這個為Pi GPIO寫的C語言庫了,而每種絕技則暗藏在wiringPi/examples/目錄下,這里就不一一羅列了,大家想學什么招式,就去看每個example,都非常簡短。

其實早在第9篇文章“安裝GPIO庫”,就已經下載并安裝了wiringPi,然而后來一直沒用C,而用的是python,python的便捷性、交互式開發使得調試非常方便,直到這一次準備安裝一個DS1302時鐘芯片時,苦于搜不到相關的解決方案,才最終轉回C庫。然而可能會陷入rtc-pi這個C程序來驅動DS1302,這里面并沒有用wiringPi的封裝,二是直接和交互了,像我這種菜鳥,暫時不會改里面的地址,外文網站上又寫的不清楚。好在最終還是搜到了github里面的ds1302.c,定睛一看原來是在wiringPi項目的examples里,頓時心中千萬頭草泥馬呼嘯而過。

暫時不必著急看ds1302.c源碼,因為,它相當簡單,把自己的線路連接好,引腳編號對應修改就大功告成,然后再仔細品讀源碼不遲。

DS1302時鐘模塊的5個引腳分別是VCC、GND、CLK、DAT、RST,都是有意義的,可以在樹莓派B+上面找到類似的引腳如SCLK、SDA、CE,我們就用這幾個類似的GPIO引腳來和DS1302連接,如下圖:

這里我們要注意這幾個引腳對應的wPi的編號,而不是BOARD編號,對應關系如下:

BOARD - NAME - DS1302 - wPi

1 ? ? ? ? - 3.3V ? - VCC ? ? ?- 無

23 ? ? ? - SCLK ? - CLK ? ? ?- 14

25 ? ? ? - 0V ? ? ?- GND ? ? ?- 無

27 ? ? ? - SDA.0 - DAT ? ? ?- 30

24 ? ? ? - CE0 ? ?- RST ? ? ?- 10

所以,我們只需要用14、30、10這幾個GPIO引腳來編程就可以了。

現在,可以打開wiringPi/examples/ds1302.c文件,它里面包含了wiring/devLib/下的ds1302.h,隱藏了具體的實現細節,可以先不關注。直接看main函數:

需要用到的函數就是畫紅線的幾個,首先調用ds1302setup(int clockPin, int dataPin, int csPin)來設置樹莓派GPIO引腳,參數修改成14、30、10即可。setLinuxClock()設置系統的時間,setDSclock()則是根據系統時間設置DS模塊的時間,ramTest對DS模塊的RAM進行測試,ds1302clockRead()從DS模塊讀出時間,細節處理函數這里略過。現在在examples目錄下make ds1302,成功后即可使用ds1302了。

使用方法:

1)./ds1302 -rtest,測試DS1032的RAM,如果引腳連接錯誤GPIO設置錯誤則會報錯:

成功則會顯示OK:

2)./ds1302 -sdsc,會調用setDSclock(),將DS模塊設置成系統的時間,在這之前需要把自己的時區設置成本地時區cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime,并且同步網絡時間ntpdate cn.pool.ntp.org

3)現在可以從DS模塊讀取時間

一段時間后再讀一次:

看樣子DS模塊已經保存了系統時間。

4)./ds1302 -slc,從DS模塊讀取時間來設置系統的時間

結果設置成了比本地時間慢8個小時,正好是UTC時間。

修改ds1302.c源文件,找到setDSclocl()函數,其中調用了time()來獲取系統時間,而time()函數返回的是從UTC(Coordinated Universal Time)時間1970年1月1日00:00:00(稱為UNIX系統的Epoch時間)到當前時刻的秒數,要想從該秒數轉換成本地時間需要用localtime()函數struct tm *localtime(const time_t *clock),最后修改成如下:

刪除原來的ds1302.o和ds1302,重新make ds1302。

重新執行ntpdate cn.pool.ntp.org同步網絡時間,然后./ds1302 -sdsc設置DS模塊的時間為本地時間,再執行./ds1302查看時鐘模塊的時間,這時應該就顯示正確了。

5)cp ./ds1302 /usr/bin/下,并添加開機啟動項

Arch下面用的是systemctl,所以需要將/usr/bin/ds1302 -slc命令加到一個service中,我是添加在了網卡啟動服務中。

重啟后,時間正確,則說明我們的時鐘模塊安裝成功了。

注:本文中的代碼可以通過下載wiring庫然后自行修改examples/ds1302.c,也可以從我的github下載:https://github.com/hustlbj/raspberry

總結

以上是生活随笔為你收集整理的ds1302模块 树莓派_(16)给树莓派B+ 安装一个实时时钟芯片DS1302的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。