|
基于STM32的AD9851信號源發(fā)生器。
捕獲.PNG (223 KB, 下載次數(shù): 78)
下載附件
2019-7-12 22:59 上傳
0.png (5.98 KB, 下載次數(shù): 73)
下載附件
2019-7-13 06:00 上傳
單片機源程序如下:
- #include "stm32_config.h"
- #include "stdio.h"
- #include "led.h"
- #include "lcd.h"
- #include "AD9851.h"
- #include "key.h"
- #include "timer.h"
- #include "task_manage.h"
- char str[30]; //顯示緩存
- extern u8 _return;
- int main(void)
- {
- u16 i=0;
- MY_NVIC_PriorityGroup_Config(NVIC_PriorityGroup_2); //設(shè)置中斷分組
- delay_init(72); //初始化延時函數(shù)
- LED_Init(); //初始化LED接口
- key_init();
- initial_lcd();
- LCD_Clear();
- delay_ms(300);
- LCD_Refresh_Gram();
-
- //welcome_KW();
- //標(biāo)志排針插線顏色
- //定時器
- Timerx_Init(99,71);
-
- LCD_Clear();
- // LCD_Show_CEStr(0,0,"B");//黑色
-
- AD9851_Init(ad9851_parallel, 1);
- AD9851_Setfq(1000);
- //ad9851_wr_parrel(0,1000);
-
- while(1)
- {
- KeyRead();
- Set_PointFre(Keycode, 0);
- if(_return){_return=0;LCD_Refresh_Gram();}
- KEY_EXIT();
- }
- }
復(fù)制代碼- //***************************************************//
- //函數(shù)1: ad9851_reset() //
- //函數(shù)2: ad9851_reset_serial() //
- //函數(shù)3: ad9851_wr_parrel(unsigned char w0,double frequence)//
- //函數(shù)4: ad9851_wr_serial(unsigned char w0,double frequence)//
- //版本: V1.1 //
- //日期: 2008/12/19 //
- //修改日期: 2008/12/19 //
- //編寫者: xyc5208@163.com) //
- //***************************************************//
- // 子程序說明 //
- //***************************************************//
- //函數(shù)1: ad9851_reset()
- // 復(fù)位ad9851,之后為并口寫入模式
- //函數(shù)2: ad9851_reset_serial()
- // 復(fù)位ad9851,之后為串口寫入模式
- //函數(shù)3: ad9851_wr_parrel(unsigned char w0,double frequence)
- // 并口寫ad9851數(shù)據(jù),w0為ad9851中w0的數(shù)據(jù),frequence
- // 為寫入的頻率
- //函數(shù)4: ad9851_wr_serial(unsigned char w0,double frequence)
- // 串口寫ad9851數(shù)據(jù),w0為ad9851中w0的數(shù)據(jù),frequence
- // 為寫入的頻率
- //需定義的位:
- //ad9851_w_clk ;
- //ad9851_fq_up ;
- //ad9851_rest ;
- //ad9851_bit_data ;
- //例:
- //sbit ad9851_w_clk =P2^2;
- //sbit ad9851_fq_up =P2^1;
- //sbit ad9851_rest =P2^0;
- //sbit ad9851_bit_data =P1^7;
- //***************************************************//
- // 寫數(shù)據(jù)說明 //
- //***************************************************//
- //寫數(shù)據(jù)例:
- // ad9851_reset()
- // wr_lcd02_data(unsigned char x)
- // ad9851_wr_parrel(0x01,1000)
- // ad9851_wr_serial(0x01,1000)
- //***************************************************//
- //---------------------------------------------------//
- // 程序 //
- //---------------------------------------------------//
- # include <AD9851.h>
- # include <stdio.h>
- u8 AD9851_FD=0x00; //倍頻數(shù)
- void (*_AD9851_Setfq)(u8 w0,double frequence);
- //P1為8位數(shù)據(jù)口
- //***************************************************//
- // ad9851復(fù)位(并口模式) //
- //---------------------------------------------------//
- void ad9851_reset()
- {
- ad9851_w_clk=0;
- ad9851_fq_up=0;
- //rest信號
- ad9851_rest=0;
- ad9851_rest=1;
- ad9851_rest=0;
- }
- //***************************************************//
- // ad9851復(fù)位(口模式) //
- //---------------------------------------------------//
- void ad9851_reset_serial()
- {
- ad9851_w_clk=0;
- ad9851_fq_up=0;
- //rest信號
- ad9851_rest=0;
- ad9851_rest=1;
- ad9851_rest=0;
- //w_clk信號
- ad9851_w_clk=0;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //fq_up信號
- ad9851_fq_up=0;
- ad9851_fq_up=1;
- ad9851_fq_up=0;
- }
- //***************************************************//
- // 向ad9851中寫命令與數(shù)據(jù)(并口) //
- //---------------------------------------------------//
- void ad9851_wr_parrel(u8 w0,double frequence)
- {
- u32 w;
- long int y;
- double x;
- //計算頻率的HEX值
- x=4294967295/180;//適合180M晶振/180為最終時鐘頻率(或30M六倍頻)
- //如果時鐘頻率不為180MHZ,修改該處的頻率值,單位MHz !!!
- frequence=frequence/1000000;
- frequence=frequence*x;
- y=frequence;
- //寫w0數(shù)據(jù)
- w=w0;
- AD9851_DataBus=w|(w^0xff)<<16; //w0
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //寫w1數(shù)據(jù)
- w=(y>>24);
- AD9851_DataBus=w|(w^0xff)<<16; //w0
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //寫w2數(shù)據(jù)
- w=(y>>16);
- AD9851_DataBus=w|(w^0xff)<<16; //w0
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //寫w3數(shù)據(jù)
- w=(y>>8);
- AD9851_DataBus=w|(w^0xff)<<16; //w0
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //寫w4數(shù)據(jù)
- w=(y>>=0);
- AD9851_DataBus=w|(w^0xff)<<16; //w0
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //移入始能
- ad9851_fq_up=1;
- ad9851_fq_up=0;
- }
- //***************************************************//
- // 向ad9851中寫命令與數(shù)據(jù)(串口) //
- //---------------------------------------------------//
- void ad9851_wr_serial(u8 w0,double frequence)
- {
- unsigned char i,w;
- long int y;
- double x;
- //計算頻率的HEX值
- x=4294967295/125;//適合180M晶振/180為最終時鐘頻率(或30M六倍頻)
- //如果時鐘頻率不為180MHZ,修改該處的頻率值,單位MHz !!!
- frequence=frequence/1000000;
- frequence=frequence*x;
- y=frequence;
- //寫w4數(shù)據(jù)
- w=(y>>=0);
- for(i=0;i<8;i++)
- {
- ad9851_bit_data=(w>>i)&0x01;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- }
- //寫w3數(shù)據(jù)
- w=(y>>8);
- for(i=0;i<8;i++)
- {
- ad9851_bit_data=(w>>i)&0x01;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- }
- //寫w2數(shù)據(jù)
- w=(y>>16);
- for(i=0;i<8;i++)
- {
- ad9851_bit_data=(w>>i)&0x01;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- }
- //寫w1數(shù)據(jù)
- w=(y>>24);
- for(i=0;i<8;i++)
- {
- ad9851_bit_data=(w>>i)&0x01;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- }
- //寫w0數(shù)據(jù)
- w=w0;
- for(i=0;i<8;i++)
- {
- ad9851_bit_data=(w>>i)&0x01;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- }
- //移入始能
- ad9851_fq_up=1;
- ad9851_fq_up=0;
- }
- void AD9851_IO_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure ;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE); //使能PB,PE端口時鐘
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7 ;
- GPIO_Init(GPIOC ,&GPIO_InitStructure) ;
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4| GPIO_Pin_6;
- GPIO_Init(GPIOA ,&GPIO_InitStructure) ;
- }
- void AD9851_Setfq(double fq)
- {
- if(ad9851_ad9850)
- {
- fq *= 1.44;
- AD9851_FD = 0;
- }
- _AD9851_Setfq(AD9851_FD,fq);
- }
- //***************************************************//
- // 測試程序1000Hz //
- //---------------------------------------------------//
- //輸入:mode ad9851_parallel 并口 ad9851_serial 串口
- //FD:0:不倍頻 1:2倍頻
- void AD9851_Init(u8 mode,u8 FD)
- {
- AD9851_IO_Init();
- AD9851_DataBus=0x00|(~0x00)<<16;
-
- // ad9851_reset_serial();
- // ad9851_wr_serial(0x00,1000000);
- if(mode==ad9851_parallel){_AD9851_Setfq=ad9851_wr_parrel;ad9851_reset();}
- else {_AD9851_Setfq=ad9851_wr_serial;ad9851_reset_serial();}
- if(FD==1)AD9851_FD=0x01;
- AD9851_Setfq(1000000);
- }
復(fù)制代碼
所有資料51hei提供下載:
AD9851模塊-源代碼(STM32)-資料-V0.2.zip
(10.46 MB, 下載次數(shù): 180)
2019-7-12 23:00 上傳
點擊文件名下載附件
AD9851 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|