中级会员
- 积分
- 218
- 金钱
- 218
- 注册时间
- 2015-12-3
- 在线时间
- 36 小时
|
一直对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
}
|
|