肚子疼吃什么食物好| 窝沟封闭什么意思| 耐力是什么意思| 桂圆什么时候上市| 脖子长痘痘是因为什么原因| 玉镯子断了有什么预兆| 西瓜禁忌和什么一起吃| 月经为什么叫大姨妈| 早射吃什么药| pos是什么意思| 什么是淋巴结| 站着说话不腰疼什么意思| 好事多磨是什么意思| 直言不讳是什么意思| 教师的职责是什么| 高锰酸钾治疗男性什么病| 口腔溃疡什么症状| upupup是什么意思| pbs是什么| 切除扁桃体有什么好处和坏处| 大脑记忆力下降是什么原因| 心肝火旺吃什么中成药| 氢是什么| 什么是氧化剂| 唐字五行属什么| 盆腔炎做什么检查| 女人右眼跳是什么预兆| 邦字五行属什么| 圣大保罗属于什么档次| 右眼一直跳是什么原因| 喝冰糖水有什么好处和坏处| 广州有什么山| 清道夫鱼为什么不能吃| 腾空是什么意思| 食积是什么意思| 染色体异常是什么原因导致的| 炖牛肉放什么料| 狗嚎叫有什么预兆| 丧偶是什么意思| 肾水不足是什么意思| 女人喜欢什么样的阴茎| 切勿是什么意思| 椰浆是什么| 年轻人头晕是什么原因| 轻度脂肪肝什么意思| 尿酸升高是什么原因| 孩子病毒感染吃什么药| 气管炎咳嗽吃什么药最有效| 梦到自己快要死了是什么意思| 弓箭是什么时候发明的| 什么品牌的奶粉最好| 脑缺血有什么症状| 1921年中国发生了什么| 评估是什么意思| 印字五行属什么| 没什么好怕| 两个禾念什么| 什锦菜是什么菜| 多愁善感什么意思| 家母是什么意思| 6月26什么星座| 廿是什么意思| 非球面镜片是什么意思| 梦见青蛙是什么意思| 小暑是什么意思| 血管瘤有什么危害吗| ctp是什么意思| 吃什么预防脑梗| 肺部挂什么科| 长孙皇后为什么叫观音婢| 为什么静脉曲张| 5岁属什么生肖| 脑白质脱髓鞘改变是什么意思| 苹果为什么叫苹果| 杜牧号什么| 一切就绪是什么意思| 看心脏病挂什么科| 情感是什么意思| rbp是什么意思| 胃药吃多了有什么副作用| 地接是什么意思| 抖腿是什么毛病| 拔冗是什么意思| 凭什么姐| 奥美拉唑什么时候吃最好| 阴毛变白是什么原因| 低钾会出现什么症状| 急性心肌炎有什么症状| 肾阴虚吃什么食物最好| 生命线分叉是什么意思| 清明节的习俗有什么| 孩子流黄鼻涕吃什么药效果好| 早上起来不晨勃是什么原因| 君子兰什么时候开花| 代谢慢是什么原因引起的| ky是什么意思| 糖霜是什么| 七月初八是什么星座| out什么意思| 禳是什么意思| 女生大姨妈推迟是什么原因| 每逢佳节倍思亲的上一句是什么| mac代表什么| 璠字取名寓意什么| 天丝是什么材质| 孩子为什么不听话| 无花果什么品种最好吃| 拔智齿后需要注意什么| 世界第一大河是什么河| 在什么中间| 胆囊胆固醇结晶是什么| 嘴巴经常长溃疡是什么原因| 鼻塞是什么原因| 1110是什么星座| 黄金豆是什么豆| 忧郁是什么意思| gi值是什么| 嗓子痛挂什么科| 油嘴滑舌是什么意思| 生菜为什么会苦| 本命年红内衣什么时候穿| 斑鱼是什么鱼| 喝黑苦荞茶有什么好处和坏处| 为什么会有霉菌性阴道炎| ktv是什么意思| 顺子是什么意思| 不想吃饭吃什么药| 头发软化和拉直有什么区别| 吃什么养肝护肝| 泄是什么意思| 豆花是什么| 萤火虫为什么越来越少| 胸部什么时候停止发育| 小孩发育迟缓是什么原因造成的| 每天喝柠檬水有什么好处| 立竿见影是什么意思| 什么的树叶| 什么是自我| 眼花缭乱是什么意思| 低密度脂蛋白偏高吃什么药| 治疗带状疱疹用什么药最好| 嗓子疼吃什么药见效最快| 爽是什么结构| 马驹是什么意思| 破瓦法是什么| 食欲亢进是什么意思| 什么是血脂| 晚上喝牛奶有什么好处和坏处| swisse是什么意思| 秋葵什么人不能吃| 苦荞茶喝了有什么好处| 结婚40年是什么婚| feat什么意思| 痛风吃什么药最好| 卖什么小吃简单挣钱| 海螺不能和什么一起吃| 干你什么事| 血精和精囊炎吃什么药| 阴阳两虚用什么药| 诸葛亮属相是什么生肖| 脚趾抽筋是什么原因| 淋巴结是什么原因引起的| 奔现是什么意思| 男人有泪痣代表什么| 卅什么意思| 什么是暗物质| 11.6号是什么星座| 肩宽适合穿什么样的衣服| 小米粥和什么搭配最好最养胃| 男性生殖系统感染吃什么药| 梦到老房子是什么意思| 尽收眼底是什么意思| 二刷是什么意思| 眼皮重是什么原因| 左眼皮一直跳是什么预兆| 什么如泰山| 吃什么长得高| 月经推迟是什么原因导致的| 回族女人为什么戴头巾| 肌酸激酶什么意思| 猫拉稀吃什么药| 俄罗斯的货币叫什么| 有始无终是什么生肖| 美沙芬片是什么药| 胎元是什么意思| 头麻是什么原因| 唯我独尊指什么生肖| 今年什么时候放暑假| 黄体破裂有什么症状| 尿白细胞弱阳性是什么意思| 切克闹是什么意思| 金银花有什么功效| 1941年是什么年| 梦见和老公吵架是什么意思| 什么是透析治疗| 失责是什么意思| 怀孕周期是从什么时候开始算的| 肺结节吃什么好| 田宅宫代表什么| 天蝎是什么动物| 胃息肉是什么引起的| no是什么| 咳嗽不能吃什么| 鲁班是什么家| 做梦梦到对象出轨是什么意思| 房门什么颜色好看| cst是什么时间| 脾围是什么意思| 土耳其烤肉是用什么肉| 一直发烧不退是什么原因| 卩是什么意思| 不拘是什么意思| 交界性心律是什么意思| 海螺吃什么食物| 心慌意乱是什么意思| 心智是什么意思| 11楼五行属什么| 芙蓉粉是什么颜色| 慵懒是什么意思| 半夜脚抽筋是什么原因| 养心吃什么食物好| 基佬是什么意思| 为什么来月经会拉肚子| 手指头红是什么原因| 知己是什么意思| 拜你所赐什么意思| 吃什么能补肾| 花胶有什么功效与作用| 男生吃菠萝有什么好处| 碎片化是什么意思| 万圣节为什么要送糖果| 山楂干泡水喝有什么功效| 巨蟹跟什么星座最配| 迪丽热巴是什么族| 什么书什么画| 白细胞高吃什么降得快| 皮肤病用什么药膏好| 慢阻肺是什么病| 高血压应该吃什么| 嫦娥住的宫殿叫什么| 黄喉是牛的什么部位| 什么是化学性肝损伤| 糜米是什么米| 什么什么各异| 吐司是什么意思| tg医学上是什么意思| 身主天相是什么意思| 金不换是什么菜| ada是什么意思| 经期吃什么补血| 什么是尘肺病| 头发突然秃了一块是什么原因| 了是什么意思| 汗毛长的女人代表什么| 蓝莓吃了有什么好处| 血红蛋白是什么意思| 候和侯有什么区别| 蛇最怕什么东西| 张学友和张家辉什么关系| 霉菌感染用什么药好| 诺如病毒吃什么药最有效| icu和ccu有什么区别| 滋阴降火吃什么药| 男人勃不起是什么原因造成的| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? STM32 ? 【STM32WBA55CG开发板】过程帖:软件GPIO模拟spi驱动DDS芯片A

共1条 1/1 1 跳转至

【STM32WBA55CG开发板】过程帖:软件GPIO模拟spi驱动DDS芯片AD9834

助工
2025-08-05 23:08:24     打赏
百度 到最后成果没得到多少,反找了一大堆麻烦,这是每一家联盟企业都不愿意看到的。

AD9834是一款75 MHz、低功耗DDS器件,能够产生高性能正弦波和三角波输出。其片内还集成一个比较器,支持产生方波以用于时钟发生。当供电电压为3 V时,其功耗仅为20 mW,非常适合对功耗敏感的应用。

AD9834提供相位调制和频率调制功能。频率寄存器为28位;时钟速率为75 MHz,可以实现0.28 Hz的分辨率。同样,时钟速率为1 MHz时,AD9834可以实现0.004 Hz的分辨率。影响频率和相位调制的方法是通过串行接口加载寄存器,然后通过软件或FSELECT/PSELECT引脚切换寄存器。

AD9834通过一个三线式串行接口写入数据。该串行接口能够以最高40 MHz的时钟速率工作,并且与DSP和微控制器标准兼容。

该器件采用2.3 V至5.5 V电源供电。模拟和数字部分彼此独立,可以采用不同的电源供电;例如,AVDD可以是5 V,而DVDD可以是3 V。

AD9834具有掉电引脚(SLEEP),支持从外部控制掉电模式。器件中不用的部分可以掉电,以将功耗降至低点。例如,在产生时钟输出时,可以关断DAC。

该器件采用20引脚TSSOP封装。

应用

  • 频率刺激/波形产生

  • 频率相位调谐和调制

  • 低功耗RF/通信系统

  • 液体和气流测量

  • 传感器应用:接近度、运动和缺陷检测

  • 测试与医疗设备

使用开发板驱动,GPIO模拟SPI

屏幕截图 2025-08-05 230520.png代码

AD9834.h

#ifndef __AD9834_H 
#define __AD9834_H

#include <stdint.h>
#include "stm32wbaxx_hal.h"  //这里根据芯片的具体信号选择自己的头文件
#include "main.h"
#include "usart.h"
#include "stdio.h"

 /*--------------------- AD9834控制信号 16Bit ---------------------*/
/**
 * @brief 在这部分当中,包括了AD9834大部分控制信号的定义,包括了控制信号的宏定义
 * @useage 使用函数AD9834_Write_16Bits()来写入控制信号,
 *         或者也可以使用AD9834_Select_Wave()来写入(后者通常用于直接使用某种波形)
 */
 //设置基本的波形,默认使用频率寄存器0
#define Triangle_Wave    0x2002 
#define Sine_Wave  0x2008 
#define Square_Wave 0x2028

//设置使用频率寄存器1
#define Sine_Wave_Reg1 0x2808  
#define Square_Wave_Reg1 0x2828 
#define Triangle_Wave_Reg1 0x2802

//设置通过引脚选择发生波形
#define SelectByPin 0x2208  //设置PIN_SW 位,选择通过引脚选择频率寄存器、相位和是否不发生波
//在如上的Pin中,包括FS,PS,RESET,SLEEP四根引脚,根据自己的情况写入

//重新复位AD9834
#define RESET_AD9834 0x2100

//停止AD9834的DAC输出
#define STOP_DAC 0x2040

//进阶操作部分
//如果部署需数据手册,不要贸然使用这一部分
//如果使用这部分,请对各个宏进行 | 的运算操作赋予或者使用~进行清除,否则容易出现问题。
#define AD9834_B28  0x2000  //设置为28位模式
#define AD9834_HLB  0x0100  //设置为高速模式,不要轻易使用
#define AD9834_RESET 0x0100  //复位AD9834
#define AD9834_SLEEP1 0x0080  //设置为睡眠模式1
#define AD9834_SLEEP12 0x0040  //设置为睡眠模式2
#define AD9834_OPBITEN 0x0020  //设置为输出使能
#define AD9834_DIV2 0x0010  //设置为分频模式
#define AD9834_MODE 0x0002  //设置为三角波模式
#define AD9834_SIGN_PIBIT 0x0001  //设置为正弦波模式
#define AD9834_PHASE 0xC000  //设置相位寄存器0
#define AD98er_PHASE1 0xE000  //设置相位寄存器1


//------------------AD9834控制和器件特性------------------//
/**
 * @brief 在这部分中,包括了AD9834的一些特性,包括了AD9834的一些控制引脚和所用时钟
 * @notice 在使用AD9834时,需要根据自己的情况修改这部分的内容
 */

 /* AD9834晶振频率 */
#define AD9834_SYSTEM_COLCK     75000000UL 


/* AD9834 控制引脚 */
#define AD9834_FSYNC  AD9834_FSYNC_Pin    
#define AD9834_SCLK   AD9834_SCLK_Pin			
#define AD9834_SDATA  AD9834_SDATA_Pin 		
#define AD9834_RESET  AD9834_RESET_Pin		
#define AD9834_FS  		AD9834_FS_Pin		
#define AD9834_PS  		AD9834_PS_Pin		

//为兼容标准库,提供如下宏
#define GPIO_SetBits(x,y) HAL_GPIO_WritePin((x),(y),GPIO_PIN_SET)
#define GPIO_ResetBits(x,y) HAL_GPIO_WritePin((x),(y),GPIO_PIN_RESET)

//为了便于操作数据引脚,提供如下宏
#define AD9834_FSYNC_SET   GPIO_SetBits(AD9834_FSYNC_GPIO_Port ,AD9834_FSYNC) 
#define AD9834_FSYNC_CLR   GPIO_ResetBits(AD9834_FSYNC_GPIO_Port ,AD9834_FSYNC) 

#define AD9834_SCLK_SET   GPIO_SetBits(AD9834_SCLK_GPIO_Port ,AD9834_SCLK) 
#define AD9834_SCLK_CLR   GPIO_ResetBits(AD9834_SCLK_GPIO_Port ,AD9834_SCLK) 

#define AD9834_SDATA_SET   GPIO_SetBits(AD9834_SDATA_GPIO_Port ,AD9834_SDATA) 
#define AD9834_SDATA_CLR   GPIO_ResetBits(AD9834_SDATA_GPIO_Port ,AD9834_SDATA) 

#define AD9834_RESET_SET   GPIO_SetBits(AD9834_RESET_GPIO_Port ,AD9834_RESET) 
#define AD9834_RESET_CLR   GPIO_ResetBits(AD9834_RESET_GPIO_Port ,AD9834_RESET) 

//为了便于操作频率等控制引脚,提供如下宏
#define AD9834_FS_SET   GPIO_SetBits(AD9834_FS_GPIO_Port ,AD9834_FS)
#define AD9834_FS_CLR   GPIO_ResetBits(AD9834_FS_GPIO_Port ,AD9834_FS)

#define AD9834_PS_SET   GPIO_SetBits(AD9834_PS_GPIO_Port ,AD9834_PS)
#define AD9834_PS_CLR   GPIO_ResetBits(AD9834_PS_GPIO_Port ,AD9834_PS)

#define AD9834_RST_SET   GPIO_SetBits(AD9834_RESET_GPIO_Port ,AD9834_RESET)
#define AD9834_RST_CLR   GPIO_ResetBits(AD9834_RESET_GPIO_Port ,AD9834_RESET)

/*--------------------- AD9834操作位声明 ---------------------*/
/**
 * @brief 这部分包括了AD9834的一些操作位的声明,包括了AD9834的一些操作位的宏定义
 * @useage 使用函数AD9834_Write_16Bits()来写入控制信号。
 * @notice 如果有不明便的地方,查阅数据手册进行更改
 */

 //频率寄存器的控制位
#define FREQ_0      0 
#define FREQ_1      1 
#define PHASE_0     0
#define PHASE_1     1

//各个位的定义,留空为0
//如果需要使用其他位,请自行添加相关的变量/宏的定义
#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 

//通过操作位的宏定义,可以得到控制信号的值
//可以通过AD9834_Write_16Bits()函数来直接写入控制信号
#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 int data);  //写一个字到AD9834 
void AD9834_Select_Wave(unsigned int initdata); //选择输出波形 
void AD9834_Init(void);  					//初始化配置 
void AD9834_Set_Freq(unsigned char freq_number, unsigned long freq);//选择输出寄存器和输出频率值 

#endif /* AD9834_H */

AD9834.c

/**********************************************************
 功能:75MHz时钟, AD9834正弦波点频输出,范围0-30M(可编辑0-100M),
            方波:50k-5M,三角波:0-10M,扫频默认正弦波 。
 接口:控制接口请参照AD9834.h
 时间:2022/10/08
 版本:0.9
 作者:康威电子(原作者)

 **********************************************************/
#include "AD9834.h" 

 /****************************************************************
 函数名称: AD9834_Write_16Bits
 功    能: 向AD9834写入16为数据
 参    数: data --  要写入的16位数据
 返回值  : 无
 *****************************************************************/

void AD9834_Write_16Bits(unsigned int 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;

        AD9834_SCLK_CLR;
        data <<= 1;
        AD9834_SCLK_SET;
    }
    AD9834_SDATA_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 int initdata)

{

    AD9834_FSYNC_SET;
    AD9834_SCLK_SET;
    AD9834_RESET_SET;
    AD9834_RESET_SET;
    AD9834_RESET_CLR;

    AD9834_Write_16Bits(initdata);

}

/****************************************************************

函数名称: Init_AD9834

功    能: 初始化后将FS和PS引脚设置为低。
参    数: 无

返回值  : 无

*****************************************************************/
// B6 FS  B5 PS    B7 FSY   B8 SCK   B9 SDA B10 RST 

void AD9834_Init()
{
    GPIO_ResetBits(AD9834_FS_GPIO_Port, AD9834_FS);
    GPIO_ResetBits(AD9834_PS_GPIO_Port, AD9834_PS);
}

/****************************************************************

函数名称: AD9834_Set_Freq

功    能: 设置频率值

参    数: freq_number -- 要写入的平率寄存器(FREQ_0或FREQ_1)
          freq -- 频率值,直接填写赫兹,换算公式为: (Freq_value(value)=Freq_data(data)*FCLK/2^28)
                                                //此时FCLK=75MHz,所以Freq_value=Freq_data*75/2^28

返回值  : 无

*****************************************************************/
void AD9834_Set_Freq(unsigned char freq_number, unsigned long freq)
{
    unsigned long FREQREG = (unsigned long)(268435456.0 / AD9834_SYSTEM_COLCK * freq);
    unsigned int FREQREG_LSB_14BIT = (unsigned int)FREQREG;
    unsigned int FREQREG_MSB_14BIT = (unsigned int)(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;
    }
    AD9834_Write_16Bits(FREQREG_LSB_14BIT);
    AD9834_Write_16Bits(FREQREG_MSB_14BIT);
}
//============================================================// 
/*   注:使用时先调用初始化函数初始化IO配置,然后调用AD9834_Select_Wave()选择(基本的三种波形为频率寄存器0)
波形,最后选择频率值即可输出。 */

主函数调用

	AD9834_Init();
	AD9834_Select_Wave(Sine_Wave);//Sine_Wave Square_Wave Triangle_Wave
	AD9834_Set_Freq(FREQ_0, 1000);

效果



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
胆固醇高吃什么食物好 早晨起来手肿是什么原因 勿忘心安是什么意思 血脂高吃什么药最好 来大姨妈适合吃什么水果
手脚发抖是什么原因引起的 开平方是什么意思 什么什么不乐 八四年属什么生肖 6.26什么星座
尿血最坏的病是什么病 什么有成什么 礼拜是什么意思 做梦被杀了是什么征兆 lac是什么意思
高铁二等座是什么意思 食欲不振是什么原因 rush是什么意思 吃什么对肝有好处 瘙痒是什么意思
eb病毒是什么意思hcv9jop2ns4r.cn 红眼病不能吃什么东西hcv9jop4ns8r.cn 手足口病挂什么科hcv8jop2ns7r.cn 桑拓木命是什么意思hcv8jop3ns7r.cn 枸杞和山楂泡水喝有什么功效imcecn.com
76年属什么的生肖hcv8jop4ns5r.cn 初恋是什么hcv9jop1ns8r.cn 81是什么意思hcv7jop9ns4r.cn apf值是什么意思hcv9jop4ns2r.cn 水马是什么hcv8jop8ns5r.cn
阿玛尼手表属于什么档次hcv8jop7ns1r.cn 老是低血糖是什么原因tiangongnft.com rpr是什么检查项目hcv7jop9ns6r.cn 继发性高血压什么意思zhiyanzhang.com 素字五行属什么xinmaowt.com
口腔溃疡什么原因96micro.com 干事是什么职务hcv8jop3ns0r.cn 无机盐包括什么hcv9jop8ns2r.cn 疱疹病毒是什么引起的clwhiglsz.com 用什么药hcv9jop3ns5r.cn
百度