資源簡介
PCA9685的驅動

代碼片段和文件信息
#include?“stm32f10x.h“
#include?“bsp_i2c_gpio.h“
#include?“stdio.h“
#include?“usart.h“
/*?定義I2C總線連接的GPIO端口?用戶只需要修改下面4行代碼即可任意改變SCL和SDA的引腳?*/
#define?GPIO_PORT_I2C GPIOB /*?GPIO端口?*/
#define?RCC_I2C_PORT? RCC_APB2Periph_GPIOB /*?GPIO端口時鐘?*/
#define?I2C_SCL_PIN GPIO_Pin_9 /*?連接到SCL時鐘線的GPIO?*/
#define?I2C_SDA_PIN GPIO_Pin_8 /*?連接到SDA數據線的GPIO?*/
/*?定義讀寫SCL和SDA的宏,已增加代碼的可移植性和可閱讀性?*/
#if?1 /*?條件編譯:?1?選擇GPIO的庫函數實現IO讀寫?*/
#define?I2C_SCL_1()??GPIO_SetBits(GPIO_PORT_I2C?I2C_SCL_PIN) /*?SCL?=?1?*/
#define?I2C_SCL_0()??GPIO_ResetBits(GPIO_PORT_I2C?I2C_SCL_PIN) /*?SCL?=?0?*/
#define?I2C_SDA_1()??GPIO_SetBits(GPIO_PORT_I2C?I2C_SDA_PIN) /*?SDA?=?1?*/
#define?I2C_SDA_0()??GPIO_ResetBits(GPIO_PORT_I2C?I2C_SDA_PIN) /*?SDA?=?0?*/
#define?I2C_SDA_READ()??GPIO_ReadInputDataBit(GPIO_PORT_I2C?I2C_SDA_PIN) /*?讀SDA口線狀態?*/
#else /*?這個分支選擇直接寄存器操作實現IO讀寫?*/
????/* 注意:如下寫法,在IAR最高級別優化時,會被編譯器錯誤優化?*/
#define?I2C_SCL_1()??GPIO_PORT_I2C->BSRR?=?I2C_SCL_PIN /*?SCL?=?1?*/
#define?I2C_SCL_0()??GPIO_PORT_I2C->BRR?=?I2C_SCL_PIN /*?SCL?=?0?*/
#define?I2C_SDA_1()??GPIO_PORT_I2C->BSRR?=?I2C_SDA_PIN /*?SDA?=?1?*/
#define?I2C_SDA_0()??GPIO_PORT_I2C->BRR?=?I2C_SDA_PIN /*?SDA?=?0?*/
#define?I2C_SDA_READ()??((GPIO_PORT_I2C->IDR?&?I2C_SDA_PIN)?!=?0) /*?讀SDA口線狀態?*/
#endif
/*
*********************************************************************************************************
* 函?數?名:?i2c_Delay
* 功能說明:?I2C總線位延遲,最快400KHz
* 形????參:無
* 返?回?值:?無
*********************************************************************************************************
*/
static?void?i2c_Delay(void)
{
uint8_t?i;
/*
? 下面的時間是通過安富萊AX-Pro邏輯分析儀測試得到的。
CPU主頻72MHz時,在內部Flash運行?MDK工程不優化
循環次數為10時,SCL頻率?=?205KHz?
循環次數為7時,SCL頻率?=?347KHz,?SCL高電平時間1.5us,SCL低電平時間2.87us?
? 循環次數為5時,SCL頻率?=?421KHz,?SCL高電平時間1.25us,SCL低電平時間2.375us?
????????
????IAR工程編譯效率高,不能設置為7
*/
for?(i?=?0;?i?10;?i++);
}
/*
*********************************************************************************************************
* 函?數?名:?i2c_Start
* 功能說明:?CPU發起I2C總線啟動信號
* 形????參:無
* 返?回?值:?無
*********************************************************************************************************
*/
void?i2c_Start(void)
{
/*?當SCL高電平時,SDA出現一個下跳沿表示I2C總線啟動信號?*/
I2C_SDA_1();
I2C_SCL_1();
i2c_Delay();
I2C_SDA_0();
i2c_Delay();
I2C_SCL_0();
i2c_Delay();
}
/*
*********************************************************************************************************
* 函?數?名:?i2c_Start
* 功能說明:?CPU發起I2C總線停止信號
* 形????參:無
* 返?回?值:?無
*********************************************************************************************************
*/
void?i2c_Stop(void)
{
/*?當SCL高電平時,SDA出現一個上跳沿表示I2C總線停止信號?*/
I2C_SDA_0();
I2C_SCL_1();
i2c_Delay();
I2C_SDA_1();
}
/*
*********************************************************************************************************
* 函?數?名:?i2c_SendByte
* 功能說明:?CPU向I2C總線設備發送8bit數據
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5968??2016-08-15?15:42??pca9685_reg.h
?????文件??????10760??2016-08-15?14:59??bsp_i2c_gpio.c
?????文件????????588??2016-08-15?14:52??bsp_i2c_gpio.h
?????文件???????8397??2016-09-29?09:55??pca9685.c
?????文件????????551??2016-09-29?09:55??pca9685.h
?????文件????????409??2016-09-29?10:06??main.c
-----------?---------??----------?-----??----
????????????????26673????????????????????6
- 上一篇:dseo13b.zip
- 下一篇:超市管理策略-案例分析
評論
共有 條評論