OpenEdv-开源电子网

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

为什么STM32F429的PC12口无法产生时钟信号?

[复制链接]

3

主题

13

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2020-7-20
在线时间
8 小时
发表于 2021-8-5 10:35:24 | 显示全部楼层 |阅读模式
15金钱
各位前辈,原子哥,大家中午好,这个问题已经困扰我3天了。我实在测试SD卡的时候,发现SD卡永远都卡在发送CMD55的R1检验中。
while(1)
        {
                status=SDIO->STA;
                if(status&((1<<0)|(1<<2)|(1<<6)))break;//CRC错误/命令响应超时/已经收到响应(CRC校验成功)
        }


就卡在上面这个程序中。然后我用示波器一测,发现是STM32F429中的PC12口无法产生时钟信号。我在旧板子中用同样的代码是可以产生这个时钟信号的,但是放在新板子上却不行了。代码用的都是从原子哥的SD卡程序中移植过来的,PC12的配置也没去动过他。
QQ图片20210805102831.png
现在的问题就是,同样的配置,为什么现在的板子中的STM上的PC12就出不来这个时钟信号呢?
QQ图片20210805103347.png QQ图片20210805103342.png


最佳答案

查看完整内容[请看2#楼]

看一下SDIO的时钟开了没
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4894
金钱
4894
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-8-5 10:35:25 | 显示全部楼层
海的风 发表于 2021-8-5 15:17
前辈你好,我将程序改为了直接操作寄存器,如下:
SDIO->POWER|=(0x03

看一下SDIO的时钟开了没
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4894
金钱
4894
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-8-5 10:46:42 | 显示全部楼层
你用PC12输出个脉冲试试,看看是不是硬件上的问题
回复

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2020-7-20
在线时间
8 小时
 楼主| 发表于 2021-8-5 14:44:27 | 显示全部楼层
阿侑kevin 发表于 2021-8-5 10:46
你用PC12输出个脉冲试试,看看是不是硬件上的问题

谢谢关注,我测试后发现,问题可能出在SD卡上电,卡时钟启动这个问题上。代码如下:
SDIO_SetPowerState(SDIO_PowerState_ON);
SDIO->CLKCR|=1<<8;
旧板子在跑完这两句后马上出来信号了,但是新板子还是像一滩死水。
我看到论坛中有个前辈也遇到过这个问题,他的意思是SDIO_SetPowerState(SDIO_PowerState_ON); 这句代码有时候会无效,需要通过直接操作寄存器解决。
我想问问前辈,这句话怎么直接操作寄存器解决?难道是SDIO->POWER =SDIO_PowerState_ON;  这样吗?
回复

使用道具 举报

11

主题

2147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4894
金钱
4894
注册时间
2015-1-10
在线时间
612 小时
发表于 2021-8-5 14:54:11 | 显示全部楼层
海的风 发表于 2021-8-5 14:44
谢谢关注,我测试后发现,问题可能出在SD卡上电,卡时钟启动这个问题上。代码如下:
SDIO_SetPowerState ...

是的,要是怕操作失败的话在写入完成后再读一下检查一遍,用库和操作寄存器是一样的,只是多了个检查传入参数有效性的检查而已
回复

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2020-7-20
在线时间
8 小时
 楼主| 发表于 2021-8-5 15:17:47 | 显示全部楼层
阿侑kevin 发表于 2021-8-5 14:54
是的,要是怕操作失败的话在写入完成后再读一下检查一遍,用库和操作寄存器是一样的,只是多了个检查传入 ...

前辈你好,我将程序改为了直接操作寄存器,如下:
SDIO->POWER|=(0x03<<0);
  SDIO->CLKCR|=1<<8;
结果发现新的板子还是没有信号。但是我通过调试发现,跑完这两句程序后,旧板子的SDIO->POWER和SDIO->CLKCR都发生了变化,而新板子跑完后,这两个寄存器的值都是0。请教下这个问题出在哪里?之前都没碰到过,为什么改不了寄存器呢
回复

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2020-7-20
在线时间
8 小时
 楼主| 发表于 2021-8-5 17:30:53 | 显示全部楼层
阿侑kevin 发表于 2021-8-5 15:46
看一下SDIO的时钟开了没

嗯,解决了,原来是外部晶振边上的电阻焊错了,差了2个数量级,谢谢大佬帮助~
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 00:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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