本帖最后由 any_014 于 2016-2-22 11:49 编辑  
 
AD7193相关的设置、读写函数,都是找的AD官网上的函数,然后把SPI通讯部分用IO口模拟SPI实现。 
现在读取AD7193内部温度没问题,控制AD7193的GPIO也没问题。 
读AD7193内部差分通道的数据,出错了。 
 
主程序初始化部分,设置了AD7193配置,然后while循环里,每1s读取一次。 
因为ad7193内部有8个通道或者是4个差分通道(此时用的是差分通道),应该先设置打开通道1,然后读取,分两个命令操作。 
 
现在是如果打开通道1,再读取内部数据寄存器,读取的值是实际值的一半; 
如果屏蔽掉打开通道1这个操作,直接读取内部数据寄存器,读取的值是正确的; 
后来发现,不光是打开通道1,只要是涉及ad7193的操作,然后再读取寄存器值,读出来的都是实际值的一半。 
、- int main(void)
 
 - {
 
 -         u32 value_temp;
 
 -         u8 send_value1, send_value2, send_value3, send_value4;
 
  
-         GPIO_Config();                                                            
 
 -         SPI3_Init();                                                              
 
 -         USART1_Config();                                                    
 
 -         TIM3_Config(9999, 7199);                                      
 
 -         WriteToADT7310ViaSPI(0x01,0x00);                       
 
 -         AD7193_GPIO23_ENABLE(1);                                      
 
 -         
 
 -         ADG702_Set(1);                                                               
 
 -         AD5160_Set(100);                                                        
 
 -         ADG738_Set(0x02);                                                       
 
 -         AD7193_RangeSetup(1, AD7193_CONF_GAIN_8);       
 
 -         AD7193_ConfigSetup(1, 0);                                        
 
 -         AD7193_ChannelSelect(AD7193_CH_0);                       
 
  
-         while(1)
 
 -         {
 
 -                 if(flag_1ms == 1)
 
 -                 {
 
 -                         flag_1ms = 0;
 
 -                         
 
 -                         AD7193_ChannelSelect(AD7193_CH_0);        
 
 -                         value_temp = AD7193_SingleConversion();                       
 
 -                         send_value1 = (value_temp * 502)/(0x1000000);                       
 
 -                                             
 
 -                         usart1_send(0xDD);
 
 -                         usart1_send(send_value1);
 
 -                 }
 
 -         }
 
 - }
 
  复制代码 
 | 
加在while循环里就不行。
不过是这句,只要是ad7193相关的函数,加在while循环里,最后读的数就出错。