初级会员

- 积分
- 106
- 金钱
- 106
- 注册时间
- 2014-8-20
- 在线时间
- 22 小时
|
20金钱
本帖最后由 漫天WPF飞雪 于 2016-5-5 17:48 编辑
我用Si4112芯片 stm32模拟的SPI 来写程序,但是输出频率总是有误差;我要得到391MHz的频率 ,但是输出的是333MHz。
请看下我的代码:请哪位大神帮忙指点下。
int main(void)
{
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
SPI_GPIO_Config();
SET_POWERD;
//SPI_init();
delay_ms(100);
Si4112_SendData(0x00001404,0x00); //register 0: Auxiliary Output set low,
delay_ms(50); //VCO frequency/2,KPs=1,AUTOPDB=0;
Si4112_SendData(0x00000002,0x02); //register 2:IF synthesizer on.
delay_ms(50);
Si4112_SendData(0x0000030E,0x05); //register 5:N-Divider for IF Synthesizer:782
delay_ms(50);
Si4112_SendData(0X00000014,0x08); //register 8:R-Divider for IF Synthesizer:20
delay_ms(50);
while (1)
{
};
}
void Si4112_SendData(uint32 dat,uint8 addr)
{
uint32 sedata;
uint8 i;
sedata = ((dat << 4) | (addr & 0x0F)); // êy¾Y + μØÖ·
sedata <<= 10; // ×óòÆ10λ
SET_SEN;
delay_us(200);
CLEAR_SCLK;
delay_us(200);
SDATA=0;
CLEAR_SEN;
for(i = 0;i < 22;i++)
{
if(sedata & 0x80000000)
{
SDATA = 1;
}
else
{
SDATA = 0;
}
delay_us(200);
SET_SCLK; // éÏéyÑØêy¾YËø′æ
delay_us(200);
CLEAR_SCLK;
delay_us(200);
sedata <<= 1;
}
SET_SEN;
}
|
最佳答案
查看完整内容[请看2#楼]
就我的经验,
不论51、AVR、PIC、ARM,SPI只有8位和16位两种位宽度,
32位肯定没有。
所以,芯片肯定要考虑这种情况。
换句话说,8位操作一定能正常工作。
至于高16、低16位,肯定是后者;
但问题是:你设置了几位?如果是8位就另说了。
|