1. 程式人生 > >stm32的DAC輸出三角波

stm32的DAC輸出三角波

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”