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

/** 

  ****************************************************************************** 

  * @file      i2c simu.c 

  * @brief     simulation function 

  * @CPU       STM32F051 

  * @compiler  Keil uVision V4.74 

  * @author    MetalSeed 

  * @copyright WSHHB 

  * @version   V1.0.0 

  * @date      18-Sept-2014 

  * @modifydate20-Sept-2014 

  ****************************************************************************** 

  * @attention 

  */  

  

#include "boardAPI.h"  

#include "i2cSimu.h"  

#include "delay.h"  

#include "uart.h"  

  

GPIO_InitTypeDef        GPIO_InitStructure;    

     

    

/** 

  * @brief  IIC Init 

  * @param  A: 

  * @retval None 

  */  

void IIC_Init(void)  

{                          

    RCC_AHBPeriphClockCmd(  RCC_AHBPeriph_GPIOF, ENABLE );    

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;  

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT ;   //í?íìê?3?  

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

    GPIO_Init(GPIOF, &GPIO_InitStructure);  

    GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7);  //PB10,PB11 ê?3???  

}  

  

/** 

  * @brief  Set SDA Pin as Output Mode 

  * @retval None 

  */  

void SDA_OUT()    

{    

  GPIO_StructInit(&GPIO_InitStructure);    

  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;    

  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;    

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     

  GPIO_Init(GPIOF, &GPIO_InitStructure);    

}    

  

/** 

  * @brief  Set SDA Pin as Input Mode 

  * @retval None 

  */  

void SDA_IN()    

{    

  GPIO_StructInit(&GPIO_InitStructure);    

  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;    

  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;  

  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;// !!!  

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     

  GPIO_Init(GPIOF, &GPIO_InitStructure);    

}   

  

/** 

  * @brief  read input voltage from SDA pin 

  * @retval None 

  */  

BYTE SDA_READ()  

{  

  return GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_7);  

}  

  

/** 

  * @brief  output high form SDA pin 

  * @retval None 

  */  

void IIC_SDA_1()  

{  

  GPIO_SetBits(GPIOF, GPIO_Pin_7);  

}  

  

/** 

  * @brief  output low form SDA pin 

  * @retval None 

  */  

void IIC_SDA_0()  

{  

  GPIO_ResetBits(GPIOF, GPIO_Pin_7);  

}  

  

/** 

  * @brief  output high form SCL pin 

  * @retval None 

  */  

void IIC_SCL_1()  

{  

GPIO_SetBits(GPIOF, GPIO_Pin_6);  

}  

  

/** 

  * @brief  output LOW form SCL pin 

  * @retval None 

  */  

void IIC_SCL_0()  

{  

GPIO_ResetBits(GPIOF, GPIO_Pin_6);    

}  

  

  

/** 

* @brief  Simulate IIC conmunication :Create Start signal 

  * @retval None 

  */  

void IIC_Start(void)  

{  

    SDA_OUT();     //sda output  

    IIC_SDA_1();            

    IIC_SCL_1();  

    delayus(4);  

    IIC_SDA_0();   //START:when CLK is high,DATA change form high to low   

    delayus(4);  

    IIC_SCL_0();   //hold scl line, prepare to transmit data  

}       

  

/** 

  * @brief  Simulate IIC conmunication : Create Stop signal 

  * @retval None 

  */  

void IIC_Stop(void)  

{  

    SDA_OUT();    //sda output mode   

    IIC_SCL_0();  

    IIC_SDA_0();  //STOP:when CLK is high DATA change form low to high  

    delayus(4);  

    IIC_SCL_1();   

    IIC_SDA_1();  //indicate transmit over  

    delayus(4);                               

}  

  

/** 

* @brief  Simulate IIC conmunication : wait for target device's ACK 

* @retval ACK (0) : receive success 

* @retval NACK(1) : receive unsuccess 

  */  

BYTE IIC_Wait_Ack(void)  

{  

    BYTE ucErrTime = 0;  

    SDA_IN();      //set as input mode  

    IIC_SDA_1();  

  delayus(1);        

    IIC_SCL_1();  

  delayus(1);      

    while(SDA_READ())  

    {  

        ucErrTime++;  

        if(ucErrTime > 250)  

        {  

            IIC_Stop();  

            return 1;  

        }  

    }  

    IIC_SCL_0(); //release scl line  

    return 0;    

}   

  

/** 

  * @brief  Simulate IIC conmunication : make an ACK 

  * @retval None 

  */  

void IIC_Ack(void)  

{  

    IIC_SCL_0();  

    SDA_OUT();  

    IIC_SDA_0();  

    delayus(2);  

    IIC_SCL_1();  

    delayus(2);  

    IIC_SCL_0();  

}  

  

/** 

  * @brief  Simulate IIC conmunication : don't make an ACK 

  * @retval None 

  */  

void IIC_NAck(void)  

{  

    IIC_SCL_0();  

    SDA_OUT();  

    IIC_SDA_1();  

    delayus(2);  

    IIC_SCL_1();  

    delayus(2);  

    IIC_SCL_0();  

}                                          

  

  

/** 

  * @brief  Simulate IIC conmunication : Transmit one byte Data 

  * @param  txd: data to be transmit 

  * @retval None 

  */  

void IIC_Send_Byte(BYTE txd)  

{                          

  BYTE i;     

  SDA_OUT();          

  IIC_SCL_0();//push down scl  to start transmit data  

  for(i = 0; i < 8; ++i)  

  {                

    if(txd & 0x80)  

    {  

      IIC_SDA_1();  

    }  

    else  

    {  

      IIC_SDA_0();  

    }  

    txd <<= 1;        

    delayus(2);     

    IIC_SCL_1();  

    delayus(2);   

    IIC_SCL_0();      

    delayus(2);  

  }    

}       

  

//?á1??×??ú£?ack=1ê±£?·¢?íACK£?ack=0£?·¢?ínACK     

/** 

  * @brief  Simulate IIC conmunication : Receive one byte Data 

  * @param  ack: Whether transmit ACK 

  * @retval the data have been receive 

  */  

BYTE IIC_Read_Byte(unsigned char ack)  

{  

    unsigned char i, res = 0;  

    SDA_IN();               //SDA input mode  

  for(i = 0; i < 8; ++i )  

    {  

    IIC_SCL_0();   

    delayus(2);  

    IIC_SCL_1();  

    res <<= 1;  

    if(SDA_READ())  

    {  

      res++;   

    }        

        delayus(1);   

  }                    

  if (!ack)  

  {  

    IIC_NAck();//make NACK  

  }  

  else  

  {  

    IIC_Ack(); //make ACK  

  }  

  return res;  

}  

  

  

/*JUST SOME TEST FUNTION DEMO*/  

BYTE ReadData()  

{                   

    BYTE temp=0;                                                                                   

  IIC_Start();    

      

  IIC_Send_Byte(0x80);   

    IIC_Wait_Ack();   

    

  IIC_Send_Byte(0xf5);   

    IIC_Wait_Ack();       

      

  IIC_Start();               

    IIC_Send_Byte(0XA1);   

    IIC_Wait_Ack();    

    

  temp=IIC_Read_Byte(0);             

  IIC_Stop();  

    return temp;  

}  

  

void WriteData(BYTE DataToWrite)  

{                                                                                              

  IIC_Start();    

  IIC_Send_Byte(0x80);  

  if( IIC_Wait_Ack() == 0)  

  {  

     printf("Recieve ACK \n");  

  }      

    

  IIC_Send_Byte(0xf5);  

    IIC_Wait_Ack();                                                          

      

  IIC_Send_Byte( DataToWrite );   

    IIC_Wait_Ack();                      

    

  IIC_Stop();  

    delayms(10);       

}  


關鍵字:STM32  模擬I2C  STM32F051 引用地址:STM32 模擬I2C (STM32F051)

上一篇:STM32模擬IIC讀寫24CXX
下一篇:STM32F407和STM32F051主從I2C通信方法

0

推薦閱讀

自動駕駛最先會以自動駕駛出租車展服務開,個人短期內無法擁有自動駕駛車輛;?汽車制造商的商業模式將發生變化,根據服務的不同,他們或許會提供不同的計價服務套餐;?汽車產業的上下游,包括汽車制造、銷售、運營、維修等都會受到自動駕駛的影響,面臨轉型;?自動駕駛會給城市發展帶來兩種相反的可能,它有可能讓城市野蠻擴展,也有可能讓城市失去吸引...
席卷全球的工業4.0革命幾乎影響著每一個行業,包括各行業的供應鏈管理。 在過去,供應鏈管理是令各行業都非常頭疼的環節,因為傳統供應鏈涉及大量模糊且無法訪問的數據,就像”黑洞“一樣吞噬著成本、時間與耐心。工業4.0則將催生新的數字供應鏈,并能夠實現更復雜,而又更精簡的供應鏈管理。 數字供應鏈是未來工業解決方案和業務流程的重要方向,不僅僅...
今天給大家分享一個 初級版本的步進電機的控制方法,用到的步進電機是4線兩相的42步進電機 如下圖:步進電機驅動選用的是這款 TB6600供電選用了12V的穩壓電源 最小系統板供電是從Jlink上直接引出MCU是 stm32F407ZGT6 最小系統板 根據步進電機控制器的資料可以知道 步進電機的速度和轉過的角度都是通過 PUL + 和PUL- 來控制的(這里插一段關...
據外媒報道,美國先進電動汽車(EV)固體電解質技術創新者Ampcera公司推出全固態電池技術,可使電動汽車實現超快速充電。目前該公司正針對該技術申請專利。該公司最新發布的專利申請題目為《內部可加熱電池、內部可加熱電池系統、內部加熱電池方法及電動汽車組成相同(Internally Heatable Battery, Internally Heatable Battery System, Internall...

史海拾趣

問答坊 | AI 解惑

去年大賽的論文

本帖最后由 paulhyde 于 2014-9-15 08:59 編輯 (*^__^*) 希望對大家有用  …

查看全部問答∨

示波器簡史--模擬時代

本文試圖回顧模擬示波器的簡單歷史,由于是簡史,采用編年體形式。歡迎批評,補充。    1947年5月,Tektronix 511,第一部擁有校準的放大器和校準的時基的示波器,開啟了商業示波器的嶄新時代。因為此前的儀器都沒有校準,意味著盡管 ...…

查看全部問答∨

問問:愛默生變頻器TD2000-4T1600P多少錢一臺?

各位大俠, 有誰知道 愛默生變頻器TD2000-4T1600P, 多少錢一臺? …

查看全部問答∨

學習電路原理該先重拿些書學起?

   有幸進入一家公司做ICT測試工程師,因為自己的發展需要。想學習電路,電氣這一塊的知識。而且是從零來過,以前沒有接觸過這一塊的知識。希望eeworld中的廣大高手指點迷津,指點我一下。讓我知道現在應該從哪里開始學起。如果有可能, ...…

查看全部問答∨

關于lCD! 重發一貼

我在引導程序里面改過之后(顯示幾個填有不同顏色的矩形框),可以正常顯示! ----------------------------------------------------------------- 但在進入系統之后就不正常了!只能顯示一半!右邊一半沒有顯示 ----------------------------- ...…

查看全部問答∨

想入門arm開發,有哪些好書給推薦下,謝謝……

熟悉c,單片機.哪兒有下載的?謝謝.…

查看全部問答∨

多機通信怪問題:

                                 &nbsp;香水版主你好,我正在調試SMT32多機通信,遇到這樣一個怪問題:我有三個STMmcu,做主從式多機通信,主MCU ...…

查看全部問答∨

遠程監控溫度系統

本人來晚了,不過還是頂下...難得有機會DIY一下...      …

查看全部問答∨

定時器A

定時器A在2増計數模式下的周期為TACCR0,在連續計數模式周期為65535,在增/減計數模式下周期2*TACCR0; 輸出PWM波形的的周期就是定時周期;占空比就是CCR1、CCR2的值;對不??請教一下,前輩?。≈x謝??!…

查看全部問答∨

有無與外網通信的LM3_uCOS_II_Lwip例程下載,謝謝!

下來幾個uCOS_II_Lwip例程都不行,局域網正確(包括周立功LWIP例程的web服務器實驗),路由器設置絕對正確(其它的程序可以,不用懷疑?!?

查看全部問答∨
小廣播
添点儿料...
无论热点新闻、行业分析、技术干货……
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 蒙山县| 进贤县| 五寨县| 丹东市| 东丽区| 苍南县| 精河县| 塔河县| 左云县| 湘潭县| 金寨县| 和政县| 二手房| 综艺| 昂仁县| 会理县| 巴林左旗| 卢湾区| 奉贤区| 阜南县| 筠连县| 延津县| 台南县| 云和县| 临湘市| 温宿县| 泰顺县| 长泰县| 镇赉县| 二手房| 长阳| 莆田市| 海门市| 朝阳市| 彩票| 九寨沟县| 宁晋县| 西林县| 九龙坡区| 武威市| 沙田区|