打印

STM32驱动74HC595问题

[复制链接]
12442|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hsz9191|  楼主 | 2013-3-29 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用STM32F103VC的三个普通IO口控制四片74HC595的SCK,RCK,SI三个输入线进行工作,按照芯片手册,并且用示波器观察三跟线的时序都没错,结果每次输出端QA~QH的数据都是以发送字节的最后一个bit决定,最后一个bit为1,输出端全部拉高;为0,全部拉低。到底问题出在哪里呢? 代码如下:
PE11连RCK,PE12连SCK,PE13连SI
Set_System();
GPIO_Configuration();
USART_Configuration();
KeyGPIO_Init();                                                                                         //PE11,PE12,PE13全设为推挽式输出
GPIO_ResetBits(GPIOE, GPIO_Pin_12);
GPIO_ResetBits(GPIOE, GPIO_Pin_11);
while(k--)
{
        GPIO_ResetBits(GPIOE, GPIO_Pin_11);                      //拉低RCK
        for(j=0;j<4;j++)
        {
                Data_Byte = SI_Buf4[j];
                for(i=0;i<8;i++)
                {
                        GPIO_ResetBits(GPIOE, GPIO_Pin_12);          //拉低SCK
                        if((Data_Byte&0x01)==0x01)               
                        GPIO_SetBits(GPIOE, GPIO_Pin_13);
                        else                                        
                        GPIO_ResetBits(GPIOE, GPIO_Pin_13);       
                        Delay(SCK_DELAY);
                        GPIO_SetBits(GPIOE, GPIO_Pin_12);        //拉高SCK
                        Data_Byte = Data_Byte>>1;                                //数据右移,低位先输出
                        Delay(SCK_DELAY);
                }
                GPIO_ResetBits(GPIOE, GPIO_Pin_12);               
        }
        GPIO_SetBits(GPIOE, GPIO_Pin_11);
}
沙发
woode| | 2013-4-30 21:41 | 只看该作者
将程序改成如下:            
             for(i=0;i<8;i++)
                {
                        GPIO_ResetBits(GPIOE, GPIO_Pin_12);         
                        if((Data_Byte&0x08)==0x08)               
                        GPIO_SetBits(GPIOE, GPIO_Pin_13);
                        else                                       
                        GPIO_ResetBits(GPIOE, GPIO_Pin_13);      
                        Delay(SCK_DELAY);
                        GPIO_SetBits(GPIOE, GPIO_Pin_12);      
                        Data_Byte = Data_Byte<<1;                                
                        Delay(SCK_DELAY);
                }

使用特权

评论回复
板凳
shizaigaole| | 2013-4-30 23:02 | 只看该作者
除了初始化以外,
一般对外设的操作,
还是用寄存器比较好

使用特权

评论回复
地板
lin34337151| | 2013-5-1 16:33 | 只看该作者
硬件怎么接的?io口怎么配置?电平不匹配一般加上拉配置成浮空,我接过八片应该没问题,先把时钟调慢点,没问题再加快时钟。

使用特权

评论回复
5
hawksabre| | 2013-5-1 18:35 | 只看该作者
楼主   帮你顶一个  看看有没有高手能够解决这个问题   顶一个

使用特权

评论回复
6
grasswolfs| | 2013-5-2 13:58 | 只看该作者
1:看看GPIO配置,换三个IO
2:时钟调慢些,增加延时看看
3:看看595管脚配置,先用1个试试
4:做个仿真

使用特权

评论回复
7
cjhk| | 2013-5-2 18:55 | 只看该作者
问题解决了吗  楼主   应该问题不大吧

使用特权

评论回复
8
hsz9191|  楼主 | 2013-6-8 17:09 | 只看该作者
问题出在硬件上,STM32的IO口接到74HC595上的排阻过大,我是从10K改成330,问题就解决了,代码是没问题的。
多谢各位高人前来指点,小弟不胜感激!

使用特权

评论回复
9
zeluo| | 2013-6-8 20:49 | 只看该作者
硬件这一块的问题解决了就好   顶一个   不错哦

使用特权

评论回复
10
grasswolfs| | 2013-6-9 09:09 | 只看该作者
hsz9191 发表于 2013-6-8 17:09
问题出在硬件上,STM32的IO口接到74HC595上的排阻过大,我是从10K改成330,问题就解决了,代码是没问题的。 ...

嗯,595的输入阻抗不够大

使用特权

评论回复
11
zhangbaosen| | 2017-4-9 11:19 | 只看该作者
io口到74hc595需要接电阻?

使用特权

评论回复
12
zhangbaosen| | 2017-4-9 11:19 | 只看该作者
hsz9191 发表于 2013-6-8 17:09
问题出在硬件上,STM32的IO口接到74HC595上的排阻过大,我是从10K改成330,问题就解决了,代码是没问题的。 ...


io口到74hc595需要接电阻么?

使用特权

评论回复
13
LONGSHEN1| | 2018-8-24 15:49 | 只看该作者
这里有个参考设计,stm32f4通过hc595控制96个LED,可通过修改数组数据修改点亮或者熄灭任意一个LED灯

//初始化hc595参数

uint8_t hc595_buf1[6] = {0x00,0x00,0x00,0x00,0x00,0x00,};

uint8_t hc595_buf2[6] = {0x00,0x00,0x00,0x00,0x00,0x00,};

上面两个数组每一位代表一个灯,假如灯是低电平点亮,该位就置0,否则置1,

12个字节,一共96个bit位,代表96个灯,可无限扩展灯的数量

http://www.cirmall.com/circuit/9921/stm32f4%E9%80%9A%E8%BF%87hc595%E6%8E%A7%E5%88%B696%E4%B8%AALED#/details

使用特权

评论回复
14
stm32jy| | 2018-8-24 18:26 | 只看该作者
595好像类似SPI吧,学习51的时候用过

使用特权

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

本版积分规则

2

主题

8

帖子

0

粉丝