资源简介
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
- 下一篇:超市管理策略-案例分析
相关资源
- arduino pca9685多舵机同时控制案例
- PCA9685驱动STM32F103
- PCA9685驱动16舵机电机调速STM32F4代码
- MAX31865模块STM32驱动程序
- RikiRobot Stm32驱动板开发使用说明
- 基于STM32F103控制16PWM路舵机驱动板PC
- ADS1110stm32驱动自带I2C驱动
- stm32驱动74HC595和74HC165 74hc165采集数据
- stm32驱动MAX7219控制数码管显示.zip
- stm32驱动ccd并且发送上位机
- STM32驱动1602
- ST7565_12864液晶STM32驱动
- STM32驱动蜂鸣器播放语音
- Stm32驱动SDCard移植FATFS文件系统
- STM32驱动DS18B20库函数驱动
- STM32驱动W5100实现http的网页浏览
- STM32驱动8位并口ILI9225G彩屏
- STM32驱动BH1750环境光强度传感器(GY
- stm32驱动nokia5110液晶屏程序
- OV7670摄像头基于STM32驱动源程序
- AS5045资料+STM32驱动源代码
- STM32驱动VS1003程序
- TI杯电子设计大赛LDC1000STM32驱动
- STM32驱动WS2812
- STM32驱动OV7620摄像头
- stm32驱动rc522程序
- esp8266和stm32驱动之三实现访问网站获
- ADS1118的STM32驱动程序
- STM32驱动新西达2212无刷电机程序
- stm32驱动AD7992/AD7993用硬件SPI和模拟方
评论
共有 条评论