分享STML系列DAC调试经验

2019-07-19 21:14发布

    一直对DAC和DMA心存神秘感,今天刚好没什么事,就想把STM8的相关程序跑一下。把官方的文件添加进来后整了半天还是没有正确的输出。
看数据手册、网上搜资料,一点点排查问题,最后终于成功了。下面就分享一下调试DAC时一些主要注意的点。
1: CLK_PeripheralClockConfig(CLK_Peripheral_COMP,ENABLE); //打开比较器时钟,因为DACDAC用到了比较器
2: SYSCFG_RIIOSwitchConfig(RI_IOSwitch_14,ENABLE);       //打开对应的开关,这里选择PB5输出,因为DAC功能是复用的,所以要打开对应的开关,使其正常输出
3: DAC_Init(DAC_Channel_1, DAC_Trigger_T4_TRGO, DAC_OutputBuffer_Enable);//选择触发源,这里选择TIM4的溢出;开始调试时可以用DAC_Trigger_None
                                                         //打开缓冲区,相当于跟随器;注意缓冲区运放并非轨到轨。
4:若不用DMA,可以用DAC_SetChannel1Data(DAC_Align_12b_R,value);
下面是DAC的初始化程序,注意在使用的时候要打开TIM4;                                                      
   void DAC_Config(void)
{
  GPIO_Init(GPIOB, GPIO_Pin_4, GPIO_Mode_In_FL_No_IT);
  CLK_PeripheralClockConfig(CLK_Peripheral_COMP,ENABLE); //打开比较器时钟
  CLK_PeripheralClockConfig(CLK_Peripheral_DAC, ENABLE); //打开DAC时钟
  SYSCFG_RIIOSwitchConfig(RI_IOSwitch_14,ENABLE);        //打开对应的开关,这里选择PB5输出
  /* DAC Channel1 Config: 12bit right ----------------------------------------*/
  /* DAC deinitialize */
  DAC_DeInit();
  /* Fill DAC Init param DAC_Trigger_T4_TRGO and  DAC Channel1 Init */
  DAC_Init(DAC_Channel_1, DAC_Trigger_T4_TRGO, DAC_OutputBuffer_Enable);
                                                        //选择触发源为TIM4,打开缓冲区
  /* Enable DAC Channel1 */                             //注意缓冲区运放并非轨到轨
  DAC_Cmd(DAC_Channel_1, ENABLE);                       //打开DAC
  /* Enable DMA for DAC Channel1 */
  DAC_DMACmd(DAC_Channel_1, ENABLE);                    //打开DMA
}                             

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
一颗烂荔枝
1楼-- · 2019-07-20 02:53
 精彩回答 2  元偷偷看……
wenhuaxiao
2楼-- · 2019-07-20 06:06
刚好要用,谢谢分享

一周热门 更多>