发 帖  
原厂入驻New
[问答] STM32F04 读取AD7921问题
108 SPI 单片机
分享
最近用到STM32F04单片机通过SPI功能读取AD7921芯片数据,读取到却始终是0.下面是我的代码,各位路过的大神帮忙看看看看看啊。拜托了,已困扰许久。
#define SPI1_PORT       GPIOA
#define PIN_SPI1_CSN    GPIO_Pin_4
#define PIN_SPI1_SCK    GPIO_Pin_5
#define PIN_SPI1_MISO   GPIO_Pin_6
#define PIN_SPI1_MOSI   GPIO_Pin_7
#define SPI1_CSN_L  (SPI1_PORT->BRR  = PIN_SPI1_CSN)
#define SPI1_CSN_H  (SPI1_PORT->BSRR = PIN_SPI1_CSN)


// 初始化
void SPI1_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    SPI_InitTypeDef   SPI_InitStructure;
    //NVIC_InitTypeDef NVIC_InitStructure;

    RCC_AHBPeriphclockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;    //????
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    //????
    //GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;    //??
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
    GPIO_InitStructure.GPIO_Pin = PIN_SPI1_SCK  ;
    GPIO_Init(SPI1_PORT, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;    //????
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    //????
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
    GPIO_InitStructure.GPIO_Pin =  PIN_SPI1_MOSI ;
    GPIO_Init(SPI1_PORT, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin   = PIN_SPI1_MISO;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(SPI1_PORT, &GPIO_InitStructure);
               
    GPIO_PinAFConfig(SPI1_PORT, GPIO_PinSource5, GPIO_AF_0);
    GPIO_PinAFConfig(SPI1_PORT, GPIO_PinSource6, GPIO_AF_0);
    GPIO_PinAFConfig(SPI1_PORT, GPIO_PinSource7, GPIO_AF_0);

    GPIO_InitStructure.GPIO_Pin = PIN_SPI1_CSN;    //?? CSN
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //??
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;    //????
    GPIO_Init(SPI1_PORT, &GPIO_InitStructure);

    SPI_I2S_DeInit(SPI1);   
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;   
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;    //????
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;    //8 ????
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;    //????? SCK ????
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;    //????????
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;    //???? NSS
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;   
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;    //????? MSB ??
    SPI_InitStructure.SPI_CRCPolynomial = 7;    //CRC ??
    SPI_Init(SPI1, &SPI_InitStructure);
    SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_HF);   
    SPI_Cmd(SPI1, ENABLE);
}



uint16_t SPI1_Transfer(uint8_t data)
{
    while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
    //SPI_SendData8(SPI1, data);
    SPI_I2S_SendData16(SPI1, data);
    while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
    //return SPI_ReceiveData8(SPI1);
    return SPI_I2S_ReceiveData16(SPI1);
}


uint16_t Spi_Read_Test()
{
    uint16_t val_0=0;
    uint16_t val_1=0;
    SPI1_CSN_L;
    SPI1_Transfer(0xFF);
    val_0=SPI1_Transfer(0x00);
    SPI1_CSN_H;
}

调用Spi_Read_Test函数 val_0 始终是0,不解啊
0
2019-11-16 14:52:33   评论 分享淘帖 邀请回答

相关问题

1个回答
帮顶一下,坐等大神解答
2019-11-18 10:48:54 1 评论

举报

1 条评论

只有小组成员才能发言,加入小组>>

965个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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