打印
[STM32F1]

STM32F103操作频率合成器ADF4350-源码

[复制链接]
68|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangjiahao88|  楼主 | 2024-1-12 18:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103操作频率合成器ADF4350
#define set_BIT7(x)                                                                (x|=0x80)
#define set_BIT6(x)                                                                (x|=0x40)
#define set_BIT5(x)                                                                (x|=0x20)
#define set_BIT4(x)                                                                (x|=0x10)
#define set_BIT3(x)                                                                (x|=0x08)
#define set_BIT2(x)                                                                (x|=0x04)
#define set_BIT1(x)                                                                (x|=0x02)
#define set_BIT0(x)                                                                (x|=0x01)

#define clr_BIT7(x)                                                                (x&=0x7F)
#define clr_BIT6(x)                                                                (x&=0xBF)
#define clr_BIT5(x)                                                                (x&=0xDF)
#define clr_BIT4(x)                                                                (x&=0xEF)
#define clr_BIT3(x)                                                                (x&=0xF7)
#define clr_BIT2(x)                                                                (x&=0xFB)
#define clr_BIT1(x)                                                                (x&=0xFD)
#define clr_BIT0(x)                                                                (x&=0xFE)

//CH1
#define ARW_DATA1_H                set_BIT7(P4)
#define ARW_DATA1_L                clr_BIT7(P4)

#define ARW_CLK1_H                set_BIT6(P4)
#define ARW_CLK1_L                clr_BIT6(P4)

#define ARW_LE1_H                set_BIT5(P4)
#define ARW_LE1_L                clr_BIT5(P4)


使用特权

评论回复
沙发
wangjiahao88|  楼主 | 2024-1-12 18:04 | 只看该作者
void Arw1(unsigned char db)
{
    unsigned char i = 0;
    unsigned char value = 0;
    value = db & 0x3f;
    ARW_CLK1_H;
    ARW_LE1_L;
    for(i = 0; i < 6; i++)
    {
        if((value & 0x01) == 0x01)                                //判断高位是否为1,若为1,则数据线发送1;为0,数据线发送0
        {
            ARW_DATA1_H;
        }
        else
        {
            ARW_DATA1_L;
        }
        ARW_CLK1_L;
        value >>= 1;                                                        //衰减输入左移,继续判断高位
        ARW_CLK1_H;                                                                //CLK置高写入数据,写完后LE(锁存信号)置高再拉低,锁存数据输入PE4302;六位串行数据DATA
    }
    ARW_LE1_H;
    ARW_LE1_L;                                                                //LE拉高再置低,PE4302即得到信息                                                */
}

使用特权

评论回复
板凳
wangjiahao88|  楼主 | 2024-1-12 18:05 | 只看该作者
void Arw2(unsigned char db)
{
    unsigned char i = 0;
    unsigned char value = 0;
    value = db & 0x3f;
    ARW_CLK2_H;
    ARW_LE2_L;
    for(i = 0; i < 6; i++)
    {
        if((value & 0x01) == 0x01)                                //判断高位是否为1,若为1,则数据线发送1;为0,数据线发送0
        {
            ARW_DATA2_H;
        }
        else
        {
            ARW_DATA2_L;
        }
        ARW_CLK2_L;
        value >>= 1;                                                        //衰减输入左移,继续判断高位
        ARW_CLK2_H;                                                                //CLK置高写入数据,写完后LE(锁存信号)置高再拉低,锁存数据输入PE4302;六位串行数据DATA
    }
    ARW_LE2_H;
    ARW_LE2_L;                                                                //LE拉高再置低,PE4302即得到信息                                                */
}

使用特权

评论回复
地板
wangjiahao88|  楼主 | 2024-1-12 18:06 | 只看该作者
void Adf1(unsigned char count, unsigned char *buf)
{
    unsigned        char        ValueToWrite = 0;
    unsigned        char        i = 0;
    unsigned        char        j = 0;

    SFRPAGE = CONFIG_PAGE;           // set SFR page before reading or writing

    ADF_CE1_H;
    delay(100);
    ADF_CLK1_L;
    ADF_LE1_L;
    delay(1);

        for(i = count; i>0; i--)
    {

        ValueToWrite = *(buf + i - 1);
        for(j = 0; j < 8; j++)
        {
            if(0x80 == (ValueToWrite & 0x80))
            {
                ADF_DATA1_H;         //Send one to SDO pin
            }
            else
            {
                ADF_DATA1_L;         //Send zero to SDO pin
            }
            delay(1);
            ADF_CLK1_H;
            delay(1);
            ValueToWrite <<= 1;        //Rotate data
            ADF_CLK1_L;
        }
    }
    ADF_DATA1_L;
    delay(1);
    ADF_LE1_H;
    delay(1);
    ADF_LE1_L;
}

使用特权

评论回复
5
wangjiahao88|  楼主 | 2024-1-12 18:06 | 只看该作者
void Adf2(unsigned char count, unsigned char *buf)
{
    unsigned        char        ValueToWrite = 0;
    unsigned        char        i = 0;
    unsigned        char        j = 0;

    SFRPAGE = CONFIG_PAGE;           // set SFR page before reading or writing

    ADF_CE2_H;
    delay(100);
    ADF_CLK2_L;
    ADF_LE2_L;
    delay(1);

        for(i = count; i>0; i--)
    {

        ValueToWrite = *(buf + i - 1);
        for(j = 0; j < 8; j++)
        {
            if(0x80 == (ValueToWrite & 0x80))
            {
                ADF_DATA2_H;         //Send one to SDO pin
            }
            else
            {
                ADF_DATA2_L;         //Send zero to SDO pin
            }
            delay(1);
            ADF_CLK2_H;
            delay(1);
            ValueToWrite <<= 1;        //Rotate data
            ADF_CLK2_L;
        }
    }
    ADF_DATA2_L;
    delay(1);
    ADF_LE2_H;
    delay(1);
    ADF_LE2_L;
}

使用特权

评论回复
6
wangjiahao88|  楼主 | 2024-1-12 18:07 | 只看该作者
void Adf3(unsigned char count, unsigned char *buf)
{
    unsigned        char        ValueToWrite = 0;
    unsigned        char        i = 0;
    unsigned        char        j = 0;

    SFRPAGE = CONFIG_PAGE;           // set SFR page before reading or writing

    ADF_CE3_H;
    delay(100);
    ADF_CLK3_L;
    ADF_LE3_L;
    delay(1);

        for(i = count; i>0; i--)
    {

        ValueToWrite = *(buf + i - 1);
        for(j = 0; j < 8; j++)
        {
            if(0x80 == (ValueToWrite & 0x80))
            {
                ADF_DATA3_H;         //Send one to SDO pin
            }
            else
            {
                ADF_DATA3_L;         //Send zero to SDO pin
            }
            delay(1);
            ADF_CLK3_H;
            delay(1);
            ValueToWrite <<= 1;        //Rotate data
            ADF_CLK3_L;
        }
    }
    ADF_DATA3_L;
    delay(1);
    ADF_LE3_H;
    delay(1);
    ADF_LE3_L;
}

使用特权

评论回复
7
wangjiahao88|  楼主 | 2024-1-12 18:07 | 只看该作者
void Adf4(unsigned char count, unsigned char *buf)
{
    unsigned        char        ValueToWrite = 0;
    unsigned        char        i = 0;
    unsigned        char        j = 0;

    SFRPAGE = CONFIG_PAGE;           // set SFR page before reading or writing

    ADF_CE4_H;
    delay(100);
    ADF_CLK4_L;
    ADF_LE4_L;
    delay(1);

        for(i = count; i>0; i--)
    {

        ValueToWrite = *(buf + i - 1);
        for(j = 0; j < 8; j++)
        {
            if(0x80 == (ValueToWrite & 0x80))
            {
                ADF_DATA4_H;         //Send one to SDO pin
            }
            else
            {
                ADF_DATA4_L;         //Send zero to SDO pin
            }
            delay(1);
            ADF_CLK4_H;
            delay(1);
            ValueToWrite <<= 1;        //Rotate data
            ADF_CLK4_L;
        }
    }
    ADF_DATA4_L;
    delay(1);
    ADF_LE4_H;
    delay(1);
    ADF_LE4_L;
}

使用特权

评论回复
8
wangjiahao88|  楼主 | 2024-1-12 18:07 | 只看该作者
void Adf5(unsigned char count, unsigned char *buf)
{
    unsigned        char        ValueToWrite = 0;
    unsigned        char        i = 0;
    unsigned        char        j = 0;

    SFRPAGE = CONFIG_PAGE;           // set SFR page before reading or writing

    ADF_CE5_H;
    delay(100);
    ADF_CLK5_L;
    ADF_LE5_L;
    delay(1);

        for(i = count; i>0; i--)
    {

        ValueToWrite = *(buf + i - 1);
        for(j = 0; j < 8; j++)
        {
            if(0x80 == (ValueToWrite & 0x80))
            {
                ADF_DATA5_H;         //Send one to SDO pin
            }
            else
            {
                ADF_DATA5_L;         //Send zero to SDO pin
            }
            delay(1);
            ADF_CLK5_H;
            delay(1);
            ValueToWrite <<= 1;        //Rotate data
            ADF_CLK5_L;
        }
    }
    ADF_DATA5_L;
    delay(1);
    ADF_LE5_H;
    delay(1);
    ADF_LE5_L;
}

使用特权

评论回复
9
wangjiahao88|  楼主 | 2024-1-12 18:07 | 只看该作者
void ADF4350Init_1(void)
{
    unsigned char buf[4] = {0, 0, 0, 0};

    buf[3] = 0x00;
    buf[2] = 0x58;
    buf[1] = 0x00;                                //write communication register 0x00580005 to control the progress
    buf[0] = 0x05;                                //to write Register 5 to set digital lock detector
    Adf1(4, buf);

    buf[3] = 0x00;
    buf[2] = 0x90;                                //(DB23=1)The signal is taken from the VCO directly;(DB22-20:4H)the RF divider is 16;(DB19-12:50H)R is 80
    buf[1] = 0x80;                                //(DB11=0)VCO powerd up;
    buf[0] = 0x24;                                //(DB5=1)RF output is enabled;(DB4-3=3H)Output power level is 5
    Adf1(4, buf);

    buf[3] = 0x00;
    buf[2] = 0x00;
    buf[1] = 0x04;                                //(DB14-3:96H)clock divider value is 150.
    buf[0] = 0xB3;
    Adf1(4, buf);

    buf[3] = 0x18;
    buf[2] = 0x02;                                //(DB6=1)set PD polarity is positive;(DB7=1)LDP is 6nS;
    buf[1] = 0x8f;                                //(DB8=0)enable fractional-N digital lock detect;
    buf[0] = 0x42;                                //(DB12-9:7H)set Icp 2.50 mA;
    Adf1(4, buf);                //(DB23-14:1H)R counter is 1

    buf[3] = 0x08;
    buf[2] = 0x00;
    buf[1] = 0x80;                           //(DB14-3:6H)MOD counter is 6;
    buf[0] = 0x11;                           //(DB26-15:6H)PHASE word is 1,neither the phase resync
    Adf1(4, buf);          //nor the spurious optimization functions are being used
    //(DB27=1)prescaler value is 8/9

    buf[3] = 0x07;
    buf[2] = 0x16;
    buf[1] = 0x00;
    buf[0] = 0x00;                                //(DB14-3:0H)FRAC value is 0;
    Adf1(4, buf);                //(DB30-15:140H)INT value is 320;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

462

主题

7478

帖子

29

粉丝