OpenEdv-开源电子网

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

sdio时钟不产生信号,求看一下啥地方出问题了

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-16
在线时间
6 小时
发表于 2021-7-26 23:48:45 | 显示全部楼层 |阅读模式
1金钱
  1. void gpio_sdio_init()
  2. {
  3.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
  4.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
  5.        
  6.         GPIOD->MODER|=(1<<5);
  7.         GPIOD->OSPEEDR|=(3<<4);
  8.         GPIOD->PUPDR|=(1<<4);
  9.         GPIOD->AFR[0]|=(0XC<<8);
  10.        
  11.         GPIOC->MODER|=(0xa<<16);
  12.         GPIOC->MODER|=(0xa<<20);
  13.         GPIOC->MODER|=(1<<25);
  14.         GPIOC->MODER|=(1<<21);
  15.         GPIOC->OSPEEDR|=(0XFF<<16);
  16.         GPIOC->OSPEEDR|=(3<<24);
  17.         GPIOC->PUPDR|=(0X55<<16);
  18.         GPIOC->AFR[1]|=(0Xccccc);
  19. }
  20. void sdio_init()
  21. {
  22.         SDIO_InitTypeDef *hsdio;
  23.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO,ENABLE);
  24.         gpio_sdio_init();
  25.         /*最少要等待3个sdio——clk时钟周期以及两个apb2时钟周期,才可操作clkcr寄存器*/
  26.         //SDIO->CLKCR|=0xd0;//DIVIDE 210       
  27.         //SDIO->CLKCR|=(1<<9);
  28.         //SDIO->POWER|=3;
  29. //        SDIO->CLKCR|=(1<<8);//ENABLE
  30.        
  31.         hsdio->SDIO_BusWide=SDIO_BusWide_1b;
  32.         hsdio->SDIO_ClockBypass=SDIO_ClockBypass_Disable;
  33.         hsdio->SDIO_ClockDiv=210;
  34.         hsdio->SDIO_ClockPowerSave=SDIO_ClockPowerSave_Disable;
  35.         hsdio->SDIO_HardwareFlowControl=SDIO_HardwareFlowControl_Disable;
  36.         hsdio->SDIO_ClockEdge=SDIO_ClockEdge_Rising;
  37.         SDIO_Init(hsdio);
  38.                 SDIO_SetPowerState(SDIO_PowerState_ON);
  39.         SDIO_ClockCmd(ENABLE);

  40. }
  41. int main()
  42. {
  43.         uint8_t a;
  44.         SDIO_CmdInitTypeDef HSDIO;
  45.         HSDIO.SDIO_Argument=0X0;
  46.         HSDIO.SDIO_CmdIndex=0;
  47.         HSDIO.SDIO_Response=SDIO_Response_No;
  48.         HSDIO.SDIO_Wait=SDIO_Wait_No;
  49.         HSDIO.SDIO_CPSM=SDIO_CPSM_Enable;
  50.         usart_init();
  51.         sdio_init();
  52.         SDIO_SendCommand(&HSDIO);
  53.         while(!(SDIO->STA >>7 &0X01));
  54.        
  55.         a=SDIO_GetCommandResponse();
  56.        
  57.         HSDIO.SDIO_Argument = 0X1AA;
  58.   HSDIO.SDIO_CmdIndex = 8;
  59.   HSDIO.SDIO_Response = SDIO_Response_Short;
  60.   HSDIO.SDIO_Wait = SDIO_Wait_No;
  61.   HSDIO.SDIO_CPSM = SDIO_CPSM_Enable;
  62.   SDIO_SendCommand(&HSDIO);
  63.         while(!(SDIO->STA >>7 &0X01));
复制代码

最佳答案

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

已经解决,sdio时钟分频有问题,我理解错sdio时钟源了,导致分频系数太高而没有产生时钟,改为120后正常。并且我今天测了一天的时序,tmd,接错io口了,害我不断和官方程序比对一直cmd线上不产生信号,今晚换了一下逻辑分析仪的引脚,tmd产生了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-16
在线时间
6 小时
 楼主| 发表于 2021-7-26 23:48:46 来自手机 | 显示全部楼层
已经解决,sdio时钟分频有问题,我理解错sdio时钟源了,导致分频系数太高而没有产生时钟,改为120后正常。并且我今天测了一天的时序,tmd,接错io口了,害我不断和官方程序比对一直cmd线上不产生信号,今晚换了一下逻辑分析仪的引脚,tmd产生了。
回复

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1976
金钱
1976
注册时间
2021-4-16
在线时间
505 小时
发表于 2021-7-27 10:02:36 | 显示全部楼层
帮顶   
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4309
金钱
4309
注册时间
2019-9-4
在线时间
896 小时
发表于 2021-7-27 10:52:25 | 显示全部楼层
只看代码其实很难看出来具体哪错了,你参考官方例程对比看下
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-7-16
在线时间
6 小时
 楼主| 发表于 2021-7-28 17:09:09 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 09:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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