资源简介
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
- 下一篇:超市管理策略-案例分析
相关资源
- HMC5883L-STM32驱动程序
- STM32驱动MG955舵机的源代码
- 舵机控制器PCA9685程序 51版本
- STM32驱动ht1621b显示LCD
- STM32驱动AD9850,串行方式,完整工程
- stm32驱动ov7670 数据转BMP格式再转JPEG存
- AD5422_STM32驱动程序
- 用STM32驱动的4*4行列矩阵键盘
- STM32驱动OV2710
- STM32驱动DA芯片DAC7617.doc
- STM32驱动CH452
- ADS8688的STM32驱动代码
- pca9685+stm32f103c8t6
- STM32驱动max6675测温的测试例程
- mpu9250_stm32驱动
- AD9959的stm32驱动
- SHT11 温湿度传感器 STM32驱动
- STM32驱动max30102和MLX90614程序
- STM32驱动TMC26x的工程文件
- STM32驱动VGA显示C代码
- stm32驱动舵机
- stm32驱动si4463收发
- TLC5615 STM32驱动程序
-
ST-li
nk v2官方驱动,win10可用 - ht1621 stm32驱动
- STM32驱动屏ST7735
- ILI9341 STM32驱动显示程序
- 四线(IIC)OLED驱动STM32驱动程序
- ADS1247 STM32驱动
- 基于STM32F103步进电机驱动程序
评论
共有 条评论