OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4318|回复: 2

AD9850与STM32连接调不出方波,求大神帮忙看一下为什么。。。

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-3-20
在线时间
0 小时
发表于 2015-10-22 13:35:20 | 显示全部楼层 |阅读模式
5金钱

[mw_shl_code=c,true]/*------------------------串行模式-------------------------*/ #ifdef MODE_SEIAL /******************************************** 函数名称:AD9850_Reset_Sreial 功 能:在串行模式】下复位AD9850 参 数:无 返回值 :无 *********************************************/ void AD9850_Reset_Sreial(void) { AD9850_WCLK_CLR ; AD9850_FQUD_CLR ; //RST信号 AD9850_RST_CLR ; AD9850_RST_SET ; AD9850_Delay(0xFFFF) ; AD9850_RST_CLR ; //WCLK信号 AD9850_WCLK_CLR ; AD9850_WCLK_SET ; AD9850_Delay(0xFFFF) ; AD9850_WCLK_CLR ; //FQUD信号 AD9850_FQUD_CLR ; AD9850_FQUD_SET ; AD9850_Delay(0xFFFF) ; AD9850_FQUD_CLR ; } /******************************************** 函数名称:AD9850_Write_Serial 功 能:在串行模式下写AD9850寄存器 参 数:W0 - W0寄存器的值 freq - 频率值 返回值 :无 *********************************************/ void AD9850_Write_Serial(unsigned char W0,unsigned long freq) { unsigned char i,wdata ; unsigned long y ; y=4294967296/50; y*=(((int)freq)/1000000); wdata = y>>0 ; //写w4 for(i=0 ;i<8 ;i++) { if(wdata & 0x01) //wdata转换为二进制。 AD9850_DATA_Write_1 ; else AD9850_DATA_Write_0 ; AD9850_WCLK_SET ; wdata >>= 1 ; AD9850_WCLK_CLR ; } wdata = y>>8 ; //写w3 for(i=0 ;i<8 ;i++) { if(wdata & 0x01) AD9850_DATA_Write_1 ; else AD9850_DATA_Write_0 ; AD9850_WCLK_SET ; wdata >>= 1 ; AD9850_WCLK_CLR ; } wdata = y>>16 ; //写w2 for(i=0 ;i<8 ;i++) { if(wdata & 0x01) AD9850_DATA_Write_1 ; else AD9850_DATA_Write_0 ; AD9850_WCLK_SET ; wdata >>= 1 ; AD9850_WCLK_CLR ; } wdata = y>>24 ; //写w1 for(i=0 ;i<8 ;i++) { if(wdata & 0x01) AD9850_DATA_Write_1 ; else AD9850_DATA_Write_0 ; AD9850_WCLK_SET ; wdata >>= 1 ; AD9850_WCLK_CLR ; } // W0=3; wdata = W0 ; //写w0 for(i=0 ;i<8 ;i++) { if(wdata & 0x01) AD9850_DATA_Write_1 ; else AD9850_DATA_Write_0 ; AD9850_WCLK_SET ; wdata >>= 1 ; AD9850_WCLK_CLR ; } AD9850_FQUD_SET ; //移入使能 AD9850_Delay(0xFFFF) ; AD9850_FQUD_CLR ; } #endif /* MODE_SERIAL */ /*------------------------串行模式-------------------------*/ /*---------------------------------------------------------*/ /******************************************** 函数名称:Init_AD9834 功 能:初始化AD9834 参 数:无 返回值 :无 *********************************************/ void Init_AD9850(void) { #ifdef MODE_SEIAL //串行模式 GPIO_InitTypeDef GPIO_InitStructure ; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF , ENABLE); GPIO_InitStructure.GPIO_Pin = AD9850_WCLK | AD9850_FQUD | AD9850_RST | AD9850_DATA ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(AD9850_CONTROL_PORT ,&GPIO_InitStructure) ; AD9850_Reset_Sreial() ; #endif #ifdef MODE_PARALLEL //并行模式 GPIO_InitTypeDef GPIO_InitStructure ; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO , ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); GPIO_InitStructure.GPIO_Pin = AD9850_WCLK | AD9850_FQUD | AD9850_RST ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(AD9850_CONTROL_PORT ,&GPIO_InitStructure) ; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(AD9850_DATA_PORT ,&GPIO_InitStructure) ; AD9850_Reset_Parallel() ; #endif }[/mw_shl_code]
[mw_shl_code=c,true]int main(void) { RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */ RCC_HSICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);//等待HSI就绪 RCC_HCLKConfig(RCC_SYSCLK_Div1); /*设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时*/ RCC_PCLK2Config(RCC_HCLK_Div1); /* 设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK*/ RCC_PCLK1Config(RCC_HCLK_Div2); /*设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK / 2*/ FLASH_SetLatency(FLASH_Latency_2); /*设置FLASH存储器延时时钟周期数FLASH_Latency_2 2延时周期*/ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /*选择FLASH预取指缓存的模,预取指缓存使能*/ RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);/*设置PLL时钟源及倍频系数,频率为8/2*16=64Mhz*/ RCC_PLLCmd(ENABLE); /*使能PLL */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /*检查指定的RCC标志位(PLL准备好标志)设置与否*/ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*设置系统时钟(SYSCLK) */ while(RCC_GetSYSCLKSource() != 0x08); /*0x08:PLL作为系统时钟 */ //SystemInit(); //系统时钟初始化为72M SYSCLK_FREQ_72MHz delay_init(72); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 LED_Init(); // AD9850_Write(0x00,8000000); while(1) { AD9850_Write_Serial(0,8000000); GPIO_SetBits(GPIOC,GPIO_Pin_0); //LED端口初始化 delay_ms(1000); GPIO_ResetBits(GPIOC,GPIO_Pin_0); GPIO_SetBits(GPIOC,GPIO_Pin_1); delay_ms(1000); GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_SetBits(GPIOC,GPIO_Pin_2); delay_ms(1000); GPIO_ResetBits(GPIOC,GPIO_Pin_2); }[/mw_shl_code]


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2015-10-22 22:24:00 | 显示全部楼层
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2020-12-10
在线时间
1 小时
发表于 2020-12-12 20:05:28 来自手机 | 显示全部楼层
帮顶....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-30 11:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表