娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

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

正在發生

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

發布者:HeavenlyWonder 來源: eefocus關鍵字:STM8  IIC協議  時鐘模塊  DS3231  讀取 手機看文章 掃描二維碼
隨時隨地手機看文章

1. 綜述


  由上篇博客可知道IIC協議如何用代碼實現,本篇博客就不涉及協議內容,只講解如何使用。


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


2. 明確任務順序


  個人習慣,在每驅動一個新傳感的時候,我會將我要完成的傳感分為幾個任務點。接下來就展示一下我在寫DS3231模塊時的任務欄。


  一.硬件部分

     1.完成排針焊接

     2.完成傳感引角和單片機引角的接線

  二.軟件部分

     1. 找到該傳感的官方手冊并認真閱讀

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

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

     4. 完成讀寫函數的代碼

     5. 測試傳感是否有響應

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

     7. 完成傳感參數初始化

     8. 傳感數據的獲取


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


3. 具體任務實現步驟


  3.1. 硬件部分


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

  3.2. 軟件部分


 (1)官方手冊


  我這里提供的是全英版的官方手冊,多看點英文對你有好處的。


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

提取碼:uzih 

 


  (2)器件地址


  在說明手冊中,我們可以在第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.


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


  (3)寄存器地址

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


  以下是我在頭文件所定義的格式,因為我只需要獲取時間,不需要進行其他操作,所以部分寄存器沒有使用。


#define DS3231_Address           0xD0                           //設備地址

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

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

#define Hour_Register            0x02                           //小時寄存器

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

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

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

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

 

4. 例程


4.1 編譯環境


  我的編譯環境是IAR,這款軟件是現在STM8的主流平臺,比較推薦。不過我打算等到STCubeMX更新出比較方便的版本后再去使用Keil5,因為我在用STM32的時候就是利用Keil5,的確很方便,你們也可以學著用一下。


4.2 主芯片


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


4.3 庫文件的添加


  我們的工程可以在IAR中的官方例程中復制,操作過程:打開STM8S_StdPeriph_Lib(這是一個官方的庫文件,下載IAR STM8包的時候就攜帶,里面有庫文件和相對應的例程),將Libraries文件復制到你工程所在的文件下,并將有關于ADC的庫文件添加到你的工程列表當中。添加完成后,就可以開始編寫代碼了(如果你將全部的庫文件都添加進來的話,編譯程序后庫文件還有紅點報錯的話,這是因為你選的芯片上沒有該功能,你需要將其刪掉才能不報錯。)如圖。

4.4 代碼


4.4.1 SDA、SCL引角的定義


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


//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句柄定義


  為了能夠方便數據的管理,所以我定義了DS3231的一個句柄。


typedef struct DS3231

{    

  uint8_t uSeconds;                     //秒

  uint8_t uMinutes;                     //分鐘

  uint8_t uHour;                        //小時

  uint8_t uDay;                         //星期

  uint8_t uData;                        //日期

  uint8_t uMouth;                       //月份

  uint8_t uyear;                        //年份

  uint8_t uTime[3];                     //將秒、分鐘、小時、日期包括在內

     

}DS3231_HandleTypeDef; 


4.4.3 BCD格式和B格式轉換


  在手冊中可以看到,寫入到DS3231中的格式是BCD格式,而讀取到的卻是B格式,所以我們需要兩個函數將其轉換,也方便我們察看數據的結果。


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讀寫函數編寫


  讀寫函數我們如果不去看手冊說明的話是無法編寫代碼的,所以我們需要去看手冊,根據手冊中的IIC命令順序進行編寫代碼。


這幅圖為 IIC數據傳輸概述。

寫函數流程圖:

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


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

{

  

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

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

 

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

  {                                                                                   

    vIIC_Stop_Signal(iicHandle);                                                   

    return FALSE;                                                                     

  }

 

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

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

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

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

  vIIC_Stop_Signal(iicHandle);                                                  //8.  IIC_Stop                  ; 結束信號

 

 

  return TRUE;

  

}

 

  讀函數流程圖:


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                 ;  起始信號                                                                                                                                                  

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

                                                                                         

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

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

推薦閱讀

芯科技消息(文/方中同)IDC(國際數據信息)4日發表臺灣手機市場調查報告,智能手機在臺灣已達到96%以上的占比,超越目前全球平均的75%比重,與韓國、日本、新加坡、香港與北美等地在智能手機的占比率并駕齊驅。此外,受3G服務今年底停用影響,功能型手機(Feature Phone)將進入最后一波的4G換機潮。IDC統計,2018年第3季臺灣手機市場總量189萬臺,較去...
半導體制造公司Teledyne e2v于1955年成立,公司坐落于法國硅谷中心的格勒諾布爾。2017年3月Teledyne收購e2v,在歐洲、美洲和亞洲共擁有11000多名員工。Teledyne e2v行業經驗豐富,為客戶提供頂級信號處理解決方案和微處理器產品。公司可以靈活滿足對產品要求最為嚴苛的各類市場,例如航空航天和國防、航空電子、太空及工業用途儀器儀表。公司擅長為客戶...
諸如太陽能和風力發電之類的創新技術正在加速取代傳統燃料為基礎的電廠,并且由于儲能和收集方法的改善,從而節省了大量成本,已經超過了昂貴的“發電廠”。在政府通過政策和激勵措施支持新能源的前提下,公共能源基礎設施及其相關的電網結構有許多改善和增長的機會。最新進展較舊的電網結構包括單向電力輸送和有限的能源發電,例如化石燃料,水力發電和核...
法雷奧正式發布了旗下第三代激光雷達(LiDAR)。這項技術能夠顯著提升駕駛輔助系統的性能使得自動駕駛成為現實,同時極大地提高了道路安全水平,將于 2024 年投放市場。第三代掃描激光雷達(LiDAR)法雷奧第三代激光雷達在探測距離、分辨率、幀率等方面的性能都有較大提升。它能以每秒 450 萬像素和 25 幀的速度重建車輛周圍環境,并實時生成 3D ...

史海拾趣

問答坊 | AI 解惑

繪圖型液晶DG-128064

請問DG-128064的字是怎么拼的? 比如: //四 { {0X00,0X00,0X00,0X04,0XFF,0XFE,0X44,0X44}, {0X44,0X44,0X44,0X44,0X44,0X44,0X44,0X44}, {0X48,0X3C,0X50,0X04,0X40,0X04,0X7F,0XFC}, {0X40,0X04,0X00,0X00,0X00,0X00,0X00,0X00}}, 是怎 ...…

查看全部問答∨

MOdelsim仿真問題求教

直接對模塊的輸入打一拍,為什么仿真時看不到效果呢? 打拍輸出的信號與輸入波形一致,并沒有按預想的向后延遲一拍? 直接對模塊內部信號打拍有效果. 以前從沒碰到這么詭異的問題,難道與仿真環境設置有關嗎? 請高手指點一二…

查看全部問答∨

單片機選型求助(多路AD同時采集)

現在要做一個項目,需要用到單片機進行模擬信號的采集.但是需要在同一時間點進行同時采集,然后進行數據傳輸. 請問有沒有合適的8位或者16位的單片機,能夠對2路(以上)信道同時進行信號采集. 單片機采集后信號的輸出可以是多路一起輸出,也可以是單路 ...…

查看全部問答∨

wince中如何開發串口?

搞了兩天了,串口還是收不到數據,看到網上的代碼 都是不停的讀取串口的數據,有沒有類似中斷的方法 思想串口數據的讀取??…

查看全部問答∨

鏡像下載一半就OVER了

以下分別是用release下串口的輸出 Windows CE Kernel for ARM (Thumb Enabled) Built on Mar 13 2003 at 22:52:56 ProcessorType=0920  Revision=0 sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 8c2013bc W ...…

查看全部問答∨

菜鳥 求助 關于 模擬器

昨天裝了一個WINCE.NET with platform builder 4.2版本的 然后 裝了 EVC4.0和一個standard SDK 裝 完后 運行 PB和 EVC 。就是 一個 簡單的 Helloworld 程序 ,運行的時候 總是 提示 one or more fills of emulator con\'t find..... 本人 菜鳥 ...…

查看全部問答∨

單片機編程問題告急!!!希望個位大哥大姐幫忙.

我要實現的是4X4鍵盤顯示電路  我鍵盤接P2口  顯示電路用LED(8位) ,使用的是 (P3.1)串行通行 現在我要讓鍵盤每一個鍵對應顯示 1,2,3,....F,0,   我的單片機初始狀態顯示了 LED 全亮  可我的按鍵 ...…

查看全部問答∨

求救:抗干擾編碼的基本原理?(關于網絡技術的!)

求救啊!哪位大人能知道有關于“抗干擾編碼的基本原理”的資源或文章啊! 或者比較了解的,跟我說一下啊! 不過是關于網絡的方面的!!!!!!!!! 我在網上搜了好久的沒找到從網絡方面回答這一問題的! 導師的作業馬上要交啊!知道的大人幫 ...…

查看全部問答∨

8962的UART1的兩個端口可以做GPIO輸出么?

各位大蝦,8962的UART1的兩個端口可以做GPIO輸出么?為什么我把UART1所用的兩個I/O口PD2,PD3設為GPIOPinTypeGPIOOutput(),確不能拉高呢。   本來跑是的TI的uart_echo例程,和PC機進行UART通信,板子可以給PC機發數據并且PC可以正常接收,但是 ...…

查看全部問答∨

USB2.0高速收發器 ULPI接口實現

usb2.0高速收發器 和FPGA連接 需要在FPGA內部設計ULPI接口 看了USB3300的資料 感覺很迷茫 不知道該從哪里下手 有懂得 或做過得 幫忙指點一二 …

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 兰坪| 鹤壁市| 景泰县| 历史| 杂多县| 陆丰市| 公安县| 盘山县| 瓮安县| 梅州市| 广宗县| 江永县| 惠水县| 垣曲县| 滦平县| 乌恰县| 太白县| 华阴市| 京山县| 阿拉善左旗| 石棉县| 聂拉木县| 敦化市| 韶山市| 甘谷县| 岚皋县| 武汉市| 定陶县| 高青县| 沙坪坝区| 太湖县| 赤峰市| 岱山县| 张北县| 旅游| 彝良县| 嵊泗县| 马龙县| 井研县| 衡阳县| 米易县|