OpenEdv-开源电子网

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

想做一个移相器,用AD到DMA再到DA,不知道怎么不行,求助。(程序在下)

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-4-15
在线时间
0 小时
发表于 2015-5-6 21:47:45 | 显示全部楼层 |阅读模式
5金钱

u8 SendBuff[12];
 int main(void)
 {
  u16 adcx;
float temp;
  u8 k=0;  
u16 dacval2=0;
u8 key; 
u32 t=0;
delay_init();     //延时函数初始化  
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LCD_Init(); //初始化LCD
 KEY_Init(); //按键初始化
Dac1_Init(); //Dac1初始化
Adc_Init() ; //Adc1初始化

  MYDMA_Config(DMA1_Channel1,(u32)&(ADC1->DR),(u32)&SendBuff,12);//DMA1通道1,外设为ADC,存储器为SendBuff,长度12.
MYDMA2_Config(DMA2_Channel3,(u32)&DAC->DHR12R1,(u32)&SendBuff,12);//DMA2通道3,外设为DAC,存储器为SendBuff,长度12.
POINT_COLOR=RED;//设置字体为红色 
LCD_ShowString(60,50,200,16,16,"WarShip STM32");
LCD_ShowString(60,70,200,16,16,"DAC TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2012/4/14");
//显示提示信息      
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,170,200,16,16,"      t:");      

DAC_SetChannel2Data(DAC_Align_12b_R, 0);//初始值为0

while(1)
{
  k++;
key=KEY_Scan(0);  
if(key==0)
{  
t++;
}
else if(key==1)
{
if(t>1)t-=1;
else t=0;
}
if(key==2)
{  
t+=10;
}
else if(key==3)
{
if(t>10)t-=10;
else t=0 ;
}
if(key==4)
{  
t+=100;
}
else if(key==5)
{
if(t>100)t-=100;
else t=0 ;
}
if(k==10||key==0||key==1||key==2||key==3||key==4||key==5) //WKUP/KEY1按下了,或者定时时间到了
{  

  LCD_ShowxNum(124,170,t,1,16,0);     //显示t

}    
delay_ms(10);

}
 }

//DMA的
DMA_InitTypeDef DMA_InitStructure;

u32 t=0;

u16 DMA1_MEM_LEN;
u16 DMA2_MEM_LEN;//保存DMA每次数据传送的长度    
//DMA1的各通道配置
//这里的传输形式是固定的,这点要根据不同的情况来修改
//从存储器->外设模式/8位数据宽度/存储器增量模式
//DMA_CHxMA通道CHx
//cpar:外设地址
//cmar:存储器地址
//cndtr:数据传输量 
void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA传输

    DMA_DeInit(DMA1_Channel1);   //将DMA的通道1寄存器重设为缺省值
DMA1_MEM_LEN=cndtr;
DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;  //DMA外设ADC基地址
DMA_InitStructure.DMA_MemoryBaseAddr = cmar;  //DMA内存基地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  //数据传输方向,从外设读取发送到内存
DMA_InitStructure.DMA_BufferSize = cndtr;  //DMA通道的DMA缓存的大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址寄存器递增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  //数据宽度为8位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  //工作在循环模式
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x拥有中优先级 
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //DMA通道x没有设置为内存到内存传输
DMA_Init(DMA_CHx, &DMA_InitStructure);  //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器
DMA_Cmd(DMA1_Channel1, ENABLE);
delay_us(t) ;  



 
void MYDMA2_Config(DMA_Channel_TypeDef* DMA_CHx,u32 DHR12R1,u32 cmar,u16 cndtr)
{
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE); //使能DMA传输

    DMA_DeInit(DMA2_Channel3);   //将DMA的通道1寄存器重设为缺省值
DMA2_MEM_LEN=cndtr;
DMA_InitStructure.DMA_PeripheralBaseAddr = DHR12R1;  //DMA外设ADC基地址
DMA_InitStructure.DMA_MemoryBaseAddr = cmar;  //DMA内存基地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //数据传输方向,从内存读取发送到外设
DMA_InitStructure.DMA_BufferSize = cndtr;  //DMA通道的DMA缓存的大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址寄存器递增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  //数据宽度为8位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  //工作在正常缓存模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA通道 x拥有高优先级 
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //DMA通道x没有设置为内存到内存传输
DMA_Init(DMA_CHx, &DMA_InitStructure);  //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器
DMA_Cmd(DMA2_Channel3, ENABLE);
DMA_ITConfig(DMA2_Channel3, DMA_IT_TC | DMA_IT_HT, ENABLE);
 



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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-6 22:30:51 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 18:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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