資源簡介
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技巧
- 下一篇:直流穩壓電源的設計和制作
評論
共有 條評論