18. AD9833

18.1 简介

  1. DDS信号发生器模块,工作电压为2.3V~5.5V
  2. 可编程波形发生器能够产生正弦波、三角波、方波,频率范围为:0~12.5MHz
  3. 主频时钟为25MHz时,精度为1Hz;主频时钟为
  4. 通过三个串行接口(SDATA、SCLK、FSYNC)写入数据,一个输出信号接口(VOUT)输出波形

18.2 程序逻辑

(1) 初始化对应输出IO口,总共三个IO口

//IO操作
#define AD9833_SDATA  PDout(1)  //SDATA
#define AD9833_SCLK   PDout(3)  //SCLK
#define AD9833_FSYNC  PDout(5)  //FSYNC/*
*********************************************************************************************************
*   函 数 名: AD9833_Init
*   功能说明: 初始化AD9833(相关输出引脚的配置)
*   形    参: 无
*   返 回 值: 无
*********************************************************************************************************
*/
void AD9833_Init(void)
{GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_GPIOD_CLK_ENABLE();   //使能GPIOG时钟//PD1,3,5初始化设置GPIO_Initure.Pin=GPIO_PIN_1|GPIO_PIN_3|GPIO_PIN_5;GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出GPIO_Initure.Pull=GPIO_PULLUP;          //上拉GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速HAL_GPIO_Init(GPIOD,&GPIO_Initure);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_1,GPIO_PIN_RESET);  //PD1置0HAL_GPIO_WritePin(GPIOD,GPIO_PIN_3,GPIO_PIN_RESET);  //PD3置0HAL_GPIO_WritePin(GPIOD,GPIO_PIN_5,GPIO_PIN_RESET);  //PD5置0
}

(2) 向AD9833写16位数据

/*
*********************************************************************************************************
*   函 数 名: AD9833_Delay
*   功能说明: 时钟延时
*   形    参: 无
*   返 回 值: 无
*********************************************************************************************************
*/
static void AD9833_Delay(void)
{uint16_t i;for (i = 0; i < 1; i++);
}/*
*********************************************************************************************************
*   函 数 名: AD9833_Write
*   功能说明: 向SPI总线发送16个bit数据
*   形    参: TxData : 数据
*   返 回 值: 无
*********************************************************************************************************
*/
void AD9833_Write(unsigned int TxData)
{int i;AD9833_SCLK=1;AD9833_FSYNC=1;AD9833_FSYNC=0;//写16位数据for(i=0;i<16;i++){if (TxData & 0x8000)AD9833_SDATA=1;elseAD9833_SDATA=0;AD9833_Delay();AD9833_SCLK=0;AD9833_Delay();AD9833_SCLK=1;TxData<<=1;}AD9833_FSYNC=1;
}

(3) 控制输出波形

#define TRI_WAVE     0       //输出三角波
#define SIN_WAVE    1       //输出正弦波
#define SQU_WAVE    2       //输出方波/*
*********************************************************************************************************
*   函 数 名: AD9833_WaveSeting
*   功能说明: 向SPI总线发送16个bit数据
*   形    参: 1.Freq: 频率值, 0.1 hz - 12Mhz2.Freq_SFR: 0 或 13.WaveMode: TRI_WAVE(三角波),SIN_WAVE(正弦波),SQU_WAVE(方波)4.Phase : 波形的初相位
*   返 回 值: 无
*********************************************************************************************************
*/
void AD9833_WaveSeting(double Freq,unsigned int Freq_SFR,unsigned int WaveMode,unsigned int Phase )
{int frequence_LSB,frequence_MSB,Phs_data;double   frequence_mid,frequence_DATA;long int frequence_hex;/*********************************计算频率的16进制值***********************************/frequence_mid=268435456/25;//适合25M晶振//如果时钟频率不为25MHZ,修改该处的频率值,单位MHz ,AD9833最大支持25MHzfrequence_DATA=Freq;frequence_DATA=frequence_DATA/1000000;frequence_DATA=frequence_DATA*frequence_mid;frequence_hex=frequence_DATA;  //这个frequence_hex的值是32位的一个很大的数字,需要拆分成两个14位进行处理;frequence_LSB=frequence_hex; //frequence_hex低16位送给frequence_LSBfrequence_LSB=frequence_LSB&0x3fff;//去除最高两位,16位数换去掉高位后变成了14位frequence_MSB=frequence_hex>>14; //frequence_hex高16位送给frequence_HSBfrequence_MSB=frequence_MSB&0x3fff;//去除最高两位,16位数换去掉高位后变成了14位Phs_data=Phase|0xC000; //相位值AD9833_Write(0x0100); //复位AD9833,即RESET位为1AD9833_Write(0x2100); //选择数据一次写入,B28位和RESET位为1if(Freq_SFR==0)                 //把数据设置到设置频率寄存器0{frequence_LSB=frequence_LSB|0x4000;frequence_MSB=frequence_MSB|0x4000;//使用频率寄存器0输出波形AD9833_Write(frequence_LSB); //L14,选择频率寄存器0的低14位数据输入AD9833_Write(frequence_MSB); //H14 频率寄存器的高14位数据输入AD9833_Write(Phs_data);    //设置相位//AD9833_Write(0x2000); /**设置FSELECT位为0,芯片进入工作状态,频率寄存器0输出波形**/}if(Freq_SFR==1)               //把数据设置到设置频率寄存器1{frequence_LSB=frequence_LSB|0x8000;frequence_MSB=frequence_MSB|0x8000;//使用频率寄存器1输出波形AD9833_Write(frequence_LSB); //L14,选择频率寄存器1的低14位输入AD9833_Write(frequence_MSB); //H14 频率寄存器1为AD9833_Write(Phs_data);   //设置相位//AD9833_Write(0x2800); /**设置FSELECT位为0,设置FSELECT位为1,即使用频率寄存器1的值,芯片进入工作状态,频率寄存器1输出波形**/}if(WaveMode==TRI_WAVE) //输出三角波波形AD9833_Write(0x2002); if(WaveMode==SQU_WAVE) //输出方波波形AD9833_Write(0x2028); if(WaveMode==SIN_WAVE)  //输出正弦波形AD9833_Write(0x2000); }

STM32驱动AD9833相关推荐

  1. 关于STM32驱动DS1302实时时钟的一点思考

    关于STM32驱动DS1302实时时钟的一点思考 之前用51驱动过DS1302,没用多久就输出了正确的时间.当时以为这块芯片其实没啥,很简单.但是现在用STM32做项目,用到同样的芯片,以为这有何难, ...

  2. stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第十一章模仿STM32驱动开发格式实验 在上一章使用C语 ...

  3. 基于OMAPL138的字符驱动_GPIO驱动AD9833(三)之中断申请IRQ

    基于OMAPL138的字符驱动_GPIO驱动AD9833(三)之中断申请IRQ 0. 导语 学习进入到了下一个阶段,还是以AD9833为例,这次学习是向设备申请中断,实现触发,在未来很多场景,比如做用 ...

  4. ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)

    参考:Linux之ARM(IMX6U)裸机模仿STM32驱动开发格式 作者:一只青木呀 发布时间: 2020-08-15 12:11:56 网址:https://blog.csdn.net/weixi ...

  5. stm32读取目标芯片_使用stm32驱动RC522读IC卡(代码留言邮箱)

    RC522与PN532简介 关于STM32驱动方式 接线说明 程序烧录 查看卡号 总结 RC522与PN532简介 在写这篇文章之前有写过一篇有关于PN532的文章,RC522与PN532在使用上都可 ...

  6. STM32驱动LCD实战

    目录 01 驱动时序 02 FSMC外设配置 03 背光驱动 04 复位驱动 05 寄存器配置 前段时间写了<STM32驱动LCD原理>和<STM32的FSMC外设简介>两篇文 ...

  7. STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏

    STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏 串口屏 基础指令集 硬件和接线 接线 实验前准备 STM32程序 串口程序 主函数 实验现象 总结 串口屏 串口屏是一个集 ...

  8. STM32驱动开发(二)--USB Device RNDIS虚拟网卡(USB2.0 基础概念讲解)

    STM32驱动开发(二)–USB Device RNDIS虚拟网卡(USB2.0基础概念讲解) 一.简介   本文基于stm32 Rndis实例,github开源, 使用STM32F407单板.结合协 ...

  9. 【常用芯片】ULN2003工作原理及中文资料(实例:STM32驱动28BYJ48步进电机)

    ULN2003的基本介绍 ULN2003的概述 ULN2003是高耐压.大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成.一般采用DIP-16 或SOP-16 塑料封装. ULN2003的主要特点 ...

  10. STM32驱动WS2812B-2020 RGB彩灯(一)

    STM32驱动WS2812B-2020RGB彩灯(一) 最近搞飞控,看到有些飞控上都使用的RGB彩灯,够酷炫,所以尝试着自己搞一个. 手上的硬件有一块自制的STM32F103最小系统板,一个同事焊好的 ...

最新文章

  1. novaclient的api调用流程与开发
  2. task_struct源码
  3. 圣诞夜,让你的代码都变成圣诞树吧!
  4. Android打开jsp页面,如何确定是通过jsp页面上的Android设备还是IOS设备访问网页
  5. http的“无连接”指的是_http协议无状态中的 quot;状态quot; 到底指的是什么?...
  6. python爬音乐网站_用 Python 爬取 QQ 音乐全部歌曲
  7. 计算机基本概念及简单的二进制运算
  8. 2021高考池州成绩查询,2021池州高考信息网
  9. java 抽象类 注入,spring向抽象类注入问题
  10. $emit和$on用法深挖
  11. 使用ember-simple-auth实现Ember.js应用的权限控制
  12. 一、Fiddler抓包工具 — Fiddler介绍与安装
  13. Windows 调色板
  14. 高考导数选择题解题方法
  15. 宋体 ttf_.shx和.ttf字体,你真的了解?
  16. html5移动端选择城市,移动端城市选择插件(原创)
  17. 照片制作手机壳,定制手机壳diy需要什么设备?
  18. Python【王者荣耀】全英雄无水印皮肤
  19. PowerBuilder 部署iis报错:IIS is not acessblee Please check the server address and port number.
  20. 体感互动LED显示屏系统|体感互动屏幕|体感互动大屏软件

热门文章

  1. 上市企业小米科技应用的发票扫描仪
  2. spss分析qpcr数据_手把手教你使用 SPSS 分析实时荧光定量数据
  3. 如何使用DOSBox软件编写运行汇编语言程序
  4. ns3安装 + eclipse
  5. Python基于cq-http协议端,使用nonebot2框架制作属于自己的智能机器人
  6. adams2020安装教程(附详细图文安装教程)
  7. jquery-migrate.min.js兼容jQuery版本
  8. 颜值经济风暴来袭,国产美容仪如何站稳脚跟?
  9. rs429-HI3282-HI3182笔记
  10. 打印机无法打印测试页是什么原因