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

STM32 軟件模擬 IIC 代碼,標準庫、HAL庫可用

發布者:RadiantBeauty最新更新時間:2025-02-19 來源: cnblogs關鍵字:STM32  軟件模擬  IIC  標準庫  HAL庫 手機看文章 掃描二維碼
隨時隨地手機看文章

 1 #ifndef _IIC_H

 2 #define _IIC_H

 3 

 4 #include 'stdio.h'    

 5 #include 'stm32f1xx_hal.h'

 6 

 7 

 8 /* 定義控制 SDA SCL 的宏 標準庫版

 9 #define I2C_SDA_UP        GPIO_SetBits  (GPIOC,GPIO_PIN_8)    //SDA高電平

10 #define I2C_SDA_LOW        GPIO_ResetBits(GPIOC,GPIO_PIN_8)    //SDA低電平

11 #define I2C_SCL_UP        GPIO_SetBits  (GPIOC,GPIO_PIN_9)    //SCL高電平

12 #define I2C_SCL_LOW        GPIO_ResetBits(GPIOC,GPIO_PIN_9)    //SCL低電平

13 */

14 

15 

16 /* 定義控制 SDA SCL 的宏 HAL庫版    */

17 

18 #define I2C_SDA_UP        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET)                //SDA高電平

19 #define I2C_SDA_LOW        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET)            //SDA低電平

20 #define I2C_SCL_UP        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET)              //SCL高電平

21 #define I2C_SCL_LOW        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET)            //SCL低電平

22 

23 

24 

25 /* 獲取 SDA SCL 引腳狀態,標準庫版也是用相同邏輯    */

26 

27 #define I2C_SDA        HAL_GPIO_ReadPin(GPIOC ,GPIO_PIN_8)        //獲取SDA引腳狀態

28 #define I2C_SCL        HAL_GPIO_ReadPin(GPIOC ,GPIO_PIN_9)        //獲取SCL引腳狀態

29 

30 

31 void         iic_stare(void);                    //*    開始信號    

32 void         i2c_ack(void);                        //*    應答信號    

33 void         I2C_No_ack(void);                    //*    非應答信號    

34 void         i2c_stop(void);                        //*    停止信號    

35 char         i2c_wit_ack(void);                //*    等待應答

36 void         i2c_send(uint8_t dat);        //* 發送數據

37 uint8_t i2c_read(void);                        //* 接收數據

38 

39 void SDA_OUT(void);                //*    SDA 設置為輸出    

40 void SDA_IN(void);                //*    SDA 設置為輸入    

41 

42 void delay_us(uint32_t i);        //*延時    

43 

44 #endif


/*****************************************************************************

*                                                                                                                                                         *

*                        File:    軟件模擬IIC, HAL庫版本,標準庫也                                                     *

*                                    可用,只需要做一些相對應修改即可                                                     *

*                                                                                                                                                         *

*****************************************************************************/


#include 'iic.h'



/*******************************************************************************

* 函 數 名         : i2c_stare

* 函數功能         : iic開始信號,SCL高電平時,SDA出現一個下跳沿表示啟動信號 

* 輸    入         : 無

* 輸    出         : 無

*******************************************************************************/

void i2c_stare(void)

{

    SDA_OUT();  

    I2C_SDA_UP;

    I2C_SCL_UP;

    delay_us(4);

     I2C_SDA_LOW;        //啟動開始信號

    delay_us(4);

    I2C_SCL_LOW;      //鉗住I2C總線,準備發送或接收數據

}



/*******************************************************************************

* 函 數 名         : i2c_stop

* 函數功能         : iic停止信號,SCL高電平時,SDA出現一個上跳沿表示停止信號

* 輸    入         : 無

* 輸    出         : 無

*******************************************************************************/

void i2c_stop(void)

{

    SDA_OUT();            //sda線輸出

    I2C_SDA_LOW;         //發送結束條件的數據信號

    I2C_SCL_UP;

    delay_us(4);         //結束條件建立時間大于4μ

    I2C_SDA_UP;         //發送I2C總線結束信號

    delay_us(4);

    I2C_SCL_LOW; 

}



/*******************************************************************************

* 函 數 名         : i2c_send

* 函數功能         : iic發送數據

* 輸    入         : uint8_t dat,要發送的數據

* 輸    出         : 無

*******************************************************************************/

void i2c_send(uint8_t dat)

{


     unsigned char temp;

     SDA_OUT();

   for(temp=0x80;temp!=0;temp>>=1)

   {

       if((temp & dat)== 0)

       {

          I2C_SDA_LOW;

       }

       else

       {

          I2C_SDA_UP;

       }

       delay_us(1);

       I2C_SCL_UP;

       delay_us(4);

       I2C_SCL_LOW;

   }

}



/*******************************************************************************

* 函 數 名         : i2c_read

* 函數功能         : iic接收數據

* 輸    入         : 無

* 輸    出         : 無

*******************************************************************************/

uint8_t i2c_read(void)

{

   unsigned char temp;

   unsigned char dat;

   I2C_SDA_UP;                     //釋放總線準備接收

     SDA_IN();

   for(temp=0x80;temp!=0;temp>>=1)

   {

      delay_us(1);

      I2C_SCL_UP;

      if(I2C_SDA==1)

      {

         dat|=temp;

      }

      else

      {

         dat&=~temp;

      }

      I2C_SCL_LOW;

   }

   return dat;

}



/*******************************************************************************

* 函 數 名         : i2c_wit_ack

* 函數功能         : iic等待應答

* 輸    入         : 無

* 輸    出         : 0/1,返回1表示無應答信號,返回0表示應答

*******************************************************************************/

char i2c_wit_ack(void)

{

    

    uint8_t con=0;

    

  I2C_SDA_UP;       //釋放數據線,準備接收應答

  delay_us(1);

    I2C_SCL_UP;                //CPU驅動SCL = 1, 此時器件會返回ACK應答

    SDA_IN(); 

    delay_us(1);

    

  while( I2C_SDA )    //CPU讀取SDA口線狀態

  {

        con++;

        if(con>255)

        {

            i2c_stop();

      return 1;     //無應答信號

        }

  }


  I2C_SCL_LOW; 

  delay_us(1);

  return 0;             //有應答

}


/*******************************************************************************

* 函 數 名         : i2c_ack

* 函數功能         : iic應答信號

* 輸    入         : 無

* 輸    出         : 無

*******************************************************************************/

[1] [2]
關鍵字:STM32  軟件模擬  IIC  標準庫  HAL庫 引用地址:STM32 軟件模擬 IIC 代碼,標準庫、HAL庫可用

上一篇:STM32 GPIO重映射
下一篇:STM32 搶占優先級和響應優先級

推薦閱讀最新更新時間:2025-04-23 11:15

STM32 HAL庫 +freeRTOS+Keil 移植
STM32 HAL庫 +freeRTOS+Keil 移植 官方freeRTOS移植教程很多,本文不做贅述。本文基于Keil 5提供的freeRTOS庫,進行移植。 Keil 版本:Keil MDK uVision5 首先準備好一個可以用的HAL庫工程,為了方便調試,選擇了原子哥的開發板上提供跑馬燈工程。 打開工程, 點擊 ,下載freeRTOS庫, 我的已經安裝過了 最新的版本10.3.1 下載完成后關閉,點擊 ,在這個界面下,按下圖選擇對應的選項 選擇完成后點擊OK( 如果沒有先下載),可以看到工程中已經添加RTOS 點擊 編譯下, 有一個錯誤先不用管,接下來開始修改文件,先打開RTE_Com
[單片機]
<font color='red'>STM32</font> <font color='red'>HAL庫</font> +freeRTOS+Keil 移植
stm32 hal庫ADC - DMA方式中斷問題
希望用DMA去讀取電壓,但是每次轉化完成后都會調用回調函數,這樣太浪費CPU了,解決辦法如下: http://www.stmcu.org.cn/module/forum/thread-615792-1-1.html cube默認是開啟了中斷,但是只要調用 HAL_NVIC_DisableIRQ(DMA2_Stream0_IRQn); 把中斷關閉即可
[單片機]
STM32 HAL庫串口發送多字節數據
串口發送16字節數據 int16_t MotorEncoder; uint8_t low,high; high=(uint8_t)(MotorEncoder 8); low=(uint8_t)(MotorEncoder&0xFF); HAL_UART_Transmit(&huart1 , &low, 1, 0xff); HAL_UART_Transmit(&huart1 , &high, 1, 0xff); 串口發送32字節數據 int32_t MotorEncoder; uint8_t code ; code =(uint8_t)(MotorEncoder 24); code =(uint8_t)(MotorEnco
[單片機]
HAL庫教程7:STM32的時鐘系統
??STM32的時鐘系統比較復雜,不像51單片機,可能只有一個時鐘。原因:1、外設多,不同的外設有不同的時鐘要求;2、功耗原因,速度越快,功耗越大,抗電磁干擾能力越弱。 此處以STM32F405為例,講一點最常用的知識。其它的型號大同小異。 時鐘 含義 特點 HSE 外部高速時鐘信號 一般選擇外接晶振,最常用的時鐘信號。電機驅動板外接12Mhz HSI 內部高速時鐘信號 由單片機內部的16MHzRC振蕩器生成,成本低,但精度低。默認的系統時鐘,但實際使用的場合不多。 PLL 鎖相環 由HSE或HSI提供時鐘信號,主要用于生成高速系統時鐘,STM32F405最高168Mhz,103 72Mhz 4
[單片機]
<font color='red'>HAL庫</font>教程7:<font color='red'>STM32</font>的時鐘系統
單片機軟件模擬SPI接口
SPI(Serial Peripheral Interfacer 串行外設接口)是摩托羅拉公司推出的一種同步串行通訊接口,用于微處理器臌控制器和外圍擴展芯片之間的串行連接,現已發展成為一種工業標準,目前,各半導體公司推出了大量的帶有SPI接口的具有各種各樣功能的芯片,如RAM,EEPROM,FlashROM,A/D轉換器、D/A轉換器、LED/LED顯示驅動器、I/O接口芯片、實時時鐘、UART收發器等等,為用戶的外圍擴展提供了極其靈活而價廉的選擇。由于SPI總線接口只占用微處理器四個I/O口線,采用SPI總線接口可以簡化電路沒計,節省很多常規電路中的接口器件和I/O口線,提高設計的可靠性。 現以 AT89C205l單片機模擬SP
[單片機]
單片機<font color='red'>軟件</font><font color='red'>模擬</font>SPI接口
Cx51 標準庫程序屬性說明
字符串操作STRING.H strcat 連接兩個字符串 strchr 可重入返回一個字符串中指定字符第一次出現的位置指針 strcmp 可重入比較兩個字符串 strcpy 可重入拷貝一個字符串到另一個 strcspn 返回一個字符串中和第二個字符串的任何字符匹配的第一 個字符的索引 strlen 可重入字符串長度 strncat 從一個字符串連接指定數目的字符到另一個字符串 strncmp 比較兩個字符串中指定數目的字符 strncpy 從一個字符串拷貝指定數目的字符到另一個字符串 strpbrk 返回一個字符串中和第二個字符串的任何字符匹配的第一 個字符的指針 strpos 可重入返回一個指定字符在一個字符串中第一次出現的索引
[單片機]
車輛控制系統開發軟件閉環模擬方法
1 概述 隨著計算機技術的發展,車輛上的控制系統變得越來越復雜,因而控制算法變得也非常復雜,所以控制系統開發的主要工作是內部的控制算法的開發。我們知道近幾年國外先進的開發過程是呈V 字形,它分為下面幾個階段 : (1) 系統設計建模與離線模擬 在這一階段主要驗證控制算法與概念,驗證系統的可行性,使用MATLAB/Simulink 軟件可以很容易實現控制算法并進行系統建模,這些模型可以同樣應用于實時硬件模擬。 (2) 系統原型實施 這一階段仍是采用PC 計算機或功能較強的計算機,如DSP。將系統的硬件信號加入到模擬系統中,從而實現真實的物理系統。可以采用MATLAB 工具箱,例如RTW 和xPC 等。很容易在PC 計算機中實
[嵌入式]
X86軟件模擬器面世 彌補ARM服務器芯片短板
  在智能手機和平板電腦占據大半江山的處理器巨頭ARM意欲挺進服務器市場早已成定局。在今年7月,國外廠商Boston就采用ARM架構,推出內置192核心,整體功耗卻只有300瓦的2U服務器產品Viridis。Viridis采用48個Calxeda 四核SoC模塊,能夠在2U的機箱里提供192個計算內核的綠色服務器(12個Calxeda ECX-1000計算節點)。該SoC包含有內存、10GbE網絡InterConnect Fabric、外部10GbE網絡接口,管理接口和SATA磁盤接口。根據Boston的介紹,Viridis能體統比傳統X86服務器更優的功耗性價比,在性能不變的前提下,功耗只有之前的十分之一。   ARM芯片低功耗是
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 安康市| 陆川县| 山丹县| 罗山县| 巨鹿县| 嘉善县| 无为县| 阿坝| 高州市| 珲春市| 垣曲县| 通渭县| 诸暨市| 涞源县| 青铜峡市| 乐昌市| 东乡| 新丰县| 盐津县| 海伦市| 丹寨县| 宁安市| 赤水市| 鸡西市| 孟津县| 日土县| 二连浩特市| 广东省| 绥德县| 阿城市| 东明县| 泸溪县| 宁强县| 永年县| 莱西市| 达孜县| 赤城县| 和田市| 湘西| 西和县| 泾川县|