OpenEdv-开源电子网

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

请问用DMA怎么样触发DAC转换,我的程序没作用啊

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2015-10-13
在线时间
0 小时
发表于 2015-10-14 04:32:40 | 显示全部楼层 |阅读模式
5金钱
MAIN:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"   
#include "lcd.h"  
#include "adc.h" 
#include "key.h" 
#include "usmart.h" 
#include "dac.h" 
#include "dma.h"
u8 SendBuff[100];
   
int main(void)
{   
u16 adcx;
float temp;
  u8 t=0;  
u16 dacval=0;
u8 key;
  Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600); //串口初始化为9600
delay_init(72);   //延时初始化 
LED_Init();   //初始化与LED连接的硬件接口
  LCD_Init();   //初始化LCD
KEY_Init(); //按键初始化  







 // Adc_Init();   //ADC初始化
Dac1_Init(); //DAC通道1初始化
usmart_dev.init(72); //USMART初始化
POINT_COLOR=RED;//设置字体为红色 
LCD_ShowString(60,50,200,16,16,"Mini STM32");
for (t=0;t<100;t++){SendBuff[t]=t*2;}

t=0;


MYDMA_Config(DMA2_Channel3,(u32)&DAC->DHR8R1,(u32)SendBuff,100);//DMA1通道4,外设为串口1,存储器为SendBuff,长(TEXT_LENTH+2)*100.      
   
}




、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
#include "dma.h"    
#include "delay.h"    
//////////////////////////////////////////////////////////////////////////////////  
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK MiniSTM32开发板
//DMA 代码   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2014/3/9
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved  
//////////////////////////////////////////////////////////////////////////////////
extern LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p);

u16 DMA1_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->AHBENR|=1<<0; //开启DMA1时钟
delay_ms(5); //等待DMA时钟稳定
DMA_CHx->CPAR=cpar; //DMA1 外设地址 
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
DMA1_MEM_LEN=cndtr;       //保存DMA传输数据量
DMA_CHx->CNDTR=cndtr;     //DMA1,传输数据量
DMA_CHx->CCR=0X00000000; //复位
DMA_CHx->CCR|=1<<4;   //从存储器读
DMA_CHx->CCR|=0<<5;   //普通模式
DMA_CHx->CCR|=0<<6; //外设地址非增量模式
DMA_CHx->CCR|=1<<7; //存储器增量模式
DMA_CHx->CCR|=0<<8; //外设数据宽度为8位
DMA_CHx->CCR|=0<<10; //存储器数据宽度8位
DMA_CHx->CCR|=1<<12; //中等优先级
DMA_CHx->CCR|=0<<14; //非存储器到存储器模式  

//开启一次DMA传输
void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
DMA_CHx->CCR&=~(1<<0);       //关闭DMA传输 
DMA_CHx->CNDTR=DMA1_MEM_LEN; //DMA1,传输数据量 
DMA_CHx->CCR|=1<<0;          //开启DMA传输
delay_us(300);
LCD_ShowString(60,80,200,16,16,"DMA");
}   


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
#include "dac.h"
//////////////////////////////////////////////////////////////////////////////////  
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK MiniSTM32开发板
//DAC 代码   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2014/3/9
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved  
//////////////////////////////////////////////////////////////////////////////////

//DAC通道1输出初始化
void Dac1_Init(void)
{
RCC->APB2ENR|=1<<2;    //使能PORTA时钟  
RCC->APB1ENR|=1<<29;   //使能DAC时钟  
   
GPIOA->CRL&=0XFFF0FFFF; 
GPIOA->CRL|=0X00000000;//PA4 模拟输入    

DAC->CR|=1<<0; //使能DAC1
DAC->CR|=0<<1; //DAC1输出缓存不使能 BOFF1=1
DAC->CR|=1<<2; //不使用触发功能 TEN1=0
DAC->CR|=1<<3; //DAC TIM6 TRGO,不过要TEN1=1才行
DAC->CR|=1<<4; //DAC TIM6 TRGO,不过要TEN1=1才行
DAC->CR|=1<<5; //DAC TIM6 TRGO,不过要TEN1=1才行
DAC->CR|=0<<6; //不使用波形发生
DAC->CR|=0<<8; //屏蔽、幅值设置
DAC->CR|=1<<12; //DAC1 DMA使能    

DAC->DHR8R1=0;
}
//设置通道1输出电压
//vol:0~3300,代表0~3.3V
void Dac1_Set_Vol(u16 vol)
{
float temp=vol;
temp/=1000;
temp=temp*4096/3.3;
DAC->DHR8R1=temp;
}









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

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-7-28
在线时间
6 小时
发表于 2016-7-28 15:09:51 | 显示全部楼层
问一下楼主这个问题解决了吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 05:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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