资源简介
TI PCM5242 miniDSP配置源码 简易的I2C通信协议适用于STM8 STM32,源码内含I2C协议代码及PCM5242的源码,想要学习的可以直接下载做简单修改便可以启动
代码片段和文件信息
#include “stm32f0xx.h“
#include “defines.h“
#include “I2C_drv.h“
#include “Delay.h“
GPIO_InitTypeDef I2C_SDA_InitStr;
void I2C_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB &GPIO_InitStructure);
}
void SDA_Set_Out(void)
{
I2C_SDA_InitStr.GPIO_Pin = GPIO_Pin_7;
I2C_SDA_InitStr.GPIO_Mode = GPIO_Mode_OUT;
I2C_SDA_InitStr.GPIO_OType = GPIO_OType_PP;
I2C_SDA_InitStr.GPIO_Speed = GPIO_Speed_50MHz;
I2C_SDA_InitStr.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB &I2C_SDA_InitStr);
}
void SDA_Set_Input(void)
{
I2C_SDA_InitStr.GPIO_Pin = GPIO_Pin_7;
I2C_SDA_InitStr.GPIO_Mode = GPIO_Mode_IN;
I2C_SDA_InitStr.GPIO_OType = GPIO_OType_PP;
I2C_SDA_InitStr.GPIO_Speed = GPIO_Speed_50MHz;
I2C_SDA_InitStr.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB &I2C_SDA_InitStr);
}
/////////////////////////////////////////////////////////////////
void I2C_start(void)
{
SDA_Set_Out();
I2C_SDA(HIGH); // sda high firstly
I2C_SCL(HIGH);
delay_us(dly_time_clk);
I2C_SDA(LOW);
delay_us(dly_time_clk);
I2C_SCL(LOW);
delay_us(dly_time_clk);
}
void I2C_stop(void)
{
SDA_Set_Out();
I2C_SDA(LOW);
I2C_SCL(LOW);
delay_us(dly_time_clk);
I2C_SCL(HIGH);
delay_us(dly_time_clk);
I2C_SDA(HIGH);
delay_us(dly_time_clk);
}
// master send nack
void I2C_nack(void)
{
I2C_SCL(LOW);
SDA_Set_Out();
I2C_SDA(HIGH);
delay_us(dly_time_clk);
I2C_SCL(HIGH);
delay_us(dly_time_clk);
I2C_SCL(LOW);
}
void I2C_ack(void)
{
I2C_SCL(LOW);
SDA_Set_Out();
I2C_SDA(LOW);
delay_us(dly_time_clk);
I2C_SCL(HIGH);
delay_us(dly_time_clk);
I2C_SCL(LOW);
}
unsigned char I2C_wait_ack(void)
{
unsigned char ErrTime=0;
SDA_Set_Input();
I2C_SDA(HIGH);
delay_us(dly_time_clk);
I2C_SCL(HIGH);
delay_us(dly_time_clk);
while(I2C_READ_SDA)
{
ErrTime++;
if(ErrTime>250)
{
I2C_stop();
return 1;
}
}
I2C_SCL(LOW);
return 0;
}
void I2C_send_byte(unsigned char txd)
{
unsigned char n = 8;
SDA_Set_Out();
I2C_SCL(LOW);
while ((n--)!=0)
{
if ((txd & 0x80)!=0)
{
I2C_SDA(HIGH);
}
else
{
I2C_SDA(LOW);
}
txd <<= 1;
delay_us(dly_time_clk);
I2C_SCL(HIGH);
delay_us(dly_time_clk);
I2C_SCL(LOW); // note: scl normal low
delay_us(dly_time_clk);
}
}
unsigned char I2C_read_byte(unsigned char ack)
{
unsigned char i =8 receive=0;
SDA_Set_Input();
while ((i--)!=0)
{
I2C_SCL(LOW);
delay_us(dly_time_clk);
I2C_SCL(HIGH);
receive<<=1;
if(I2C_READ_SDA)
receive++;
delay_us(dly_time_clk);
}
if (
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4796 2017-08-28 14:57 I2C_drv.c
文件 1324 2017-08-21 11:22 I2C_drv.h
文件 196483 2017-07-17 13:52 PCM5242.c
文件 1973 2017-07-03 16:10 PCM5242.h
- 上一篇:退出页面自动清除session技巧
- 下一篇:直流稳压电源的设计和制作
评论
共有 条评论