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電壓 }

浙公網安備 33010602011771號