初级会员

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

楼主 |
发表于 2016-3-6 15:37:02
|
显示全部楼层
本帖最后由 王木土哈哈哈 于 2016-3-6 15:42 编辑
#include "dac.h"
#include "sys.h"
#define DAC_DHR12R1 0x40007420 //DAC通道1输出寄存器地址
const uint16_t Sine12bit[32]={
2448,2832,3186,3496,3751,3940,4057,4096,4057,3940,
3751,3496,3186,2832,2448,2048,1648,1264,910,600,
345,156,39,0,39,156,345,600,910,1264,1648,2048
};
uint32_t DualSine12bit[32];
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_DOWN;
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=19;//自动重装载值19,定时周期20
TIM_TimeBaseInitStruct.TIM_Prescaler=0x0;//预分频,不分频84M/(0+1)=84M
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_DMA2,ENABLE);
DMA_InitStruct.DMA_BufferSize=32;//缓存大小为32字节
DMA_InitStruct.DMA_Channel=DMA_Channel_4;//DMA通道4
DMA_InitStruct.DMA_DIR=DMA_DIR_MemoryToPeripheral;//方向为存储器到外设
DMA_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;//关闭双缓冲模式
DMA_InitStruct.DMA_Memory0BaseAddr=(uint32_t)&DualSine12bit;//存储器数据地址DualSine12bit
DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Word;//存储器数据以字为单位
DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;//存储器地址自增
DMA_InitStruct.DMA_Mode=DMA_Mode_Circular;//DMA循环模式
DMA_InitStruct.DMA_PeripheralBaseAddr=DAC_DHR12R1;//外设地址基地址为DAC通道1数据寄存器地址
DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Word;//外设数据以字为单位
DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设地址不自增
DMA_InitStruct.DMA_Priority=DMA_Priority_High;//高DMA通道优先级
DMA_Init(DMA2_Stream7,&DMA_InitStruct);//初始化DMA
DMA_Cmd(DMA2_Stream7,ENABLE);//使能DMA数据流7
}
void MYDAC_Init(void)
{
DAC_Config();
DAC_TIM_Config();
DAC_DMA_Config();
}
|
|