主题中讨论的其他部件: CLOCKPRO
你好。
我能够从寄存器读取和写入数据,但我无法获得此寄存器来提供所需的PLL输出。
我使用16MHz Crystal,这是我用来获得32MHz输出的代码。
我使用的变量为fout = 32MHz,Fvco = 64MHz,P=2 n''= 4*2^2 = 16 Q=16,R =0
while (data!=0x81){//继续读取ID寄存器,直到您读取正确的值
// address =(CDCE925_SLAVE_ADDR<1)&(0b1111.111万);//read=1 write =0首先发送读写
aTxBuffer[0]= 0x00>1|0b1000万;
// aTxBuffer[1]= 0x04;
uINT16_t大小= 1;
HAL_I2C_Master_Transmit (&hi2c1,(uint16_t) CDCE925_Slaver_ADDR<1,(uint8_t*) aTxBuffer,大小,1万);
// HAL_StatusTypeDef status = HAL_I2C_Master_Transmit (&hi2c1,(uint16_t) address,(uint8_t*) aTxBuffer,size,1万);
// 如果(状态!= HAL_OK){
// __NOP ();
// }
地址=(CDCE925_SLAVE_ADDR<1)|(0b0.0001万);//读取
//地址=(CDCE925_SLAVER_ADDR<1)&(0b1111.111万);
// aTxBuffer[0]= 0x00;
// aTxBuffer[1]=(CDCE925_slaver_ADDR<1)|(0b0.0001万);
HAL_I2C_Master_receive (&hi2c1,(uint8_t)地址,(uint8_t*)和数据,110000);
HAL_DELAY (1);
// HAL_GPIO_TogglePin (LD2_GPIO端口,LD2_Pin);
//输入从设备读取数据,然后将其放在该位置以摆脱循环
}
uINT8_t data2 = 0;
uINT8_t data3 = 0;
aTxBuffer[0]= 0x01;//偏移
aTxBuffer[1]= 0b100万;//写入编号
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
Data2 = PLL_I2C_READ (aTxBuffer[0]);
aTxBuffer[0]= 0x02;
aTxBuffer[1]= 0b1011.01万;//设置为crystal
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
UINT8_t data1 = 0;
while (data1!= 0b1011.01万){
Data1 = PLL_I2C_READ (aTxBuffer[0]);
}
aTxBuffer[0]= 0x03;
aTxBuffer[1]= 0b0.001万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
Data2 = PLL_I2C_READ (aTxBuffer[0]);
aTxBuffer[0]= 0x04;
aTxBuffer[1]= 0b1000万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
aTxBuffer[0]= 0x05;
aTxBuffer[1]= 0b100万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
while (data1!= 0b100万){
Data1 = PLL_I2C_READ (aTxBuffer[0]);
}
aTxBuffer[0]= 0x06;
aTxBuffer[1]= 0b110.0001万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
Data2 = PLL_I2C_READ (aTxBuffer[0]);
Data3 = PLL_I2C_READ (0x01);
uINT8_t data13 =0;
aTxBuffer[0]= 0x13;
aTxBuffer[1]= 0b0万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
data13 = PLL_I2C_READ (0x13);
aTxBuffer[0]= 0x14;
aTxBuffer[1]= 0b100.1101万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
while (data1!= 0b100.1101万){
Data1 = PLL_I2C_READ (0x14);
}
aTxBuffer[0]= 0x15;
aTxBuffer[1]= 0b0万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
aTxBuffer[0]= 0x16;
aTxBuffer[1]= 0b0.01万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
aTxBuffer[0]= 0x17;
aTxBuffer[1]= 0b0.01万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
aTxBuffer[0]= 0x18;
aTxBuffer[1]= 0b0万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
aTxBuffer[0]= 0x19;
aTxBuffer[1]= 0b10万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
aTxBuffer[0]= 0x1A;
aTxBuffer[1]= 0b0.001万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
aTxBuffer[0]= 0x1B;
aTxBuffer[1]= 0b0.1万;
PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);
HAL_DELAY (10);
UINT8_t PLL_I2C_READ (uint8_t聚合){
UINT8_t地址;
UINT8_t数据;
UINT8_t aTxBuffer[4]={0};
aTxBuffer[0]=返回| 0b1000万;
地址=(CDCE925_SLAVE_ADDR<<1);
HAL_I2C_Master_Transmit (&hi2c1,(uint8_t)地址,(uint8_t*) aTxBuffer,110000);
地址=(CDCE925_SLAVE_ADDR<1)| 0x01;
HAL_I2C_Master_receive (&hi2c1,(uint8_t)地址,(uint8_t*)和数据,110000);
HAL_DELAY (1);
返回数据;
}
void PLL_I2C_WRITE (uint8_t regr,uint8_t数据){
UINT8_t地址;
UINT8_t aTxBuffer[2];
地址=(CDCE925_SLAVE_ADDR<<1);
aTxBuffer[0]=返回| 0b1000万;
//此处可能是错误命令
aTxBuffer[1]=数据;
HAL_I2C_Master_Transmit (&hi2c1,(uint8_t)地址,(uint8_t*) aTxBuffer,210000);
}
非常感谢您的帮助