資源簡介
文件中包括基于STM32實現的模擬I2C操作,經測試能正確讀寫I2C設備。

代碼片段和文件信息
//---------------------------------------------------------------//
//- 文件名稱: I2C.c
//---------------------------------------------------------------//
//- 作 者 : ggyy
//---------------------------------------------------------------//
//- 版??本 : V1.0
//---------------------------------------------------------------//
//- 日??期? : 20150313
//---------------------------------------------------------------//
//- 描??述 : 文件實現模擬I2C相關時序操作,單片機為STM32,使用
//- 的是V3.5.0的庫
//---------------------------------------------------------------//
#include?“I2C.h“
#include?“delay.h“
//---------------------------------------------------------------//
//- 函數名稱: I2C_Config
//---------------------------------------------------------------//
//- 函數功能: I2C初始化,包括引腳時鐘和引腳配置
//---------------------------------------------------------------//
//- 函數參數:
//---------------------------------------------------------------//
//- 返回值? : 無
void?I2C_Config(void)
{
GPIO_InitTypeDef?GPIO_InitStructure;
//時鐘使能
? RCC_APB2PeriphClockCmd(RCC_I2C_SCL?ENABLE);
? RCC_APB2PeriphClockCmd(RCC_I2C_SDA?ENABLE);
//SCL,配置成推挽輸出
GPIO_InitStructure.GPIO_Pin? =?GPIO_Pin_I2C_SCL;
GPIO_InitStructure.GPIO_Mode? =?GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed? =?GPIO_Speed_50MHz;
GPIO_SetBits(GPIO_I2C_SCL?GPIO_Pin_I2C_SCL);
GPIO_Init(GPIO_I2C_SCL?&GPIO_InitStructure);
//SDA,配置成開漏輸出
GPIO_InitStructure.GPIO_Pin? =?GPIO_Pin_I2C_SDA;
GPIO_InitStructure.GPIO_Mode =?GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed? =?GPIO_Speed_50MHz;
GPIO_SetBits(GPIO_I2C_SDA?GPIO_Pin_I2C_SDA);
GPIO_Init(GPIO_I2C_SDA?&GPIO_InitStructure);
}
//---------------------------------------------------------------//
//- 函數名稱: I2C_Start
//---------------------------------------------------------------//
//- 函數功能: I2C開始信號
//---------------------------------------------------------------//
//- 函數參數: 無
//---------------------------------------------------------------//
//- 返回值? : 無
void?I2C_Start(void)
{
//當SCL為高電平的時候,SDA從高電平跳變到低電平表示開始信號。
I2C_SDA_SET; //拉高SDA,準備在SCL為高電平的狀態下拉低形成開始信號
delay_us(4);
I2C_SCL_SET; //拉高SCL,準備讓SDA拉低形成開始信號
delay_us(4);
? I2C_SDA_RESET; //拉低SDA,產生開始信號
delay_us(4);
I2C_SCL_RESET;
delay_us(4);
}
//---------------------------------------------------------------//
//- 函數名稱: I2C_Stop
//---------------------------------------------------------------//
//- 函數功能: I2C結束信號
//---------------------------------------------------------------//
//- 函數參數: 無
//---------------------------------------------------------------//
//- 返回值? : 無??
void?I2C_Stop(void)
{
//當SCL為高電平的時候,SDA從低電平跳變到高電平表示結束信號。
I2C_SCL_RESET; //拉低SCL,防止在SCL為高電平的狀態下改變SDA
? delay_us(4);
I2C_SDA_RESET; //拉低SDA,準備在SCL為高電平的狀態下拉高形成結束信號
? delay_us(4);
I2C_SCL_SET;? //拉高SCL,準備讓SDA拉高形成結束信號
delay_us(4);
I2C_SDA_SET; //拉SDA,產生開始信號
delay_us(4); ???
}
//-------------------------------------
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????11696??2015-03-13?21:55??STM32_I2C\I2C.c
?????文件???????4512??2015-03-13?21:54??STM32_I2C\I2C.h
?????文件????????187??2015-03-13?22:03??STM32_I2C\readme.txt
?????目錄??????????0??2015-03-13?22:03??STM32_I2C
-----------?---------??----------?-----??----
????????????????16395????????????????????4
- 上一篇:老男孩linux筆試題
- 下一篇:CadLib(根據國外CadLib庫)修改
評論
共有 條評論