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位地址)
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è)備
上一篇:基于STM8的UART發(fā)送和中斷接收
下一篇:基于STM8的TIM定時(shí)器操作---STM8-第三章
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 智能護(hù)眼臺(tái)燈設(shè)計(jì)
- 蓄電池高能脈沖充電系統(tǒng)設(shè)計(jì)
- 基于51單片機(jī)定時(shí)器的電子時(shí)鐘設(shè)計(jì)方案
- 瑞薩電子推出面向單電機(jī)應(yīng)用優(yōu)化的卓越MCU, 涵蓋電動(dòng)工具、家用電器等廣泛應(yīng)用場(chǎng)景
- ICDIA 2025 創(chuàng)芯展圓滿落幕!
- 中興微電子亮相ICDIA 2025,共話RISC-V架構(gòu)推動(dòng)AI算力普惠化進(jìn)程
- 動(dòng)力電池“三國(guó)殺”:中企提前鎖定勝局,日韓廠商集體失守
- 研究人員開發(fā)出人工智能雷達(dá)技術(shù) 可用于高分辨率3D城市制圖
- 上半年動(dòng)力電池TOP15:寧德時(shí)代和比亞迪裝車近200GWh 兩家公司新上榜
- 半年砸下數(shù)千億元!“并購(gòu)”浪潮下,汽車芯片大戰(zhàn)再起風(fēng)云
- 奇瑞人形機(jī)器人9月開售并將面向個(gè)人用戶,機(jī)器人時(shí)代該來了嗎?
- 華為李文廣:華為智能駕駛規(guī)劃曝光,加速追趕特斯拉
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-下
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-中
- PI 有獎(jiǎng)直播|電機(jī)開發(fā)很復(fù)雜?MotorXpert™助您事半功倍!
- ADI 全新技術(shù)資料集錦
- MPS 有獎(jiǎng)直播 | FPGA 大電流電源的恒定導(dǎo)通時(shí)間 (COT) 控制
- 輕松注冊(cè)世健eSHOP,百份獎(jiǎng)品大派送!驚喜不斷,好禮無限!ipad air2等你拿!
- TI有獎(jiǎng)創(chuàng)意征集,CC3200開發(fā)套件等100份禮品等你來
- 有獎(jiǎng)直播:ST 基于IO-Link的狀態(tài)監(jiān)控和可預(yù)測(cè)性維護(hù)方案
- 中國(guó)版BeagleBone Black超低價(jià)團(tuán)購(gòu)!11月18日火爆開團(tuán)
- 曬出我使用MSP430編譯器的經(jīng)驗(yàn)與技巧!
- Counterpoint數(shù)據(jù):榮耀系線上銷量第一,小米第二
- 5G行業(yè)熱背后:商業(yè)模式尚未成型
- 廣東省電網(wǎng)負(fù)荷特性
- 5G的中國(guó)時(shí)刻
- 5G中國(guó)力量
- 投資27億元國(guó)創(chuàng)越摩先進(jìn)封裝項(xiàng)目開工
- 基于MSP430F149的數(shù)據(jù)轉(zhuǎn)發(fā)器設(shè)計(jì)
- MSP430F149在電力測(cè)控保護(hù)產(chǎn)品中的應(yīng)用
- 基于MSP430F413單片機(jī)的新型智能水表的設(shè)計(jì)
- ABB機(jī)器人數(shù)據(jù)類型的秘密4