久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2463|回復: 2
打印 上一主題 下一主題
收起左側

AD9834頻率發生器的驅動代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:830387 發表于 2024-8-29 14:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
AD9834頻率發生器是AD公司生產的芯片,以下是驅動代碼,供參考。
/*------------------------------------------------------------------------------------
***********************AD9834驅動程序********************************
***********************STM32固件函數庫V2.0*************************
  ***********************2011.3.29****************************************
------------------------------------------------------------------------------------*/
#ifndef __AD9834_H
#define __AD9834_H
#include "stm32f4xx.h"
#include "main.h"
#define Triangle_Wave            0x2002
#define Sine_Wave                    0x2028
/* AD9834晶振頻率 */
#define AD9834_SYSTEM_COLCK     250000000UL //250M

#define AD9834_FSYNC_SET       HAL_GPIO_WritePin(AD9834_FSYNC_GPIO_Port,AD9834_FSYNC_Pin,GPIO_PIN_SET)//GPIO_SetBits(AD9834_Control_Port ,AD9834_FSYNC)
#define AD9834_FSYNC_CLR       HAL_GPIO_WritePin(AD9834_FSYNC_GPIO_Port,AD9834_FSYNC_Pin,GPIO_PIN_RESET)//GPIO_ResetBits(AD9834_Control_Port ,AD9834_FSYNC)
#define AD9834_SCLK_SET       HAL_GPIO_WritePin(AD9834_SCLK_GPIO_Port,AD9834_SCLK_Pin,GPIO_PIN_SET)//GPIO_SetBits(AD9834_Control_Port ,AD9834_SCLK)
#define AD9834_SCLK_CLR       HAL_GPIO_WritePin(AD9834_SCLK_GPIO_Port,AD9834_SCLK_Pin,GPIO_PIN_RESET)//GPIO_ResetBits(AD9834_Control_Port ,AD9834_SCLK)
#define AD9834_SDATA_SET       HAL_GPIO_WritePin(AD9834_SDATA_GPIO_Port,AD9834_SDATA_Pin,GPIO_PIN_SET)//GPIO_SetBits(AD9834_Control_Port ,AD9834_SDATA)
#define AD9834_SDATA_CLR       HAL_GPIO_WritePin(AD9834_SDATA_GPIO_Port,AD9834_SDATA_Pin,GPIO_PIN_RESET)//GPIO_ResetBits(AD9834_Control_Port ,AD9834_SDATA)
#define AD9834_RESET_SET       HAL_GPIO_WritePin(AD9834_RESET_GPIO_Port,AD9834_RESET_Pin,GPIO_PIN_SET)//GPIO_SetBits(AD9834_Control_Port ,AD9834_RESET)
#define AD9834_RESET_CLR       HAL_GPIO_WritePin(AD9834_RESET_GPIO_Port,AD9834_RESET_Pin,GPIO_PIN_RESET)//GPIO_ResetBits(AD9834_Control_Port ,AD9834_RESET)

#define FREQ_0      0
#define FREQ_1      1

#define DB15        0
#define DB14        0
#define DB13        B28
#define DB12        HLB
#define DB11        FSEL
#define DB10        PSEL
#define DB9         PIN_SW
#define DB8         RESET
#define DB7         SLEEP1
#define DB6         SLEEP12
#define DB5         OPBITEN
#define DB4         SIGN_PIB
#define DB3         DIV2
#define DB2         0
#define DB1         MODE
#define DB0         0
#define CONTROL_REGISTER    (DB15<<15)|(DB14<<14)|(DB13<<13)|(DB12<<12)|(DB11<<11)|(DB10<<10)\
    |(DB9<<9)|(DB8<<8)|(DB7<<7)|(DB6<<6)|(DB5<<5)|(DB4<<4)|(DB3<<3)|(DB2<<2)|(DB1<<1)|(DB0<<0)
/* AD9834函數聲明 */
void AD9834_Write_16Bits(unsigned short data) ;  //寫一個字到AD9834
void AD9834_Select_Wave(unsigned short initdata) ; //選擇輸出波形
void Init_AD9834(void);//初始化配置
void AD9834_Set_Freq(unsigned char freq_number,unsigned int freq) ;//選擇輸出寄存器和輸出頻率值
#endif /* AD9834_H */

//====================AD9834.c======================//
#include "AD9834.h"
#include "delay.h"
unsigned short BackUpFreqValue;
void DelayUs(unsigned int time)
{
    while(time>0)time-=1;
}
/****************************************************************
函數名稱: AD9834_Write_16Bits
功    能: 向AD9834寫入16為數據
參    數: data --  要寫入的16位數據
返回值  : 無
*****************************************************************/
void AD9834_Write_16Bits(unsigned short data)
{
    unsigned char i=0;   
    AD9834_SCLK_SET;
    AD9834_FSYNC_CLR;
    for(i=0 ;i<16 ;i++)
    {
        if(data & 0x8000)
          AD9834_SDATA_SET;
        else
          AD9834_SDATA_CLR;      
        data <<= 1;
        AD9834_SCLK_CLR;
        AD9834_SCLK_CLR;
        AD9834_SCLK_SET;
        AD9834_SCLK_SET;
    }
    AD9834_FSYNC_SET;
}
/***********************************************************************************
函數名稱:AD9834_Select_Wave
功    能:軟件為控制,
    --------------------------------------------------
    IOUT正弦波 ,SIGNBITOUT方波 ,寫FREQREG0 ,寫PHASE0
    ad9834_write_16bit(0x2028)   一次性寫FREQREG0
    ad9834_write_16bit(0x0038)   單獨改寫FREQREG0的LSB
    ad9834_write_16bit(0x1038)   單獨改寫FREQREG0的MSB
    --------------------------------------------------
    IOUT三角波 ,寫PHASE0
    ad9834_write_16bit(0x2002)   一次性寫FREQREG0
    ad9834_write_16bit(0x0002)   單獨改寫FREQREG0的LSB
    ad9834_write_16bit(0x1008)   單獨改寫FREQREG0的MSB
參    數:initdata -- 要輸入的命令
返回值  :無
************************************************************************************/
void AD9834_Select_Wave(unsigned short initdata)
{
    AD9834_FSYNC_SET;
    AD9834_SCLK_SET;
   
    AD9834_RESET_SET;
    AD9834_RESET_SET;
    AD9834_RESET_CLR;
     
    AD9834_Write_16Bits(initdata);
}
/////////////////////////////////////////////////////////////////////////
void DDSInit()
{
    AD9834_Write_16Bits(0x2100);DelayUs(10);
    AD9834_Write_16Bits(0x4000);DelayUs(10);
    AD9834_Write_16Bits(0x4000);DelayUs(10);
    AD9834_Write_16Bits(0xC000);DelayUs(10);//FreqREG0、PhaseREG賦初值0
    AD9834_Write_16Bits(0x2D00);DelayUs(10);
    AD9834_Write_16Bits(0x8000);DelayUs(10);
    AD9834_Write_16Bits(0x8000);DelayUs(10);
    AD9834_Write_16Bits(0xE000);DelayUs(10);//FreqREG1、PhaseREG1賦初值0
}
/****************************************************************
函數名稱: Init_AD9834
功    能: 初始化AD9834控制引腳
參    數: 無
返回值  : 無
*****************************************************************/
void Init_AD9834(void)
{
//  GPIO_InitTypeDef GPIO_InitStructure ;
//  GPIO_InitStructure.GPIO_Pin=AD9834_FSYNC | AD9834_SCLK | AD9834_SDATA | AD9834_RESET ;
//  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz ;
//  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT ;
//    GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
//  GPIO_Init(AD9834_Control_Port ,&GPIO_InitStructure) ;
//   
  AD9834_FSYNC_SET;
  AD9834_SCLK_SET;
    AD9834_RESET_SET;DelayUs(10);
    AD9834_RESET_SET;DelayUs(10);
    AD9834_Write_16Bits(0x2128);
    DelayUs(10);DDSInit();
  AD9834_FSYNC_SET;   
  AD9834_SCLK_SET;
    AD9834_RESET_SET;DelayUs(10);
    AD9834_RESET_SET;DelayUs(10);
    AD9834_Write_16Bits(0x2028);//0x2008|正弦波  0x2002|三角波  0x2028|方波
    DelayUs(10);
    AD9834_Write_16Bits(0xCFFF);//0xC000
    DelayUs(10);
}
/****************************************************************
函數名稱: AD9834_Set_Freq
功    能: 設置頻率值
參    數: freq_number -- 要寫入的平率寄存器(FREQ_0或FREQ_1)
          freq -- 頻率值 (Freq_value(value)=Freq_data(data)*FCLK/2^28)
返回值  : 無
*****************************************************************/
void AD9834_Set_Freq(unsigned char freq_number,unsigned int freq)
{
  unsigned int FREQREG;   
  unsigned short FREQREG_LSB_14BIT;
  unsigned short FREQREG_MSB_14BIT;   
    //freq<<=1;
  FREQREG=(unsigned int)(268435456.0/AD9834_SYSTEM_COLCK*freq);
    //FREQREG=(u32)(1.073741824*freq);
    FREQREG_LSB_14BIT=(unsigned short)FREQREG;
    FREQREG_MSB_14BIT=(unsigned short)(FREQREG>>14);
   
  if(freq_number == FREQ_0)
    {
        FREQREG_LSB_14BIT &= ~(1U<<15);
        FREQREG_LSB_14BIT |= 1<<14;
        FREQREG_MSB_14BIT &= ~(1U<<15);
        FREQREG_MSB_14BIT |= 1<<14;
    }
    else
    {
        FREQREG_LSB_14BIT &= ~(1<<14);
        FREQREG_LSB_14BIT |= 1U<<15;
        FREQREG_MSB_14BIT &= ~(1<<14);
        FREQREG_MSB_14BIT |= 1U<<15;
    }
    if(BackUpFreqValue!=FREQREG_MSB_14BIT)
    {
        AD9834_Write_16Bits(0x2028);//
        AD9834_Write_16Bits(FREQREG_LSB_14BIT);
        AD9834_Write_16Bits(FREQREG_MSB_14BIT);   
        AD9834_Write_16Bits(0x0028);//   
    }
    else
    {
        AD9834_Write_16Bits(FREQREG_LSB_14BIT);        
    }
    BackUpFreqValue=FREQREG_MSB_14BIT;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:1131250 發表于 2024-9-3 11:24 | 只看該作者
使用中有點疑問,能溝通交流一下不?
回復

使用道具 舉報

板凳
ID:830387 發表于 2024-9-5 11:13 | 只看該作者
zcy690828 發表于 2024-9-3 11:24
使用中有點疑問,能溝通交流一下不?

可以的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天射网站 | 黄色大片在线 | 91网站在线看 | 精品国产一区二区在线 | 日韩精品一区二区三区视频播放 | 精品久久久久久18免费网站 | 久久久区 | 激情欧美一区二区三区中文字幕 | 国产精品视频一区二区三区不卡 | 国产91一区二区三区 | 视频一区二区中文字幕日韩 | 欧美精品日韩精品国产精品 | av中文字幕在线 | 欧美在线观看一区 | 一区二区视屏 | 九九热最新地址 | 日本a v在线播放 | 成人不卡| 国产真实乱对白精彩久久小说 | 国产aa| 久久lu| 天天拍天天操 | h片在线免费看 | 国产精品久久午夜夜伦鲁鲁 | 99热热热热 | 欧美日韩久久精品 | 99精品一区二区三区 | 欧美一区免费 | 精品国产91 | 亚洲成人一区二区 | 91电影在线 | 国产精品中文字幕一区二区三区 | 91视频网 | 9191av| 精品亚洲一区二区 | 九热在线 | 午夜免费福利片 | 成人在线免费观看 | 欧美精品日韩精品国产精品 | a免费视频| 亚洲九色 |