打印
[STM32F4]

使用STM32F4O7VET6的IO驱动74HC595D来控制LED的问题

[复制链接]
1620|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 wang12zhe 于 2014-8-9 11:02 编辑

我使用STM32F4O7VET6的IO驱动74HC595D来控制LED,但是始终不成功,请大侠帮忙看看哪里问题




我的电路图路上

源码如下:

void LED_init(void)
{
//SPI_InitTypeDef  SPI_InitStruct;
GPIO_InitTypeDef GPIO_InitStructure;

//使用SPI2控制74HC595D,进而实现对LED的控制
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC |RCC_AHB1Periph_GPIOE,ENABLE); //管脚时钟

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  // WDI  外部看门引脚PC0
        GPIO_Init(GPIOC, &GPIO_InitStructure);  
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;  // POWERONRelay  PC4
        GPIO_Init(GPIOC, &GPIO_InitStructure);  
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;  //mcuLED        
        GPIO_Init(GPIOE, &GPIO_InitStructure);  

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // SPI2_SRCLR
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;  // SPI2_CLK
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; // SPI2_SLD   这个引脚需要注意
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //SPI2_MOSI   
        GPIO_Init(GPIOB, &GPIO_InitStructure);
//GPIO_ResetBits(GPIOB,GPIO_Pin_12);
  GPIO_SetBits(GPIOB,GPIO_Pin_12);   // SPI2_SRCLR 一直保持高电平

}

void LED_SendByte(u8 byte)//写一个字节的数据
  {
    char j,i;
    GPIO_SetBits(GPIOB,GPIO_Pin_13);  
    for(i=0;i<8;i++)//循环8次把编码传给锁存器
     {  
         j=byte&0x01; //低位在前 ,
      if(0==j)
              {
        GPIO_ResetBits(GPIOB,GPIO_Pin_15); //SPI2_MOSI
              }else
              {
         GPIO_SetBits(GPIOB,GPIO_Pin_15);
              }
        // R=j;
        byte=byte>>1;     //右移一位,取出该字节最低位
        //R=CY;         //将该字节最低位传给R  
       GPIO_ResetBits(GPIOB,GPIO_Pin_14); // SPI2_SLD
       delay_ms(2);
       GPIO_SetBits(GPIOB,GPIO_Pin_14);  // SPI2_SLD       //将数据移入595 ,上升沿
       delay_ms(2);

       // CLK=1;
      }   //将数据写入74HC595D,暂不输出
    }



在main函数你反复调用

                                LED_SendByte(0X55);
               
                         GPIO_ResetBits(GPIOB,GPIO_Pin_13);   // SPI2_CLK
                         delay_ms(2);
                         GPIO_SetBits(GPIOB,GPIO_Pin_13);

               
我理解的74hc595D的操作过程是:
数据在SCK的上升沿通过SER引脚输入
在SRCK上升沿输出,




使用示波器测试74HC595的输出,全部是低电平,

请问是哪里问题

注意  SPI2_SLD  是和595的CLK连在一起的


沙发
zzwj5120| | 2014-10-20 18:37 | 只看该作者
DSN格式的原理图发上来,这图片看不清

使用特权

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

本版积分规则

101

主题

205

帖子

1

粉丝