我在让tiAFE4300启动ADC测量时遇到问题。 我开始使用一款使用TI的参考设计设计设计的新主板。 正在尝试通过stm32f103rbt6与主板通信。
我设置了SPI模式1,想要使用身体成分测量(BCM)。
我通过ARM PWM信号给4300电路板提供1MHz的安全信号。
这就是发生的情况
1.我无法读取ADC数据结果寄存器。
2. RDY引脚状态保持不变。保持高状态。
INT MAIN ()
{
SystemInit();
UART2_Init();
DelayInit();
PWM_Init();
reset_init();
INIT_SPI1();
resetAFE4300();
initAFE4300();
initBCM();
//
同时(1)
{
IF(GPIO_ReadInputDataBit(GPIOC,PIN_DRDY)== 1){
printf ("register_Name\n\n");
printf ("0x%X\n\n",readRegister (ADC_DATA_Result));
printf ("0x%X\n\n",readRegister (ADC_CONTINT_REGISTER));
printf ("0x%X\n\n",readRegister (MISC1_REGISTER));
printf ("0x%X\n\n",readRegister (MISC2_REGISTER));
printf ("0x%X\n\n",readRegister (device_control_1));
printf ("0x%X\n\n",readRegister (ISW_Matrix));
printf ("0x%X\n\n",readRegister (VSW_Matrix));
printf ("0x%X\n\n",readRegister (IQ) MODE_ENABLE);
printf ("0x%X\n\n",readRegister (weight_scale_control));
printf ("0x%X\n\n",readRegister (BCM_DAC_FREQ));
printf ("0x%X\n\n",readRegister (device_control_2));
printf ("0x%X\n\n",readRegister (ADC_CONTINT_REGISTER_2));
printf ("0x%X\n\n",readRegister (MISC3_REGISTER));
}
否则,如果(GPIO_ReadInputDataBit(GPIOC,PIN_DRDY)== 0){
//printf ("%0x\n\n",readRegister (ADC_DATA_Result));
printf ("低\n\r");
}
DelayMs(100);
}
}
void reset_init(void){
GPIO _输入类型Def GPIO _输入结构;
//GPIO_PinRemapConfig (GPIO_Remap_SWJ_NoJTRST,启用);
//GPIO_PinRemapConfig (GPIO _Remap_SWJ_JTAGDisable,启用);
/*启用GPIO时钟*/
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,启用);
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC,启用);
/*配置GPIO引脚*/
GPIO _InitStructure.GPIO针脚= PIN_RESET;
GPIO _InitStructure.GPIO模式= GPIO模式输出PP;
GPIO _InitStructure.GPIO _速度= GPIO _速度_50MHz;
GPIO_Init (GPIOC,&GPIO _InitStructure);
GPIO _InitStructure.GPIO针脚= SPI_CS_PIN;
GPIO _InitStructure.GPIO模式= GPIO模式输出PP;
GPIO _InitStructure.GPIO _速度= GPIO _速度_50MHz;
GPIO _初始化(GPIOA,&GPIO _初始结构);
GPIO _InitStructure.GPIO针脚= PIN_DRDY;
GPIO _InitStructure.GPIO模式= GPIO模式IPD;
GPIO _InitStructure.GPIO _速度= GPIO _速度_50MHz;
GPIO_Init (GPIOC,&GPIO _InitStructure);
//
GPIO设置位(GPIOA, GPIO引脚_4);
}
UINT32_t RDY_READ(void){
返回GPIO_ReadInputDataBit(GPIOC,PIN_DRDY);
}
void reset_high (void){
//GPIOA->BSRR = PIN_RESET;
GPIO设置位(GPIOC,PIN_RESET);
}
void reset_low (void){
//GPIOA->BRR = PIN_RESET;
GPIO重置位(GPIOC,PIN_RESET);
}
void resetAFE4300 (void){
reset_low();
//printf ("111");
DelayMs(100);
reset_high ();
}
主模式的void init_SPI1(void){//
GPIO _输入类型Def GPIO _输入结构;
SPI_InitTypeDef SPI_InitStructure;
// gPIO_StructInit (& gPIO_InitStructure);
// SPI_StructInit (& SPI_InitStructure);
/*启用GPIOs时钟*/
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,启用);
/*启用SPI时钟*/
RCC_APB2PeriphClockCmd (RCC_APB2Periph_SPI1,启用);
/*配置SPI SCK引脚*/
GPIO _InitStructure.GPIO针脚= SPI_SCK_PIN | SPI_MOSI_PIN | SPI_Miso_PIN;
GPIO _InitStructure.GPIO模式= GPIO模式_AF_PP;
GPIO _InitStructure.GPIO _速度= GPIO _速度_50MHz;
GPIO _初始化(GPIOA,&GPIO _初始结构);
/* SPI配置---------------------------------- */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;//32
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1,&SPI_InitStructure);
/*启用SPI */
SPI_Cmd (SPI1,启用);
}
void writeRegister (unsigned char地址,unsigned int数据){
unsigned char firstByte =(unsigned char)(data >> 8);
unsigned char secondByte =(unsigned char)数据;
GPIO重置位(GPIOA, GPIO引脚_4);
SPI_SendByte (地址);
SPI_SendByte(firstByte);
SPI_SendByte (secondByte);
GPIO设置位(GPIOA, GPIO引脚_4);
}
int readRegister (无符号字符地址){
Int spiReceive=0;
UINT8_t spiReceiveFirst = 0;
UINT8_t spiReceiveSecond = 0;
地址=地址和0x1F;//最后5位指定地址
address = address | 0x20;//前3位需要为001才能读取操作码
GPIO重置位(GPIOA, GPIO引脚_4);
SPI_SendByte (地址);
spiReceiveFirst = SPI_SendByte(0x00);
spiReceiveSecond = SPI_SendByte(0x00);
GPIO设置位(GPIOA, GPIO引脚_4);
spiReceivive =(spiReceiveFirst <8);
spiReceive|| spiReceiveSecond;
返回spiReceiv;
}
void initAFE4300 (void)
{
writeRegister (ADC_CONTINT_REGISTER,0x5140);
writeRegister (MISC1_register,0x0000);//
writeRegister (MISC2_REGISTER,0xFFFF);//
writeRegister (device_control_1,0x0004);//关闭两个信号链
writeRegister (ISW_Matrix,0x0000);
writeRegister (VSW_Matrix,0x0000);
writeRegister (IQ_MODE_ENABLE,0x0000);//
writeRegister (weight_scale_control,0x0000);
writeRegister (BCM_DAC_FREQ,0x0040);//
writeRegister (device_control_2,0x0000);
writeRegister (ADC_CONTINT_REGISTER_2,0x0011);
writeRegister (MISC3_register,0x00C0);
}
void initBCM(void)
{
writeRegister (ADC_CONTROL_REGISTER,0x4120);//差分测量模式,32 SPS //4120//C1A0
writeRegister (device_control_1,0x0006);//启动BCM信号链
writeRegister (ISW_Matrix,0x0408);//通道IOUTP1和IOUTN0
writeRegister (VSW_Matrix,0x0408);//通道VSENSEP1和VSENSEN0
writeRegister (ADC_CONTINT_REGISTER_2,0x0063);//ADC选择BCM-I输出的输出
writeRegister (weight_scale_control,0x0000);//增益= 1 DAC偏移= 0 0x603F
writeRegister (BCM_DAC_FREQ,0x0032);
writeRegister (MISC3_register,0x0030);
}
UINT8_t SPI_SendByte (uint8_t数据)
{
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)== RESET;
SPI_I2S_SendData (SPI1, Data);
While (SPI_I2S_GetFlagStatus (SPI1,SPI_I2S_FLAG_RXNE)== RESET);
返回SPI_I2S_ReceiveData(SPI1);
}
任何潜在客户都将有很大帮助