STM32 GPIO 开漏输出 数据读取

2019-07-16 09:33发布

神们好!
       小弟新手一枚,关于STM32GPIO寄存器操作有些疑问,望大神们不吝赐教。
       具体描述:1、我做DS1302实验,对端口分别设置为2个推免1个开漏输出,时钟芯片上加了4.7K上拉电阻,
       现在的问题是我不知道该怎么来读取数据,因为我试了几种模式都无法得到正确数据。我现在对
      寄存器的操作如下所示:我附图了,这里不能直接粘贴,我还上传了整个工程,希望有兴趣的大神帮我看看。
                2、我在做74HC164和74HC165实验的时候,数据结果没不太对劲,望大神顺带帮我看看呗!
   
QQ截图20140317105043.png QQ截图20140317105025.png
                                                                                                                                                                                     谢谢大家!
22、串行转并行实验.rar (522.31 KB, 下载次数: 61) 35、数字时钟DS1302实验.rar (683.23 KB, 下载次数: 15)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
z00
2019-07-16 19:50
读取DS1302时最好加延时

  1. u8 read_ds1302_byte(u8 dat)
  2. {
  3. u8 i,temp;
  4. GPIOA->ODR&=0xffdf;//GPIOA->ODR&=0<<5; //res=0;
  5. delayms(1);  //_nop_();
  6. GPIOA->ODR&=0xfff7;//GPIOA->ODR&=0<<3;//sclk=0;
  7. delayms(1);  //_nop_();
  8. GPIOA->ODR|=1<<5;  //res=1;
  9. delayms(1);   //_nop_();
  10. for(i=0;i<8;i++)
  11. {

  12.      GPIOA->ODR&=0xffef;//GPIOA->ODR&=0;
  13.   GPIOA->ODR&=0xfff7;//GPIOA->ODR&=0<<3;  //sclk=0;
  14.   if(dat&0x01)
  15.    GPIOA->ODR|=1<<4; //io=dat&0x01;
  16.   dat=dat>>1;
  17.   GPIOA->ODR|=1<<3; //sclk=1;
  18. }
  19. for(i=0;i<8;i++)
  20. {
  21.   temp=temp>>1;
  22.   GPIOA->ODR&=0xfff7;//GPIOA->ODR&=0<<3;   //sclk=0;
  23.   if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4))
  24.   temp=temp|0x80;
  25.   GPIOA->ODR|=1<<3;   //sclk=1;
  26. }
  27. GPIOA->ODR&=0xffdf;//GPIOA->ODR&=0<<5;   //res=0;
  28. delayms(1);  //_nop_();
  29. return temp;
  30. }
复制代码

一周热门 更多>