OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4264|回复: 3

PCF8563调试不成功,代码如下,求帮助。

[复制链接]

8

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-5-31
在线时间
7 小时
发表于 2015-9-7 12:43:28 | 显示全部楼层 |阅读模式
5金钱


#ifndef _iic_h_ 
#define _iic_h_


#include "sys.h"



//IO方向设置
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<7;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<7;}

//IO操作函数  
#define IIC_SCL    Bout(6) //SCL
#define IIC_SDA    Bout(7) //SDA  
#define READ_SDA   PBin(7)  //输入SDA 






/******************************************************************************
                                 外部功能函数
******************************************************************************/

void IIC_GPIO_Init(void); //GPIO初始化

void IIC_Start(void); //IIC启动

void IIC_Stop(void); //IIC停止

void IIC_Ack(u8 a); //主机向从机发送应答信号

u8   IIC_Write_Byte(u8 dat); //向IIC总线发送一个字节数据

u8   IIC_Read_Byte(void); //从IIC总线上读取一个字节数据



#endif  /* end iic.h */


#include "iic.h"
#include "delay.h"


void IIC_GPIO_Init(void)
{

RCC->APB2ENR|=1<<3;//先使能外设IO PORTB时钟  
GPIOB->CRL&=0X00FFFFFF;//PB6/7 推挽输出
GPIOB->CRL|=0X33000000;   
GPIOB->ODR|=3<<6;     //PC6,7 输出高

}


void IIC_Start(void)
{

    SDA_OUT();     //sda线输出
IIC_SDA=1;    
IIC_SCL=1;
delay_us(4);
  IIC_SDA=0;//START:when CLK is high,DATA change form high to low 
delay_us(4);
IIC_SCL=0;//钳住I2C总线,准备发送或接收数据 
delay_us(4);



}

void IIC_Stop(void)
{

IIC_SDA=0;
  delay_us(4); 
IIC_SCL=1;//STOP:when CLK is high DATA change form low to high
  delay_us(4); 
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4); 

}

void IIC_Ack(u8 a)
{

SDA_OUT();
if(a) IIC_SDA=1; //放上应答信号电平
else  IIC_SDA=0;
delay_us(4);
IIC_SCL=1;
delay_us(4);
IIC_SCL=0;
delay_us(4);



}

u8 IIC_Write_Byte(u8 dat)
{
u8 i;
u8 iic_ack=0; //iic应答标志

SDA_OUT();//IIC_SDA_OUT(); //设置成输出

for(i = 0;i < 8;i++)
{
if(dat & 0x80) IIC_SDA = 1; //判断发送位,先发送高位
else IIC_SDA = 0;

//#if _USER_DELAY_CLK==1  /* 定义了则使用延时函数来改变通讯频率 */

delay_us(4);//IIC_Delay();
IIC_SCL = 1; //为SCL下降做准备
delay_us(4);//IIC_Delay();
IIC_SCL = 0; //突变,将数据位发送过去
dat<<=1; //数据左移一位
//字节发送完成,开始接收应答信号
}
IIC_SDA = 1; //释放数据线

SDA_IN(); //设置成输入

delay_us(4);//IIC_Delay();
IIC_SCL = 1; //为SCL下降做准备
delay_us(4);//IIC_Delay();



iic_ack |= READ_SDA; //读入应答位
IIC_SCL = 0;
return iic_ack; //返回应答信号
}

u8 IIC_Read_Byte(void)
{
u8 i;
u8 x=0;

IIC_SDA = 1; //首先置数据线为高电平

SDA_IN(); //设置成输入

for(i = 0;i < 8;i++)
{
x <<= 1; //读入数据,高位在前

//#if _USER_DELAY_CLK==1  /* 定义了则使用延时函数来改变通讯频率 */

delay_us(4);//IIC_Delay();
IIC_SCL = 1; //突变
delay_us(4);//IIC_Delay();

if(READ_SDA) x |= 0x01; //收到高电平

IIC_SCL = 0;
delay_us(4);//IIC_Delay();
} //数据接收完成



IIC_SCL = 0;

return x; //返回读取到的数据
}















int main(void)
{

//u8 t;
//u8 len;
char check_flag=2;
u16 times=0; 
char buf1[10],buf2[10];//,buf3[10];
char *buf_temp;
float adc_temp1=0;
float adc_temp2=0;
//_PCF8563_Time_Typedef *pppp; 

p_Time=(_PCF8563_Time_Typedef *)mymalloc(sizeof(Time_InitStruct));
p_Date=(_PCF8563_Date_Typedef *)mymalloc(sizeof(Date_InitStruct));

p_Time->RTC_Hours = 10;
p_Time->RTC_Minutes = 20;
p_Time->RTC_Seconds = 30;

p_Date->RTC_Years = 15;
p_Date->RTC_Months = 5;
p_Date->RTC_Days = 28;
p_Date->RTC_WeekDays = 4;


//float adc_temp3=0; 
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);     //延时初始化 
//uart1_init(72,9600); //串口初始化为9600
uart2_init(36,115200); //串口2初始化为115200
//LCD_Init();//迪文屏初始化
PORTDE_Init();//A/D采集用
//PCF8563_Init();//实时时钟
IIC_GPIO_Init();//实时时钟 



delay_ms(2000);

LCD_Init();//迪文屏初始化

PCF8563_SetMode(PCF_Mode_Normal);
PCF8563_Stop();
PCF8563_SetTime(PCF_Format_BIN,p_Time);
PCF8563_SetDate(PCF_Format_BIN,0,p_Date);

PCF8563_Start();
//PCF8563_SetTime(0x01,pppp);
delay_ms(2000);
//check_flag=PCF8563_Check(); 
//DispChar(140,60,check_flag);
//buf_temp=&check_flag;
//DispString(140,20,buf_temp,1);
PCF8563_GetTime(PCF_Format_BIN,p_Time);
sprintf(buf_temp,"%x",p_Time->RTC_Hours);
DispString(140,20,buf_temp,2);
//DispChar(140,20,pppp->RTC_Hours);
//DispChar(140,40,pppp->RTC_Minutes);
//DispChar(140,60,pppp->RTC_Seconds);

DispString(10,20,"AUTO MENU",9);
DispString(270,20,"95%",3);
DispString(10,40,"MANUAL MENU",11);
DispString(10,60,"MANUAL LOOK BACK",16);
DispString(10,80,"SETTING",7);
DispString(10,100,"AUTO DATA STORE",15);
DispString(10,120,"MANUAL DATA STORE",17);
DispString(10,140,"TIME SETTING",12);
DispString(10,160,"MASTER LINK",11);
DispString(10,180,"AUTO ON/OFF",11);
DispString(10,200,"ID:XXXXXXXXXX GSM/WIRELESS/RS485",32);
//DispString(140,220,"2015-08-23   12:00:00",21);
//DispString(10,10,"AUTO  ON/OFF               ",24);


 
while(1)
{
if(times<10)
{
adc_temp1+=ADC1_Data();
adc_temp2+=ADC2_Data();
times+=1;
}else
{
times=0;

sprintf(buf1,"%-10f",adc_temp1/20);
sprintf(buf2,"%-10f",adc_temp2/20);
//buf1=buf;
DispString(170,120,buf1,10);
DispString(170,140,buf2,10);
adc_temp1=0;
adc_temp2=0;

//显示时间
 //read_time_ok=read_timer();
 //buf_temp=&read_time_ok;
 //DispString(100,20,buf_temp,2);
 
 
 //buf_temp=timer;
 //DispString(10,220,buf_temp,20);
 sprintf(buf_temp,"%d",timer[0]);
 DispString(10,220,buf_temp,2);
 sprintf(buf_temp,"%d",timer[1]);
 DispString(30,220,buf_temp,2);
 sprintf(buf_temp,"%d",timer[2]);
 DispString(50,220,buf_temp,2);
 sprintf(buf_temp,"%d",timer[3]);
 DispString(70,220,buf_temp,2);
 sprintf(buf_temp,"%d",timer[4]);
 DispString(90,220,buf_temp,2);
 sprintf(buf_temp,"%d",timer[5]);
 DispString(110,220,buf_temp,2);
 sprintf(buf_temp,"%d",timer[6]);
 DispString(130,220,buf_temp,2);

 //sprintf(buf_temp,"%d",read_time_ok);
 //DispString(140,40,buf_temp,2);

}

delay_ms(100);

}  
 
}


   //为什么错误?
















玩好四轴
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-7 20:43:53 | 显示全部楼层
编译器会告诉你为什么。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-5-31
在线时间
7 小时
 楼主| 发表于 2015-9-7 21:30:58 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
不是,没错误,就是Pcf8563读出来的数都是零。
玩好四轴
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-7 22:28:03 | 显示全部楼层
回复【3楼】qiujiafu:
---------------------------------
那说明你的代码有bug,慢慢查找
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 00:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表