stm32的DAC輸出三角波
阿新 • • 發佈:2018-12-18
stm32的DAC可以配置直接輸出三角波 配置程式碼: 定時器相關配置
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);//使能DAC時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//模擬輸入
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//下拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
DAC_InitType.DAC_Trigger=DAC_Trigger_T4_TRGO; //TIM4觸發,TEX1 = 1
DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_Triangle;//生成三角波
DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_TriangleAmplitude_4095;//幅值為3.3
DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ; //DAC1輸出快取關閉 BOFF1=1
DAC_Init(DAC_Channel_1,&DAC_InitType); //初始化DAC通道1
DAC_SetChannel1Data(DAC_Align_12b_R, 4095); //12位右對齊資料格式設定DAC值
DAC_DMACmd(DAC_Channel_1, DISABLE);//DAC不使能
DAC_Cmd(DAC_Channel_1, ENABLE); //使能DAC通道1
定時器相關配置
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14時鐘使能
TIM_TimeBaseStructure.TIM_Prescaler=psc; //定時器分頻
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計數模式
TIM_TimeBaseStructure.TIM_Period=arr; //自動重灌載值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定時器4
TIM_SelectOutputTrigger(TIM4, TIM_TRGOSource_Update);
TIM_Cmd(TIM4, ENABLE);
注: 1, TENx必須置1,所以DAC觸發方式必須選擇外部觸發。DAC_InitType.DAC_Trigger=DAC_Trigger_T4_TRGO; 這裡原則定時器4觸發 2, TIM_SelectOutputTrigger(TIM4, TIM_TRGOSource_Update); 定時器配置時需選擇觸發外設的方式,這裡選擇溢位觸發 3, 三角波頻率。 設三角波幅值為3.3V,即4096,所以一個週期計數器計數4096*2=8192次,則三角波頻率為“定時器頻率/8192”