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电压 }