国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2024年12月04日(星期三)

正在發(fā)生

2019年12月04日 | 基于STM8的IIC協(xié)議--實(shí)例篇--時(shí)鐘模塊(DS3231)讀取

發(fā)布者:HeavenlyWonder 來源: eefocus關(guān)鍵字:STM8  IIC協(xié)議  時(shí)鐘模塊  DS3231  讀取 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

1. 綜述


  由上篇博客可知道IIC協(xié)議如何用代碼實(shí)現(xiàn),本篇博客就不涉及協(xié)議內(nèi)容,只講解如何使用。


  本次的實(shí)驗(yàn)傳感為:DS3231(時(shí)鐘模塊),對(duì)于時(shí)鐘模塊的具體信息我也就不多介紹,大家可以自行度娘,具體功能無非就是讓單片機(jī)中能夠起到獲取時(shí)間的作用。該模塊是可以由IIC協(xié)議去驅(qū)動(dòng)的,再加上所要的操作也是比較簡(jiǎn)單,部分剛接觸IIC協(xié)議的小伙伴可以拿來練手的一個(gè)模塊。


2. 明確任務(wù)順序


  個(gè)人習(xí)慣,在每驅(qū)動(dòng)一個(gè)新傳感的時(shí)候,我會(huì)將我要完成的傳感分為幾個(gè)任務(wù)點(diǎn)。接下來就展示一下我在寫DS3231模塊時(shí)的任務(wù)欄。


  一.硬件部分

     1.完成排針焊接

     2.完成傳感引角和單片機(jī)引角的接線

  二.軟件部分

     1. 找到該傳感的官方手冊(cè)并認(rèn)真閱讀

     2. 找到并定義該傳感的地址(7位地址、8位地址)

     3. 找到并定義該傳感器寄存器地址

     4. 完成讀寫函數(shù)的代碼

     5. 測(cè)試傳感是否有響應(yīng)

     6. 查看手冊(cè),了解傳感的工作模式

     7. 完成傳感參數(shù)初始化

     8. 傳感數(shù)據(jù)的獲取


   根據(jù)上面這些小任務(wù)一一解決,這樣一來,大多數(shù)傳感就能成功驅(qū)動(dòng)了,這里在給一個(gè)建議,驅(qū)動(dòng)傳感器的代碼最好不要一次性全部寫完再進(jìn)行測(cè)試,這樣成功率不高,并且會(huì)大大增加你找問題的難度,將每個(gè)功能函數(shù)測(cè)試完再進(jìn)行下一個(gè)功能函數(shù)的編寫,會(huì)大大加大你的效率。


3. 具體任務(wù)實(shí)現(xiàn)步驟


  3.1. 硬件部分


  在STM8S103芯片中,我所定義的IIC協(xié)議中的SDA引角為PD3,SCL引角為PD4,該時(shí)鐘模塊所需提供的電源為3.3V。所以接線圖如下。

  3.2. 軟件部分


?。?)官方手冊(cè)


  我這里提供的是全英版的官方手冊(cè),多看點(diǎn)英文對(duì)你有好處的。


鏈接:https://pan.baidu.com/s/1Oo6o68SoVr7gt8tPZIoQxw 

提取碼:uzih 

 


 ?。?)器件地址


  在說明手冊(cè)中,我們可以在第16頁的右下角找到下面這句話:


  The slave address byte contains the 7-bit DS3231 address, which is 1101000, followed by the direction bit (R/W), which is 0 for a write.


  這句話的大意為,從機(jī)的7位地址為1101000,后跟一位讀寫位,讀寫位為0時(shí)是寫位。即7位地址的為0x68,8位地址為0xD0。


 ?。?)寄存器地址

  DS3231的寄存器地址都在這了,大家可根據(jù)所需要用的功能定義相應(yīng)的寄存器。


  以下是我在頭文件所定義的格式,因?yàn)槲抑恍枰@取時(shí)間,不需要進(jìn)行其他操作,所以部分寄存器沒有使用。


#define DS3231_Address           0xD0                           //設(shè)備地址

#define Seconds_Register         0x00                           //秒鐘寄存器

#define Minutes_Register         0x01                           //分鐘寄存器

#define Hour_Register            0x02                           //小時(shí)寄存器

#define Day_Register             0x03                           //星期寄存器

#define Date_Register            0x04                           //日期寄存器

#define Month_Register           0x05                           //月份寄存器(第七位是世紀(jì)位)

#define Year_Register            0x06                           //年份寄存器

 

4. 例程


4.1 編譯環(huán)境


  我的編譯環(huán)境是IAR,這款軟件是現(xiàn)在STM8的主流平臺(tái),比較推薦。不過我打算等到STCubeMX更新出比較方便的版本后再去使用Keil5,因?yàn)槲以谟肧TM32的時(shí)候就是利用Keil5,的確很方便,你們也可以學(xué)著用一下。


4.2 主芯片


  我的主芯片是STM8S系列中的103,其中STM8S的003、005、和103、105,配置一樣(外設(shè)和CPU頻率,F(xiàn)LASH),在代碼相同的情況下均可進(jìn)行燒寫。


4.3 庫(kù)文件的添加


  我們的工程可以在IAR中的官方例程中復(fù)制,操作過程:打開STM8S_StdPeriph_Lib(這是一個(gè)官方的庫(kù)文件,下載IAR STM8包的時(shí)候就攜帶,里面有庫(kù)文件和相對(duì)應(yīng)的例程),將Libraries文件復(fù)制到你工程所在的文件下,并將有關(guān)于ADC的庫(kù)文件添加到你的工程列表當(dāng)中。添加完成后,就可以開始編寫代碼了(如果你將全部的庫(kù)文件都添加進(jìn)來的話,編譯程序后庫(kù)文件還有紅點(diǎn)報(bào)錯(cuò)的話,這是因?yàn)槟氵x的芯片上沒有該功能,你需要將其刪掉才能不報(bào)錯(cuò)。)如圖。

4.4 代碼


4.4.1 SDA、SCL引角的定義


  我這里將SDA、SCL都設(shè)置為了推挽輸出,具體為什么可與參考上一片IIC協(xié)議講解。


//IIC引腳 

GPIO_Init(IIC_SCL_GPIO_Port, IIC_SCL_Pin, GPIO_MODE_OUT_PP_HIGH_FAST);

GPIO_Init(IIC_SDA_GPIO_Port, IIC_SDA_Pin, GPIO_MODE_OUT_PP_HIGH_FAST);


4.4.2 DS3231句柄定義


  為了能夠方便數(shù)據(jù)的管理,所以我定義了DS3231的一個(gè)句柄。


typedef struct DS3231

{    

  uint8_t uSeconds;                     //秒

  uint8_t uMinutes;                     //分鐘

  uint8_t uHour;                        //小時(shí)

  uint8_t uDay;                         //星期

  uint8_t uData;                        //日期

  uint8_t uMouth;                       //月份

  uint8_t uyear;                        //年份

  uint8_t uTime[3];                     //將秒、分鐘、小時(shí)、日期包括在內(nèi)

     

}DS3231_HandleTypeDef; 


4.4.3 BCD格式和B格式轉(zhuǎn)換


  在手冊(cè)中可以看到,寫入到DS3231中的格式是BCD格式,而讀取到的卻是B格式,所以我們需要兩個(gè)函數(shù)將其轉(zhuǎn)換,也方便我們察看數(shù)據(jù)的結(jié)果。


uint8_t Byte_Transform_BCD(uint8_t uData)

{

  uint8_t i, j, uBCD_Code;

  

  i = uData / 10;

  j = uData % 10;

  uBCD_Code = j + ( i << 4 );

  

  return uBCD_Code;

  

}

 

uint8_t BCD_Transform_Byte(uint8_t uData)

{

   uint8_t uByte_Code;

 

   uByte_Code  = (uData & 0x0f);

   uData     >>= 4;

   uData      &= 0x0f;

   uData      *= 10;

   uByte_Code += uData;

  

   return uByte_Code;

    

}


4.4.4讀寫函數(shù)編寫


  讀寫函數(shù)我們?nèi)绻蝗タ词謨?cè)說明的話是無法編寫代碼的,所以我們需要去看手冊(cè),根據(jù)手冊(cè)中的IIC命令順序進(jìn)行編寫代碼。


這幅圖為 IIC數(shù)據(jù)傳輸概述。

寫函數(shù)流程圖:

  這個(gè)流程圖是在DS3231中的官方圖,根據(jù)圖中的命令可以寫出代碼,其中,代碼中出現(xiàn)IIC_HandleTypedef * iicHandle等參數(shù),是IIC的句柄,具體可看上一篇博客,下面所出現(xiàn)的也是一樣的意思。


uint8_t vSen_DS3231_Write_Bytes(IIC_HandleTypedef * iicHandle, uint8_t Register_Address, uint8_t Data_Byte)

{

  

  vIIC_Start_Signal(iicHandle);                                                 //1.  IIC_Start                 ;  起始信號(hào)                               

  vIIC_SendByte(iicHandle, Slave_Address);                                      //2.  IIC_Send Device Address(W);  發(fā)送(設(shè)備地址)告訴總線即將操作的設(shè)備   

 

  if(!bIIC_ReadACK(iicHandle))                                                  //3.  IIC_ReadAck               ;  等待響應(yīng)

  {                                                                                   

    vIIC_Stop_Signal(iicHandle);                                                   

    return FALSE;                                                                     

  }

 

  vIIC_SendByte(iicHandle, Register_Address);                                   //4.  IIC_Send Register Address ; 發(fā)送(寄存器)   告訴設(shè)備我們即將操作的寄存器

  bIIC_ReadACK(iicHandle);                                                      //5.  IIC_ReadAck               ; 等待響應(yīng)

  vIIC_SendByte(iicHandle, Data_Byte);                                          //6.  IIC_Send the data to Reg  ; 發(fā)送(數(shù)據(jù))     寫入數(shù)據(jù)到指定設(shè)備的寄存器中

  bIIC_ReadACK(iicHandle);                                                      //7.  IIC_ReadAck               ; 等待響應(yīng)

  vIIC_Stop_Signal(iicHandle);                                                  //8.  IIC_Stop                  ; 結(jié)束信號(hào)

 

 

  return TRUE;

  

}

 

  讀函數(shù)流程圖:


uint8_t vSen_DS3231_Read_Bytes(IIC_HandleTypedef * iicHandle, uint8_t Register_Address)

{

  uint8_t uRev_Register_Data = 0x00;

  

  vIIC_Start_Signal(iicHandle);                                                 //1.  IIC_Start                 ;  起始信號(hào)                                                                                                                                                  

  vIIC_SendByte(iicHandle, Slave_Address);                                      //2.  IIC_Send Device Address(W);  發(fā)送(設(shè)備地址)告訴總線即將操作的設(shè)備       

                                                                                         

[1] [2]
關(guān)鍵字:STM8  IIC協(xié)議  時(shí)鐘模塊  DS3231  讀取 引用地址:基于STM8的IIC協(xié)議--實(shí)例篇--時(shí)鐘模塊(DS3231)讀取

上一篇:基于STM8的UART發(fā)送和中斷接收
下一篇:基于STM8的TIM定時(shí)器操作---STM8-第三章

推薦閱讀

移動(dòng)機(jī)器人在制造行業(yè)中被大量應(yīng)用,使得機(jī)器人的維護(hù)和保養(yǎng)重要性日益凸顯,科學(xué)、合理的維護(hù)和保養(yǎng)可減少機(jī)器人的故障率、停機(jī)時(shí)間,最大限度地提高生產(chǎn)效率。那么如何維護(hù)和保養(yǎng)呢?一、 日維護(hù)和保養(yǎng)1、檢查設(shè)備的外表有沒有灰塵附著2、檢查機(jī)器人、導(dǎo)線和電纜的磨損、壓損,各接頭是否固定良好,有無松動(dòng)3、各操作按鈕(尤其開關(guān)、急停按鈕)動(dòng)作是...
?2019深圳市公安局第十五屆警營(yíng)開放日于11月30日在深圳全城啟動(dòng)。本屆警營(yíng)開放日活動(dòng)以“相約我和你,警民零距離”為主題,全市148個(gè)開放點(diǎn)同步開展活動(dòng)。 各個(gè)開放點(diǎn)也因地制宜開展多項(xiàng)活動(dòng),亮點(diǎn)紛呈。今年,除了“傳統(tǒng)”的警用裝備展示,警犬表演等活動(dòng),巡邏機(jī)器人、智能服務(wù)機(jī)器人等警界科技神器也悉數(shù)亮相。統(tǒng)計(jì)數(shù)據(jù)顯示,全市各開放點(diǎn)合計(jì)超過...
諸如太陽能和風(fēng)力發(fā)電之類的創(chuàng)新技術(shù)正在加速取代傳統(tǒng)燃料為基礎(chǔ)的電廠,并且由于儲(chǔ)能和收集方法的改善,從而節(jié)省了大量成本,已經(jīng)超過了昂貴的“發(fā)電廠”。在政府通過政策和激勵(lì)措施支持新能源的前提下,公共能源基礎(chǔ)設(shè)施及其相關(guān)的電網(wǎng)結(jié)構(gòu)有許多改善和增長(zhǎng)的機(jī)會(huì)。最新進(jìn)展較舊的電網(wǎng)結(jié)構(gòu)包括單向電力輸送和有限的能源發(fā)電,例如化石燃料,水力發(fā)電和核...
小米方面宣布,小米12系列將首發(fā)全新一代驍龍8移動(dòng)平臺(tái)后,該機(jī)肯定會(huì)在年底前發(fā)布,但具體的時(shí)間點(diǎn)還未公布。目前關(guān)于小米12的消息層出不窮,疑似該機(jī)的渲染圖片近日被流出,從圖片中來看,這款手機(jī)配備了后置三攝,造型上與小米11有不小的差距?! ⌒∶?2正面依舊采用中置挖孔的雙曲面屏幕設(shè)計(jì),邊框控制相當(dāng)優(yōu)秀,屏占比表現(xiàn)十分極限,屏幕視...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved