OpenEdv-开源电子网

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

STM32F429模拟IIC驱动PCF8563,主频180M怎么不可以,降低到72M,可以了,帮忙看看什么问题,大神们?

[复制链接]

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-4-2
在线时间
57 小时
发表于 2017-3-30 18:38:37 | 显示全部楼层 |阅读模式

72M的情况

72M的情况
RTC2.jpeg

iic

iic


1、我移植原子的IIC,在论坛里移植八度空间的pcf8563驱动,在STM32F429上180M主频运行时怎么不可以啊?我把主频将到72M可以正常读出时间数据了,麻烦大神帮忙看看是什么问题,小弟不胜感激!!!
2、下面附件是源码

pcf8563_rtc2.zip

10.39 MB, 下载次数: 1043

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

使用道具 举报

260

主题

809

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1894
金钱
1894
注册时间
2012-10-28
在线时间
357 小时
发表于 2017-3-31 10:38:05 | 显示全部楼层
估计应该是延时时间的问题造成的吧,主频高了,那么延时时间也需要进行调整才行,如你有示波器可以看看scl 输出的波形时间
回复 支持 反对

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-4-2
在线时间
57 小时
 楼主| 发表于 2017-3-31 18:40:32 | 显示全部楼层
本帖最后由 1121691743 于 2017-3-31 18:42 编辑
A2.jpg

02

02

A3

A3

FF

FF

FF

FF
hpdell 发表于 2017-3-31 10:38估计应该是延时时间的问题造成的吧,主频高了,那么延时时间也需要进行调整才行,如你有示波器可以看看scl  ...

C:\Users\Administrator\Desktop\波形
回复 支持 反对

使用道具 举报

260

主题

809

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1894
金钱
1894
注册时间
2012-10-28
在线时间
357 小时
发表于 2017-4-1 09:37:01 | 显示全部楼层
本帖最后由 hpdell 于 2017-4-1 09:40 编辑

你只要把 scl 的上升沿,下降沿的时间控制在 4.7uS左右就可以了,

我的主频216MHz,使用模拟的 I2C 完全没有任何问题
而且我也没有看懂你这个 40us, 135us, 240us 是干什么用的,

iic的时钟上升沿与下降沿你都设置为 4.7us----5us 之间看看,

只要你把这个 4.7us控制好了,不管你的主频多高都是没有关系的,哪怕以后stm出400MHz的主频单片机也是一样的
回复 支持 反对

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-4-2
在线时间
57 小时
 楼主| 发表于 2017-4-7 19:17:00 | 显示全部楼层
本帖最后由 1121691743 于 2017-4-7 19:20 编辑
hpdell 发表于 2017-4-1 09:37
你只要把 scl 的上升沿,下降沿的时间控制在 4.7uS左右就可以了,

我的主频216MHz,使用模拟的 I2C 完 ...

谢谢大神指导,我找到问题了,是我模拟pcf8563驱动写的时序有问题
void PCF8563_Read_nByte(unsigned char REG_ADD, unsigned char num, unsigned char *pBuff)
{
        unsigned char i = 0;
        
        IIC_Start();
        if(!(IIC_Write_Byte(PCF8563_Write)))  
        {
                IIC_Write_Byte(REG_ADD);
                IIC_Start();  //这里有个重启总线,不能立马从启,要延时一下
                IIC_Write_Byte(PCF8563_Read);  
                {
                        *pBuff = IIC_Read_Byte();  
                        if(i == (num - 1))        IIC_NAck();
                        else IIC_Ack();  
                        pBuff++;
                }
        }
        IIC_Stop();        
}
//2úéúIICÆeê¼DÅoÅ
void IIC_Start(void)
{
        SDA_OUT();   
        delay_us(4); //在这里加个延时,可以了
        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;}
}C:\Users\Administrator\Desktop\新建文件夹 阿里旺旺图片20170407191041.jpg


回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2020-7-27
在线时间
1 小时
发表于 2020-7-27 15:31:34 | 显示全部楼层
hpdell 发表于 2017-4-1 09:37
你只要把 scl 的上升沿,下降沿的时间控制在 4.7uS左右就可以了,

我的主频216MHz,使用模拟的 I2C 完 ...

你好,你所用的延时函数是阻塞式还是用定时器生成的?
回复 支持 反对

使用道具 举报

260

主题

809

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1894
金钱
1894
注册时间
2012-10-28
在线时间
357 小时
发表于 2020-8-6 10:54:01 | 显示全部楼层
hao20200727 发表于 2020-7-27 15:31
你好,你所用的延时函数是阻塞式还是用定时器生成的?

4.7us 的,貌似没有必要使用定时器吧?

而且怎么高频的定时器貌似也比较容易挂掉

直接使用阻塞就完事了

或者使用硬件 i2c 也行
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-30 16:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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