SPI设置
注意,虽然手册上CPOL(CLK空闲时电平)为低,但实测是是高电平
连接
SYNC 为片选引脚,使用时拉低
FSE/PSE为频率与相位寄存器选择,均拉低即可
void SPI_Write_16Bits(uint16_t transdata) { csset(); uint16_t arrofdata[1]; arrofdata[0]=transdata; HAL_SPI_Transmit(&hspi1, (uint8_t* )arrofdata, 1, HAL_MAX_DELAY); csreset(); }
频率设置
由于输入为十六位数据,而频率设置为28位,故传输两次数据
xx +后14位
xx +前14位
xx为频率寄存器的标志,10为寄存器1,01为寄存器0
例:传输数据100100100100100100
传入寄存器1
则传输
10+00100100100100
10+00000000001001
频率与传入的值通过拟合后为x*179/50
int t=123456;//频率值 uint16_t a=0x8000,b=0x8000; t=t*179/50; if(t>16383){
b|=(((t>>14)<<14)^t); a|=(t>>14);} else b|=t; //处理输入的两次值 HAL_Delay(1000); SPI_Write_16Bits(0x2100); SPI_Write_16Bits(0XC000); SPI_Write_16Bits(0x2100);//init
SPI_Write_16Bits(0x2800);//选择寄存器1 SPI_Write_16Bits(b); SPI_Write_16Bits(a); SPI_Write_16Bits(0x2808);//选择寄存器1输出
由于int范围,t最高10M,在低于10hz时误差较大