初级会员

- 积分
- 125
- 金钱
- 125
- 注册时间
- 2016-2-21
- 在线时间
- 32 小时
|

楼主 |
发表于 2016-4-13 14:23:55
|
显示全部楼层
大神,我用TIM+DAC+DMA写这个程序,编译的没问题,但是示波器上没有信号,同样的程序架构,我输出周期的正弦波和方波都有波形输出,这个梯形波我用了一个60000的数组,每隔30ms进一次中断,发送一个数据,总共发送60000个数据,1800s,但是示波器检测不到信号,代码如下:能帮我看看吗?
#include "dac.h"
#include "sys.h"
#include "math.h"
#define DAC_DHR12R1 0x40007420 //DAC通道1输出寄存器地址
/********生成梯形波形输出表***********/
void Fade_Data( u16 cycle ,u16 *D )
{
u16 i;
for( i=0;i<cycle;i++)
{
if(i<(cycle/60)) D= (u16)((Vref*60/cycle*i)*4095/3.3);
else if(i>(cycle/60)&&i<(cycle*59/60)) D= (u16)(Vref*4095/3.3);
else if (i>(cycle*59/60)&&i<cycle) D = (u16)((60*Vref-60*Vref/cycle*i)*4095/3.3);
}
}
u16 Fade_Value[N];
static void DAC_Config(void)//使能DAC时钟,初始化GPIO
{
GPIO_InitTypeDef GPIO_InitStruct;
DAC_InitTypeDef DAC_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AN;//模拟输入
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_4;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化GPIO
DAC_InitStruct.DAC_OutputBuffer=DAC_OutputBuffer_Disable;//不使用DAC输出缓存
DAC_InitStruct.DAC_Trigger=DAC_Trigger_T2_TRGO;//使用定时器2作为触发源
DAC_InitStruct.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生器
DAC_Init(DAC_Channel_1,&DAC_InitStruct);//初始化DAC1
DAC_Cmd(DAC_Channel_1,ENABLE);//使能DAC通道1
DAC_DMACmd(DAC_Channel_1,ENABLE);//使能DAC的DMA请求
}
static void DAC_TIM_Config(void)//配置定时器
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInitStruct.TIM_Period=299;//自动重装载值299,定时周期300
TIM_TimeBaseInitStruct.TIM_Prescaler=8399;//预分频,分频84M/(8399+1)=10kHz
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);//定时器初始化配置
TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);//配置TIM2触发源
TIM_Cmd(TIM2,ENABLE);//使能TIM2时钟
}
static void DAC_DMA_Config(void)//配置DMA
{
DMA_InitTypeDef DMA_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);
DMA_InitStruct.DMA_BufferSize=32;//缓存大小为32字节
DMA_InitStruct.DMA_Channel=DMA_Channel_7;//DMA通道4
DMA_InitStruct.DMA_DIR=DMA_DIR_MemoryToPeripheral;//方向为存储器到外设
DMA_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;//关闭双缓冲模式
DMA_InitStruct.DMA_Memory0BaseAddr=(uint32_t)Fade_Value;//存储器数据地址Fade_Value
DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Word;//存储器数据以字为单位
DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;//存储器地址自增
DMA_InitStruct.DMA_Mode=DMA_Mode_Normal;//DMA正常模式
DMA_InitStruct.DMA_PeripheralBaseAddr=DAC_DHR12R1;//外设地址基地址
DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Word;//外设数据单位
DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设地址不自增
DMA_InitStruct.DMA_Priority=DMA_Priority_High;//高DMA通道优先级
DMA_InitStruct.DMA_FIFOThreshold=DMA_FIFOThreshold_Full;
DMA_InitStruct.DMA_MemoryBurst=DMA_MemoryBurst_Single;
DMA_InitStruct.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;
DMA_Init(DMA1_Stream5,&DMA_InitStruct);//初始化DMA1-5
DMA_Cmd(DMA1_Stream5,ENABLE);//使能DMA数据流5
}
void MYDAC_Init(void)
{
Fade_Data( N ,Fade_Value);
DAC_Config();
DAC_TIM_Config();
DAC_DMA_Config();
}
|
|