STM32F103RCT6驱动AD7705(cubeide)

 首先在cubeide上配置spi,使用spi1,由于正点开发板上的nr24l01与ad7705正好相同,因此根据引脚配置PA1为DRDY,PC4为CS片选


根据手册上所写,配置寄存器初始化

uint8_t commue(uint8_t Dst_Addr)
{uint8_t RXdata;
  HAL_SPI_TransmitReceive(&hspi1,&Dst_Addr,&RXdata,1, 1000);
   return RXdata;
}
void Init_AD7705(void)
{
   for(int i=0;i<150;i++)commue(0xff);//持续DIN高电平写操作,恢复AD7705接口
    HAL_Delay(1);
    commue(0x20); /* 选择时钟寄存器*/
    HAL_Delay(1);
    commue(0x0c); /* 配置时钟寄存器*/
    HAL_Delay(1);
    commue(0x10); /*选择设置寄存器*/
    HAL_Delay(1);
    commue(0x44);/*配置设置寄存器 */
}

读取通道一数据

uint16_t GetData7705_CH1(void)
{
    uint16_t DataL = 0,DataH = 0;
    HAL_Delay(1);
    commue(0x38);   //选中CH1数据寄存器读 
   while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1)==GPIO_PIN_SET){;}
    ////待数据准备好AdDrdy=0
    delay_us(20);
    DataH=commue(0xff);
    DataL=commue(0xff);
    delay_us(100);
    DataH = DataH << 8;
    return (DataH | DataL);
}

计算出电压值(mv)

float ADC_7705(void)
{
        Init_AD7705();
        float RCH1_16bit=GetData7705_CH1();
        return (RCH1_16bit*5049.0/65535); //算出通道1电压
}

原文地址:https://www.cnblogs.com/SFWR-YOU/p/14706172.html