• 大小: 10.53MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-10
  • 语言: 其他
  • 标签: PCA9685  STM32  STM32F103  

资源简介

基于MDK Keil5编程,STM32F103驱动PCA9685控制器,16路舵机驱动模块,IIC通信.

资源截图

代码片段和文件信息


#include “iic1.h“


void I2C1_Init(void)
{
 /***I2C端口定义***/
GPIO_InitTypeDef  GPIO_InitStructure;//定义GPIO结构体
  I2C_InitTypeDef  I2C_InitStruct; //I2C结构体初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO ENABLE);//打开GPIOB  打开串口
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1ENABLE);//I2C1的时钟时能

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//设置GPIO的管脚
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置GPIO的管脚最大频率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_OD;//开漏输出复用功能
GPIO_Init(GPIOB&GPIO_InitStructure);//GPIO设置初始?

I2C_DeInit(I2C1);//对I2C进行寄存器初始化
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; //设置I2C模式为I2C模式
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;//I2C占空比 
I2C_InitStruct.I2C_OwnAddress1 =0x30;//设置stm32自己的地址 
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;//允许I2C应答 
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;//应答7位地址 
I2C_InitStruct.I2C_ClockSpeed = 3200;//设置数据传输速度为HZ 
I2C_Cmd(I2C1 ENABLE);//允许I2C1 
I2C_Init(I2C1 &I2C_InitStruct);//I2C1初始化   
I2C_AcknowledgeConfig(I2C1ENABLE);//允许一字节一应答模式
}

void I2C1_Write_Byte(u8 addressu8 data)
{

while(I2C_GetFlagStatus(I2C1 I2C_FLAG_BUSY)); //检测总线是否忙 就是看 SCL 或SDA是否为 低 
I2C_AcknowledgeConfig(I2C1ENABLE);//允许接受应答
I2C_GenerateSTART(I2C1ENABLE);//发送start信号

while(!I2C_CheckEvent(I2C1I2C_EVENT_MASTER_MODE_SELECT));//stm32设置为主模式完毕
I2C_Send7bitAddress(I2C1pca_adrrI2C_Direction_Transmitter);//发送I2C器件地址

while(!I2C_CheckEvent(I2C1I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//I2C地址发送完毕
I2C_SendData(I2C1address);//发送 命令地址

while(!I2C_CheckEvent(I2C1I2C_EVENT_MASTER_BYTE_TRANSMITTED));//等待发送完毕
I2C_SendData(I2C1data);//发送 命令数据

while(!I2C_CheckEvent(I2C1I2C_EVENT_MASTER_BYTE_TRANSMITTED));//等待发送完毕
I2C_GenerateSTOP(I2C1ENABLE);//发送stop信号
}

u8 I2C1_Read_Data(u8 read_addr)
{
 
while(I2C_GetFlagStatus(I2C1 I2C_FLAG_BUSY)); //检测总线是否忙 就是看 SCL 或SDA是否为 低 
I2C_AcknowledgeConfig(I2C1ENABLE);//允许接受应答
I2C_GenerateSTART(I2C1ENABLE);//发送start信号

while(!I2C_CheckEvent(I2C1I2C_EVENT_MASTER_MODE_SELECT));//stm32设置为主模式完毕
I2C_Send7bitAddress(I2C1pca_adrrI2C_Direction_Transmitter);//发送I2C器件地址

while(!I2C_CheckEvent(I2C1I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//I2C地址发送完毕
I2C_SendData(I2C1read_addr);//发送 命令地址

while(!I2C_CheckEvent(I2C1I2C_EVENT_MASTER_BYTE_TRANSMITTED));//等待发送完毕
I2C_GenerateSTART(I2C1ENABLE);//发送start信号

while(!I2C_CheckEvent(I2C1I2C_EVENT_MASTER_MODE_SELECT));//stm32设置为主模式完毕
I2C_Send7bitAddress(I2C1pca_adrr|0x01I2C_Direction_Receiver);//发送I2C器件地址

while(!I2C_CheckEvent(I2C1I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));//I2C地址发送完毕
I2C_AcknowledgeConfig(I2C1DISABLE);//关闭应答
I2C_GenerateSTOP(I2C1ENABLE);//产生停止位

while(!I2C_CheckEvent(I2C1I2C_EVENT_MASTER_BYTE_RECEIVED));//等待接受完成
return I2C_ReceiveData(I2C1);//将读到数据强制类型转换后返回

}


//BCD转DEC(BCD为8421码)
u8 BCD2HEX(u8 val)
{
    u8 i;
    i= val&0x0f;
    val >>= 4;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2020-08-08 15:57  16路舵机驱动\
     目录           0  2020-08-08 15:57  16路舵机驱动\Doc\
     文件        1646  2020-02-17 00:44  16路舵机驱动\Doc\readme.txt
     目录           0  2020-08-12 11:22  16路舵机驱动\HARDWARE\
     目录           0  2020-08-08 15:57  16路舵机驱动\HARDWARE\IIC1\
     文件        3498  2020-08-06 00:01  16路舵机驱动\HARDWARE\IIC1\IIC1.c
     文件         437  2020-08-05 23:41  16路舵机驱动\HARDWARE\IIC1\IIC1.h
     目录           0  2020-08-19 20:50  16路舵机驱动\HARDWARE\PCA9685\
     文件        2621  2020-08-19 20:48  16路舵机驱动\HARDWARE\PCA9685\pca9685.c
     文件         471  2020-08-19 20:50  16路舵机驱动\HARDWARE\PCA9685\pca9685.h
     目录           0  2020-08-08 15:57  16路舵机驱动\Libraries\
     目录           0  2020-08-08 15:57  16路舵机驱动\Libraries\CMSIS\
     文件       17273  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\core_cm3.c
     文件       85714  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\core_cm3.h
     目录           0  2020-08-08 15:57  16路舵机驱动\Libraries\CMSIS\startup\
     文件       15766  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\startup\startup_stm32f10x_cl.s
     文件       15503  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\startup\startup_stm32f10x_hd.s
     文件       15692  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\startup\startup_stm32f10x_hd_vl.s
     文件       12376  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\startup\startup_stm32f10x_ld.s
     文件       13656  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\startup\startup_stm32f10x_ld_vl.s
     文件       12765  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\startup\startup_stm32f10x_md.s
     文件       14073  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\startup\startup_stm32f10x_md_vl.s
     文件       15955  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\startup\startup_stm32f10x_xl.s
     文件      633941  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\stm32f10x.h
     文件       36557  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\system_stm32f10x.c
     文件        2085  2015-07-04 15:01  16路舵机驱动\Libraries\CMSIS\system_stm32f10x.h
     目录           0  2020-08-08 15:57  16路舵机驱动\Libraries\STM32F10x_StdPeriph_Driver\
     目录           0  2020-08-08 15:57  16路舵机驱动\Libraries\STM32F10x_StdPeriph_Driver\inc\
     文件        8982  2015-07-04 15:01  16路舵机驱动\Libraries\STM32F10x_StdPeriph_Driver\inc\misc.h
     文件       21690  2015-07-04 15:01  16路舵机驱动\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_adc.h
     文件        7555  2015-07-04 15:01  16路舵机驱动\Libraries\STM32F10x_StdPeriph_Driver\inc\stm32f10x_bkp.h
............此处省略251个文件信息

评论

共有 条评论