打印
[STM32F1]

STl论坛再请教----请教调试SN74HC165中出现怪问题请教大家

[复制链接]
1721|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
尘爱1314|  楼主 | 2017-7-7 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

   各位大神,请教下大家调试SN74HC165过程中的问题,程序其实很简单,网上的例子也很多,一年前也在项目中使用过,可以这次打板回来调了2天,其中怀疑过片子的问题重新购买过可以依然读不出数据,一直都是0xFF. 怎么调延时时间都没有,而且通过示波器检测波形都对,程序在单步执行时确定已装入HC165的内部寄存器,而且也移位出来了(调试过程是这样的:在SHLD_165=0前拉低D0脚的电平,然后执行SHLD_165=0,把端口数据转入HC165内部,然后松开D0的电平保持高电平,用示波器测量HC165_SO的波形,单步执行单移位第7步时,下降沿触发了,说明0位的数据被出来了,但我就是读不到。然后又做了个实验,把HC165_SO直接短路到地,读出来了是0.说明线接的没问题,现在是怀疑移出的数据跳变太快了,读不到。后来尝试调节移位的时钟的脉宽,但改变不了出现低电平的脉宽,以及锁存和容许移位的SHLD_165=0到1的脉宽,都改变不了输出低电平的脉宽),以下附上程序,原理图,测试的波形。麻烦各位解惑下,非常感谢大家。
下面的波形是移位到第7位时触发的信号:



移位的时钟信号:



   各位大神,请教下大家调试SN74HC165过程中的问题,程序其实很简单,网上的例子也很多,一年前也在项目中使用过,可以这次打板回来调了2天,其中怀疑过片子的问题重新购买过可以依然读不出数据,一直都是0xFF. 怎么调延时时间都没有,而且通过示波器检测波形都对,程序在单步执行时确定已装入HC165的内部寄存器,而且也移位出来了(调试过程是这样的:在SHLD_165=0前拉低D0脚的电平,然后执行SHLD_165=0,把端口数据转入HC165内部,然后松开D0的电平保持高电平,用示波器测量HC165_SO的波形,单步执行单移位第7步时,下降沿触发了,说明0位的数据被出来了,但我就是读不到。然后又做了个实验,把HC165_SO直接短路到地,读出来了是0.说明线接的没问题,现在是怀疑移出的数据跳变太快了,读不到。后来尝试调节移位的时钟的脉宽,但改变不了出现低电平的脉宽,以及锁存和容许移位的SHLD_165=0到1的脉宽,都改变不了输出低电平的脉宽),以下附上程序,原理图,测试的波形。麻烦各位解惑下,非常感谢大家。
下面的波形是移位到第7位时触发的信号:



移位的时钟信号:


程序入下:

void HC_74165Init(void){
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);
                                                      //HC165 CLK   //HC165 SH
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;        
    GPIO_Init(GPIOD, &GPIO_InitStructure);        
        
        
        
                                                //HC-SO
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD; ; //GPIO_Mode_IPU;        
    GPIO_Init(GPIOA, &GPIO_InitStructure);               
}


u8 Read_HC165(void)
{
        u8 i;
        u8 Byte=0;
        u8 Data=0;
        SHLD_165=0;//将外部端口数据装入内部寄存器
        delay_nus(100);
        SHLD_165=1; //准备移位
        delay_nus(100);
        CLK_165=1;
        for(i=0;i<8;i++)
        {
                        
               
                Byte<<=1;        
                Data=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8);
                        printf("%X ",Data);
                Byte|=Data;
                CLK_165=0;
                delay_nus(5000);
                CLK_165=1;
               
        }
        
        return Byte;
        
}









沙发
mmuuss586| | 2017-7-7 12:09 | 只看该作者
时钟信号都不标准,最好改成占空比50%左右

使用特权

评论回复
板凳
尘爱1314|  楼主 | 2017-7-7 12:45 | 只看该作者
mmuuss586 发表于 2017-7-7 12:09
时钟信号都不标准,最好改成占空比50%左右

和这个有关系吗?我觉得没太大关系啊。我改试试,一样的没效果啊

使用特权

评论回复
地板
chenpads| | 2017-7-8 09:42 | 只看该作者
so与MCU之间串个10K电阻试试,我以前也遇到过。

使用特权

评论回复
5
戈卫东| | 2017-7-8 11:44 | 只看该作者
看不到图。

使用特权

评论回复
6
捉虫天师| | 2017-7-9 21:29 | 只看该作者
一片绿油油。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

39

帖子

1

粉丝