標題:
AD9850模塊STM32程序 輸出頻率可調(diào)的正弦波
[打印本頁]
作者:
qxqy080602
時間:
2019-8-17 09:18
標題:
AD9850模塊STM32程序 輸出頻率可調(diào)的正弦波
前些天由于某種原因,收集了點AD9850的資料
附上自己寫的AD9850的程序,供大家參考,輸出的是頻率可調(diào)的正弦波
單片機源程序如下:
/********************************************
*********************************************/
#include "DA9850.h"
/******************************************
@函數(shù):void GPIO_Configuration(void)
@功能:AD9850對應(yīng)管腳的初始化
@返回值:無
@參數(shù):無
@備注: 這里不需要更改
*******************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
DA9850_GPIO_PeriphClkCmd( DA9850_GPIO_CLK ,ENABLE);
GPIO_InitStructure.GPIO_Pin =FQUD_GPIO_Pin |Data_GPIO_Pin |WCLK_GPIO_Pin |RESET_GPIO_Pin ;
GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP ;
GPIO_Init(DA9850_GPIO_PORT ,&GPIO_InitStructure);
}
/********************************************
@函數(shù):void RCC_Configuration(void)
@功能:RCC初始化
@返回值:無
@參數(shù):無
@備注:這個函數(shù)可以注釋掉,頻率震蕩會增加
*********************************************/
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)
{}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource()!=0x08)
{}
}
}
/*********************************************
@函數(shù):void AD9850_Reset( void )
@功能: AD9850復(fù)位
@返回值:無
@備注:無
@參數(shù):無
*********************************************/
void AD9850_Reset( void )
{
AD9850_WCLK_L;
AD9850_FQUD_L;
//rest 信號
AD9850_RESET_L;
AD9850_RESET_H;
AD9850_RESET_L;
//WCLK信號
AD9850_WCLK_L;
AD9850_WCLK_H;
AD9850_WCLK_L;
//FQUD信號
AD9850_FQUD_L;
AD9850_FQUD_H;
AD9850_FQUD_L;
}
/*********************************************************
@函數(shù):void ad9850_wr_serial(unsigned char w0,float freq)
@功能:AD9850輸出正弦波
@返回值:無
@參數(shù):w0:w0為 一變量,不用管。
frep:跟輸出頻率直接掛鉤,單位為Khz
@備注:無
**********************************************************/
void AD9850_wr_serial(unsigned char w0,float frep)
{
unsigned char i,w;
long int y = frep *(0x20C49BA)/1000;
//寫W4數(shù)據(jù)
w=(y>>=0);
for(i=0;i<8;i++)
{
if(((w>>i)&0x01))
{
AD9850_Data_H;
}
else
{
AD9850_Data_L;
}
AD9850_WCLK_H;
AD9850_WCLK_L;
}
//寫W3數(shù)據(jù)
w=(y>>8);
for(i=0;i<8;i++)
{
if(((w>>i)&0x01))
{
AD9850_Data_H;
}
else
{
AD9850_Data_L;
}
AD9850_WCLK_H;
AD9850_WCLK_L;
}
//寫W2數(shù)據(jù)
w=(y>>16);
for(i=0;i<8;i++)
{
if(((w>>i)&0x01))
{
AD9850_Data_H;
}
else
{
AD9850_Data_L;
}
AD9850_WCLK_H;
AD9850_WCLK_L;
}
//寫W1數(shù)據(jù)
w=(y>>24);
for(i=0;i<8;i++)
{
if(((w>>i)&0x01))
{
AD9850_Data_H;
}
else
{
AD9850_Data_L;
}
AD9850_WCLK_H;
AD9850_WCLK_L;
}
//寫W0數(shù)據(jù)
w=w0;
for(i=0;i<8;i++)
{
if(((w>>i)&0x01))
{
AD9850_Data_H;
}
else
{
AD9850_Data_L;
}
AD9850_WCLK_H;
AD9850_WCLK_L;
}
//移入使能
AD9850_FQUD_H;
AD9850_FQUD_H;
}
復(fù)制代碼
所有資料51hei提供下載:
AD9850.7z
(175.5 KB, 下載次數(shù): 86)
2019-8-18 00:54 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2019-8-18 00:55
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
鵬博士PBs
時間:
2019-8-18 09:06
資源不全 不太完整哦
作者:
aaaaaa。
時間:
2019-10-26 20:52
樓主程序挺好的
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1