野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18439|回复: 2

SMT32F103读74HC165D数据错误

[复制链接]
发表于 2017-8-10 15:26:30 | 显示全部楼层 |阅读模式
各位大侠:
       本人在使用74HC165D是出现数据读取失败,求各路大神指导。
问题1:级联原理是否正确?
问题2:数据读取失败错误的原因在哪?求指导!!!
void GPIO_HC165_Input(void)
{
   GPIO_InitTypeDef  GPIO_InitStructure;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;        
   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;     //设置为浮空输入
   GPIO_Init(GPIOC, &GPIO_InitStructure);                //调用GPIO初始化函数
}
void GPIO_HC165_Configuration(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;   
  
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);             //开启AFIO时钟
   GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);        //禁止JTAG功能
   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA  , ENABLE);
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //最大输出速度为50MHz
   GPIO_Init(GPIOA, &GPIO_InitStructure);   
   
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                      //CLK
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //最大输出速度为50MHz
   GPIO_Init(GPIOC, &GPIO_InitStructure);                   //调用GPIO初始化函数  
   GPIO_HC165_Input();
}

  long int GetHC74165(void)
{
  long int  i;
  long int indata=0;
  
  GPIO_WriteBit(GPIOA,GPIO_Pin_15,Bit_RESET);//SH-0;
  Delay_ms(200);
  GPIO_WriteBit(GPIOA,GPIO_Pin_15,Bit_SET);//SH-1;
  Delay_ms(100);
  for(i=0;i<8;i++)
  {
    indata <<=1;
    if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11))indata+=1;
   
    GPIO_WriteBit(GPIOC,GPIO_Pin_10,Bit_RESET);//CLK-0;
    Delay_ms(100);
    GPIO_WriteBit(GPIOC,GPIO_Pin_10,Bit_SET);//CLK-1;
  }
   return indata;
}

74HC级联原理图

74HC级联原理图

与STM32联接IO

与STM32联接IO
回复

使用道具 举报

发表于 2017-8-10 15:49:44 | 显示全部楼层
没有用过这芯片,帮顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-10 16:34:45 | 显示全部楼层
  long int GetHC74165(void)
{
  long int  i;
  long int indata=0;
  GPIO_WriteBit(GPIOA,GPIO_Pin_15,Bit_RESET);//SH-0;
  Delay_ms(10);
  GPIO_WriteBit(GPIOA,GPIO_Pin_15,Bit_SET);//SH-1;
  Delay_ms(20);
  for(i=0;i<8;i++)
  {
    GPIO_WriteBit(GPIOC,GPIO_Pin_10,Bit_RESET);//CLK-0;
    Delay_ms(10);
   
    indata=indata<<1;      //左移一位
    if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)==1)
    {
      indata=indata+1;  
    }     
     GPIO_WriteBit(GPIOC,GPIO_Pin_10,Bit_SET);//CLK-1;
     Delay_ms(10);
  }
   return(~indata);  
}单块74HC165D读取正确了,但是级联的数什么都读不回来。(i<8时读正确,当i<16时数据就不正确定了) 求指导
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 19:02 , Processed in 0.040642 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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