中级会员
 
- 积分
- 417
- 金钱
- 417
- 注册时间
- 2019-7-4
- 在线时间
- 92 小时
|
DAC初始化程序
void DAC_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
DAC_InitTypeDef DAC_InitStructure;
#if DAC2_DMA == 1
DMA_InitTypeDef DMA_InitStructure;
#endif
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE); //使能DAC时钟
#if DAC2_DMA == 1
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2,ENABLE);
#endif
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//DAC_InitStructure.DAC_Trigger = DAC_Trigger_None; //不使用触发功能
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO; //使用TIM2作为触发源
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; //不使用波形发生器
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; //屏蔽、幅值设置
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; //不使用DAC输出缓冲
DAC_Init(DAC_Channel_2,&DAC_InitStructure);
DAC_Cmd(DAC_Channel_2,ENABLE); //使能DAC2 由PA5输出
DAC_SetChannel2Data(DAC_Align_12b_R,0); //12位右对齐数据格式设置DAC值,刚开始为0
DAC_DMACmd(DAC_Channel_2,ENABLE); //使能DAC的DMA请求
#if DAC2_DMA == 1
DMA_DeInit(DMA2_Channel4);
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&DAC->DHR12R2; //DMA外设基地址 DHR12R2 AC2的12位右对齐数据地址
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)DAC2_buffer; //DMA内存基地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //数据传输方向,从内存读取发送到外设
DMA_InitStructure.DMA_BufferSize = DAC2_SIZE; //DMA通道的DMA缓存的大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器递增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据宽度为16位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //内存数据宽度为16位
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //工作在正常模式
//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(DMA2_Channel4, &DMA_InitStructure);
TIM2_Config(DAC2_TIME-1,71); //10*72/72000000=10us传传输一个点
//DMA_Cmd(DMA2_Channel4, ENABLE); //使能通道,开启一次DMA传输
DMA_Cmd(DMA2_Channel4, DISABLE);
#endif
}
定时器程序
void TIM2_Config(unsigned short int arr,unsigned short int psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能
//定时器TIM2初始化
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
//TIM_ITConfig(TIM2,TIM_DIER_UDE,ENABLE); //TIM_DIER_UDE:更新DMA请求使能
/* 配置TIM2触发源 */
TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
TIM_Cmd(TIM2, ENABLE); //使能TIMx
}
|
|