基于STM32的 AD9834 驱动程序
更新时间:2023-03-17 23:12:01 阅读量: 综合文库 文档下载
//================AD9834.h======================// /*----------------------------------------------------- AD9834驱动程序
STM32固件函数库V2.0 2011.3.29
-------------------------------------------------------*/ #ifndef __AD9834_H #define __AD9834_H #include \#define Triangle_Wave 0x2002 #define Sine_Wave 0x2028
/* AD9834晶振频率 */
#define AD9834_SYSTEM_COLCK 50000000UL /* AD9834 控制引脚 */
#define AD9834_Control_Port GPIOC
#define AD9834_FSYNC GPIO_Pin_6 #define AD9834_SCLK GPIO_Pin_7 #define AD9834_SDATA GPIO_Pin_8 #define AD9834_RESET GPIO_Pin_9
#define AD9834_FSYNC_SET GPIO_SetBits(AD9834_Control_Port ,AD9834_FSYNC) #define
AD9834_FSYNC_CLR GPIO_ResetBits(AD9834_Control_Port ,AD9834_FSYNC) #define AD9834_SCLK_SET GPIO_SetBits(AD9834_Control_Port ,AD9834_SCLK) #define AD9834_SCLK_CLR GPIO_ResetBits(AD9834_Control_Port ,AD9834_SCLK) #define AD9834_SDATA_SET GPIO_SetBits(AD9834_Control_Port ,AD9834_SDATA) #define
AD9834_SDATA_CLR GPIO_ResetBits(AD9834_Control_Port ,AD9834_SDATA)
#define AD9834_RESET_SET GPIO_SetBits(AD9834_Control_Port ,AD9834_RESET) #define
AD9834_RESET_CLR 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函数声明 */
extern void AD9834_Write_16Bits(unsigned int data) ; //写一个字到AD9834 extern void AD9834_Select_Wave(unsigned int initdata) ; //选择输出波形 extern void Init_AD9834() ;//初始化配置
extern void AD9834_Set_Freq(unsigned char freq_number, unsigned long freq) ;//选择输出寄存器和输出频率值 #endif /* AD9834_H */
//================================================================// //====================AD9834.c====================================// #include \#include \
/**************************************************************** 函数名称: 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_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
功 能: 初始化AD9834控制引脚
参 数: 无 返回值 : 无
*****************************************************************/ void Init_AD9834() {
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_PP ; GPIO_Init(AD9834_Control_Port ,&GPIO_InitStructure) ; }
/**************************************************************** 函数名称: 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 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()选择波形,最后选择频率值即可输出。 */
写得不是很好,拿出来分享一下,希望大家能够提点建议!
正在阅读:
基于STM32的 AD9834 驱动程序03-17
九年级数学上册 21·1教案 人教新课标版 - 图文12-29
诧异造句02-11
公司薪资管理制度(修订版)06-05
手脑速算练习题 - 图文05-06
第十二章 卤素练习12-04
古诗结定襄郡狱效陶体翻译赏析08-26
投资银行理论与实务实验报告(1)10-24
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 驱动程序
- 基于
- AD9834
- STM32