欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請(qǐng)碼778899分享:筆記 3.25號(hào)arm

柚子快報(bào)邀請(qǐng)碼778899分享:筆記 3.25號(hào)arm

http://yzkb.51969.com/

1. I2C總線

1.1?i2c概述

I2C總線是PHLIPS公司在八十年代初推出的一種串行的半雙工總線,主要用于連接整體電路。

I2C總線為兩線制,只有兩根雙向信號(hào)線。一根是數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。

I2C硬件結(jié)構(gòu)簡(jiǎn)單,接口連接方便,成本較低。因此在各個(gè)領(lǐng)域得到了廣泛的應(yīng)用。

I2C:同步半雙工串行總線

i2c支持一主機(jī)多從機(jī)通信,每個(gè)接到I2C總線上的器件都有唯一的地址。主機(jī)如果想和哪一個(gè)從機(jī)進(jìn)行通信需要先發(fā)送一個(gè)從機(jī)地址到I2C總線上,每一個(gè)從機(jī)都會(huì)將這個(gè)從機(jī)地址和自己的地址進(jìn)行匹配,匹配成功的從機(jī)會(huì)往數(shù)據(jù)線上發(fā)送一個(gè)應(yīng)答信號(hào),主機(jī)確認(rèn)從機(jī)應(yīng)答后開始進(jìn)行通信

主機(jī)與其它器件進(jìn)行數(shù)據(jù)傳送時(shí)總線上發(fā)送數(shù)據(jù)的器件為發(fā)送器,總線上接收數(shù)據(jù)的器件則為接收器。

1.2 I2C的尋址

I2C總線上傳輸?shù)臄?shù)據(jù)信號(hào)既有地址信號(hào),也有數(shù)據(jù)信號(hào)

主機(jī)在起始信號(hào)之后必須要傳輸一個(gè)從機(jī)的地址信號(hào)(7位),第八位是數(shù)據(jù)的傳送方向位,0表示主機(jī)發(fā)送數(shù)據(jù)(W),1表示主機(jī)接收數(shù)據(jù)(R)。從機(jī)上每個(gè)器件都會(huì)將七位地址碼進(jìn)行比較,如果相同則認(rèn)為被主機(jī)尋址,并根據(jù)R/W位確定是接收器還是發(fā)送器

1.3?i2c總線的信號(hào)

在I2C總線數(shù)據(jù)傳輸過程中存在四種信號(hào):起始信號(hào)、終止信號(hào)、應(yīng)答信號(hào)、非應(yīng)答信號(hào)

起始信號(hào):i2c總線傳輸數(shù)據(jù)的開始

SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號(hào)

終止信號(hào):i2c總線一次數(shù)據(jù)傳輸?shù)慕Y(jié)束標(biāo)志

SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號(hào)

應(yīng)答信號(hào)和非應(yīng)答信號(hào)

每一個(gè)字節(jié)必須保證是8位長(zhǎng)度。數(shù)據(jù)傳送時(shí),先傳送最高位(MSB),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有9位)。

應(yīng)答信號(hào):第九個(gè)時(shí)鐘周期,接收方往數(shù)據(jù)線上發(fā)送了一個(gè)低電平,就是應(yīng)答信號(hào)

非應(yīng)答信號(hào):第九個(gè)時(shí)鐘周期,接收方往數(shù)據(jù)線上發(fā)送了一個(gè)高電平,就是非應(yīng)答信號(hào)

當(dāng)接收方接收到數(shù)據(jù)后不想再接收數(shù)據(jù),此時(shí)會(huì)回應(yīng)發(fā)送方一個(gè)非應(yīng)答信號(hào)

當(dāng)接收方接收到數(shù)據(jù)后還想再接收數(shù)據(jù),此時(shí)會(huì)回應(yīng)發(fā)送方一個(gè)應(yīng)答信號(hào)

1.4?I2C總線上數(shù)據(jù)讀寫的時(shí)機(jī)

當(dāng)時(shí)鐘線為高電平時(shí),接收方可以讀取數(shù)據(jù)

當(dāng)時(shí)鐘線為低電平時(shí),發(fā)送方可以寫入數(shù)據(jù)

1.5?i2c主機(jī)的讀寫時(shí)序(重點(diǎn))

主機(jī)向從機(jī)發(fā)送一個(gè)字節(jié)數(shù)據(jù)

主機(jī)發(fā)起起始信號(hào)

主機(jī)發(fā)送7bit從機(jī)地址+1bit寫標(biāo)志位

從機(jī)回應(yīng)應(yīng)答信號(hào)

主機(jī)發(fā)送8bit寄存器地址

從機(jī)回應(yīng)應(yīng)答信號(hào)

主機(jī)發(fā)送8bit數(shù)據(jù)

從機(jī)回應(yīng)應(yīng)答信號(hào)

主機(jī)發(fā)起終止信號(hào)

主機(jī)向從機(jī)發(fā)送多個(gè)字節(jié)數(shù)據(jù)

主機(jī)發(fā)起起始信號(hào)

主機(jī)發(fā)送7bit從機(jī)地址+1bit寫標(biāo)志位

從機(jī)回應(yīng)應(yīng)答信號(hào)

主機(jī)發(fā)送8bit寄存器地址

從機(jī)回應(yīng)應(yīng)答信號(hào)

主機(jī)發(fā)送8bit數(shù)據(jù)

從機(jī)回應(yīng)應(yīng)答信號(hào)

.。。。。。

主機(jī)發(fā)起終止信號(hào)

主機(jī)讀取從機(jī)一個(gè)字節(jié)數(shù)據(jù)

主機(jī)發(fā)起起始信號(hào)

主機(jī)發(fā)送7bit從機(jī)地址+1bit寫標(biāo)志

從機(jī)回應(yīng)一個(gè)應(yīng)答信號(hào)

主機(jī)發(fā)送8bit寄存器地址

從機(jī)回應(yīng)一個(gè)應(yīng)答信號(hào)

主機(jī)發(fā)起一個(gè)重復(fù)起始信號(hào)

主機(jī)發(fā)送7bit從機(jī)地址+1bit讀標(biāo)志位

從機(jī)回應(yīng)應(yīng)答信號(hào)

從機(jī)發(fā)送一個(gè)字節(jié)數(shù)據(jù)

主機(jī)回應(yīng)非應(yīng)答信號(hào)

主機(jī)發(fā)起終止信號(hào)

主機(jī)讀取多個(gè)字節(jié)的時(shí)序

主機(jī)發(fā)起起始信號(hào)

主機(jī)發(fā)送7bit從機(jī)地址+1bit寫標(biāo)志

從機(jī)回應(yīng)一個(gè)應(yīng)答信號(hào)

主機(jī)發(fā)送8bit寄存器地址

從機(jī)回應(yīng)一個(gè)應(yīng)答信號(hào)

主機(jī)發(fā)起一個(gè)重復(fù)起始信號(hào)

主機(jī)發(fā)送7bit從機(jī)地址+1bit讀標(biāo)志位

從機(jī)回應(yīng)應(yīng)答信號(hào)

從機(jī)發(fā)送一個(gè)字節(jié)數(shù)據(jù)

主機(jī)回應(yīng)回應(yīng)應(yīng)答信號(hào)

只要主機(jī)回應(yīng)應(yīng)答信號(hào),從機(jī)就一直發(fā),直到主機(jī)回應(yīng)非應(yīng)答信號(hào)

主機(jī)回應(yīng)非應(yīng)答信號(hào)

主機(jī)發(fā)起終止信號(hào)

2. I2C總線讀取溫濕度傳感器數(shù)據(jù)實(shí)驗(yàn)

STM32MP157AAA讀取SI7006數(shù)據(jù)框圖

2.1查詢SI7006數(shù)據(jù)手冊(cè)

1.SI7006的從機(jī)地址

2.確定讀取溫度和濕度的對(duì)應(yīng)寄存器地址

3.確定溫度數(shù)據(jù)和濕度數(shù)據(jù)的字節(jié)數(shù)

4.如何初始化si7006芯片

5.如何將讀取到的溫濕度數(shù)據(jù)轉(zhuǎn)換成標(biāo)準(zhǔn)溫濕度形式

從機(jī)地址

讀取溫度和濕度數(shù)據(jù)的寄存器地址

讀取濕度的寄存器地址是0XE5 讀取溫度的寄存器地址是0XE3 讀取上一次測(cè)量的溫度的寄存器地址是0XE0 完成SI7006芯片的初始化需要向用戶寫寄存器中寫入一個(gè)數(shù)值,用戶寫寄存器地址是0XE6

主機(jī)保持模式下讀取溫濕度數(shù)據(jù)的時(shí)序

關(guān)于SI7006的初始化

完成SI7006的初始化,需要向用戶寫寄存器(0XE6)中寫入一個(gè)0X3A

溫濕度數(shù)據(jù)的計(jì)算公式

作業(yè)

設(shè)置溫度濕度閾值,當(dāng)溫度過高時(shí),打開風(fēng)扇,蜂鳴器報(bào)警

當(dāng)濕度比較高時(shí),打開LED1燈,蜂鳴器報(bào)警

main.c

#include "uart4.h"

#include "led.h"

#include "key_in.h"

#include "iic.h"

#include "si7006.h"

int main()

{

i2c_init();

si7006_init();

all_led_init();

while(1)

{

short tem;

unsigned short hum;

tem=si7006_read_tem();

hum=si7006_read_hum();

hum=125*hum/65536-6;

tem=175.72*tem/65536-46.85;

printf("hum:%d\n",hum);

printf("tem:%d\n",tem);

if(tem>30)

{

fan_on();

}else

{

fan_off();

}

if(hum>44)

{

bee_on();

}else

{

bee_off();

}

delay(1000);

bee_off();

}

return 0;

}

si7600.c

#include "si7006.h"

void delay(int ms)

{

int i,j;

for(i=0;i

{

for(j=0;j<2000;j++)

{

}

}

}

void si7006_init()

{

i2c_start();

i2c_write_byte(0x40<<1|0);

i2c_wait_ack();

i2c_write_byte(0xe6);

i2c_wait_ack();

i2c_write_byte(0x3a);

i2c_wait_ack();

i2c_stop();

}

short si7006_read_tem()

{

short tem;

char tem_l,tem_h;

i2c_start();

i2c_write_byte(0x40<<1|0);

i2c_wait_ack();

i2c_write_byte(0xe3);

i2c_wait_ack();

i2c_start();

i2c_write_byte(0x40<<1|1);

i2c_wait_ack();

delay(100);

tem_h=i2c_read_byte(0);

tem_l=i2c_read_byte(1);

tem=tem_h<<8|tem_l;

return tem;

}

unsigned short si7006_read_hum()

{

short hum;

char hum_l,hum_h;

i2c_start();

i2c_write_byte(0x40<<1|0);

i2c_wait_ack();

i2c_write_byte(0xe5);

i2c_wait_ack();

i2c_start();

i2c_write_byte(0x40<<1|1);

i2c_wait_ack();

delay(100);

hum_h=i2c_read_byte(0);

hum_l=i2c_read_byte(1);

hum=hum_h<<8|hum_l;

return hum;

}

led.c

#include "led.h"

void all_led_init()

{

RCC->MP_AHB4ENSETR |= (0x3<<4);

//pe10 設(shè)置輸出

GPIOE->MODER &= (~(0x3 <<20));

GPIOE->MODER |= (0x1 <<20);

//pf10設(shè)置輸出

GPIOF->MODER &= (~(0x3 <<20));

GPIOF->MODER |= (0x1 <<20);

//pe8設(shè)置輸出

GPIOE->MODER &= (~(0x3 <<16));

GPIOE->MODER |= (0x1 <<16);

//蜂鳴器設(shè)置輸出

GPIOB->MODER &= (~(0x3 <<12));

GPIOB->MODER |= (0x1 <<12);

//風(fēng)扇設(shè)置輸出

GPIOE->MODER &= (~(0x3 <<18));

GPIOE->MODER |= (0x1 <<18);

//馬達(dá)設(shè)置輸出

GPIOF->MODER &= (~(0x3 <<12));

GPIOF->MODER |= (0x1 <<12);

//設(shè)置推挽

GPIOE->OTYPER &= (~(0x1 <<10));

GPIOF->OTYPER &= (~(0x1 <<10));

GPIOE->OTYPER &= (~(0x1 <<8));

//設(shè)置低速

GPIOE->OSPEEDR &= (~(0x3 <<20));

GPIOF->OSPEEDR &= (~(0x3 <<20));

GPIOE->OSPEEDR &= (~(0x3 <<16));

//設(shè)置無上拉下拉

GPIOE->PUPDR &= (~(0x3 <<20));

GPIOF->PUPDR &= (~(0x3 <<20));

GPIOE->PUPDR &= (~(0x3 <<16));

//默認(rèn)輸出低電平

GPIOE->ODR &=(~(0x1 <<10));

GPIOF->ODR &=(~(0x1 <<10));

GPIOE->ODR &=(~(0x1 <<8));

}

void LED1_ON()

{

GPIOE->ODR |=(0x1 <<10);

}

void LED2_ON()

{

GPIOF->ODR |= (0x1 <<10);

}

void LED3_ON()

{

GPIOE->ODR |=(0x1 <<8);

}

void LED1_OFF()

{

GPIOE->ODR &=(~(0x1 <<10));

}

void LED2_OFF()

{

GPIOF->ODR &=(~(0x1 <<10));

}

void LED3_OFF()

{

GPIOE->ODR &=(~(0x1 <<8));

}

void bee_on()

{

GPIOB->ODR |=(0x1 <<6);

}

void bee_off()

{

GPIOB->ODR &=(~(0x1 <<6));

}

void fan_on()

{

GPIOE->ODR |=(0x1 <<9);

}

void fan_off()

{

GPIOE->ODR &=(~(0x1 <<9));

}

void motor_on()

{

GPIOF->ODR |=(0x1 <<6);

}

void motor_off()

{

GPIOF->ODR &=(~(0x1 <<6));

}

柚子快報(bào)邀請(qǐng)碼778899分享:筆記 3.25號(hào)arm

http://yzkb.51969.com/

文章來源

評(píng)論可見,查看隱藏內(nèi)容
大家都在看:

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19225200.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄