十分感谢您的回复,我现在是可以测低频了。但是我发现我100khz的采样率却只能采集10k左右的信号,我百思不得其解,我将我的代码贴在下面希望您能看看。[C] 纯文本查看 复制代码 #include "AD7606.h"
#include "main.h"
#include "gpio.h"
uint16_t adc_now[8];
uint32_t fac_us;
unsigned char Busy;
void AD7606_Reset()//AD7606复位
{
RST_1;
HAL_Delay_us(1);
RST_0;
HAL_Delay_us(1);
}
//初始化函数
void AD7606_Init()//AD7606初始化
{
HAL_Delay(1);
RST_0;
CVA_1;
RD_1;
CS_1;
Read_Dat;
HAL_Delay(1);
}
//读单个字节函数
uint16_t AD7606_ReadByte(void)//读一个字节
{
uint16_t usData = 0;
uint8_t i;
for (i = 0; i < 16; i++)
{
RD_0;
usData = usData << 1;
if(Read_Dat)
{
usData++;
}
RD_1;
}
return usData;
}
//读八个通道数据函数(BUSY拉低后进中断,进中断后就开始读取数据)
void AD7606_Start()
{
CVA_0;
HAL_Delay_us(1);
CVA_1;
HAL_Delay_us(1);
}
void AD7606_Delay(void)
{
for(uint8_t i = 0;i< 20;i++);
}
float GetAdc(void)
{
uint8_t i;
float volt;
uint16_t data[8];
uint8_t fushu_flag = 0;
AD7606_Start();
while(Read_Busy);
CS_0;
for (i = 0; i < 8; i++)
{
data[i] = AD7606_ReadByte();
}
CS_1;
// //单位转换
// if(data[0] >> 15 == 1)
// {
// fushu_flag = 1;
// }
// data[0] &= 0x7fff;
// volt = (data[0] * 10.0) / 32767;
// if(fushu_flag == 1)
// {
// volt = -(10-volt);
// }
return 0;
}
void HAL_Delay_us_init(uint8_t SYSCLK)
{
fac_us=SYSCLK/1000000;
}
void HAL_Delay_us(uint32_t nus)
{
uint32_t ticks;
uint32_t told,tnow,tcnt=0;
uint32_t reload=SysTick->LOAD;
ticks=nus*480;
told=SysTick->VAL;
while(1)
{
tnow=SysTick->VAL;
if(tnow!=told)
{
if(tnow<told)tcnt+=told-tnow;
else tcnt+=reload-tnow+told;
told=tnow;
if(tcnt>=ticks)break;
}
}
} |