最近在调试stm32+ AD7177-2,给AD7177一个50hz的正弦波,stm32用串口接收数据,接收的波形不完整。
这是AD7177的寄存器配置:
主要是配置:
ADC的通道:AIN0(+),AIN1(-)
ADC的输出速率:5000SPS
ADC的转换模式:连续转换;
还有就是,淘宝买的板子,给的例程使用的模拟SPI,没有使用硬件SPI,这对stm32接收有影响吗?
#include "mcp_myspi.h"
#include "delay.h"
#include "sys.h"
#include "stm32f10x_spi.h"
//ÒÔÏÂÊÇSPIÄ£¿éµÄ³õʼ»¯´úÂ룬ÅäÖóÉÖ÷»úģʽ
//SPI¿Ú³õʼ»¯
void AD717x_Send8Bit(uint8_t _data);
uint8_t AD717x_Recive8Bit(void);
void AD717x_WaitDRDY(void);
void AD717x_DelaySCLK(void);
void AD717x_DelayDATA(void);
void AD717x_soft_spi(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* ´ò¿ªGPIOʱÖÓ */
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); // ʹÄÜPA¶Ë¿ÚʱÖÓ
/* ÅäÖü¸¸öÍÆÍêÊä³öIO */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* ÍÆÍìÊä³öģʽ */
GPIO_InitStructure.GPIO_Pin = PIN_SCK;
GPIO_Init(PORT_SCK, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = PIN_DIN;
GPIO_Init(PORT_DIN, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = PIN_CS;
GPIO_Init(PORT_CS, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = PIN_SYNC;
GPIO_Init(PORT_SYNC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /* PIN_DOUT ÉèÖÃΪÊäÈëÉÏÀ */
GPIO_InitStructure.GPIO_Pin = PIN_DOUT;
GPIO_Init(PORT_DOUT, &GPIO_InitStructure);
CS_1();
SCK_1(); /* SPI×ÜÏß¿ÕÏÐʱ£¬ÖÓÏßÊǵ͵çƽ */
DI_1();
SYNC_0;
}
void AD717x_DelaySCLK(void)
{
uint16_t i;
for (i = 0; i < 2; i++);
}
void AD717x_DelayDATA(void)
{
delay_us(10); /* ¡Á?D??¨®3¨´ 6.5uS, ¡ä?¡ä|¨¨?10us */
}
void AD717x_Send8Bit(uint8_t _data)
{
uint8_t i;
AD717x_DelaySCLK();
AD717x_DelaySCLK();
for(i = 0; i < 8; i++)
{
if (_data & 0x80)
{
DI_1();
}
else
{
DI_0();
}
SCK_0();
AD717x_DelaySCLK();
SCK_1();
_data <<= 1;
AD717x_DelaySCLK();
}
AD717x_DelayDATA();
}
uint8_t AD717x_Recive8Bit(void)
{
uint8_t i;
uint8_t read = 0;
AD717x_DelaySCLK();
for (i = 0; i < 8; i++)
{
SCK_1();
AD717x_DelaySCLK();
SCK_0();
read = read<<1;
if (DO_IS_HIGH())
{
read++;
}
AD717x_DelaySCLK();
}
return read;
}
对于手册中的连续读取模式,我是要通过串口发送0x02;0x0080,之后再读取数据吗?
|