==9:DAC输出==
9.1:DAC概述和主要特性
概述:

主要特性:

9.2:软件设计
首先查看数据手册,找出DAC输出功能引脚。



软件设计思路:
1:配置DAC输出引脚
void DAC_GPIO_Init(void)
{
__RCC_GPIOA_CLK_ENABLE();
/**DAC1 GPIO Configuration
PA4
PA5
*/
GPIO_InitTypeDef GPIO_handle;
GPIO_handle.Drive = GPIO_DRIVE_LEVEL3;
GPIO_handle.Mode = GPIO_MODE_ANALOG;
GPIO_handle.Pin = GPIO_PIN_4|GPIO_PIN_5;
GPIO_handle.Pull = GPIO_NOPULL;
GPIO_Init(GPIOA,&GPIO_handle);
}
2:DAC时钟使能
3:DAC输出配置
/******************************************************************************
* <a href="https://bbs.eeworld.com.cn/home.php?mod=space&uid=159083" target="_blank">@brief</a> : DAC Output config.
* @param : None.
* @return: None
******************************************************************************/
void DAC_Config_OutPut()
{
DAC_InitTypeDef sConfig={0};
sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO;
sConfig.DAC_Trigger2 = DAC_TRIGGER_T8_TRGO;
sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_EXTERNAL;
sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
DAC_Init(DAC,DAC_CHANNEL_1, &sConfig);
DAC_Init(DAC,DAC_CHANNEL_2, &sConfig);
DAC_Cmd(DAC, DAC_CHANNEL_1,ENABLE);
DAC_Cmd(DAC, DAC_CHANNEL_2,ENABLE);
}
4:配置DAC输出电压
/******************************************************************************
* @brief : DAC output voltage initialization.
* @param : None.
* @return: None
******************************************************************************/
void DAC_Config_OutPut_Voltage()
{
DAC_InitTypeDef sConfig;
sConfig.DAC_Trigger = DAC_TRIGGER_SOFTWARE;
sConfig.DAC_Trigger2 = DAC_TRIGGER_SOFTWARE;
sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_EXTERNAL;
sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
DAC_Init(DAC,DAC_CHANNEL_1, &sConfig);
DAC_Init(DAC,DAC_CHANNEL_2, &sConfig);
SPL_DACEx_SelfCalibrate(DAC, &sConfig,DAC_CHANNEL_1);
SPL_DACEx_SelfCalibrate(DAC, &sConfig,DAC_CHANNEL_2);
Delay_Simple(500000);
}
5:设置自定义电压值
/******************************************************************************
* @brief : DAC output voltage.
* @param : voltage :output voltage value.
* @return: None
******************************************************************************/
void DAC_OutPutVoltage(float voltage)
{
if( voltage > 3.3)
{
return;
}
uint16_t data=((voltage / 3.3) * 4095);
DAC_SetDualChannelData(DAC,DAC_ALIGN_12B_R,data,data);
DAC_Cmd(DAC, DAC_CHANNEL_1,ENABLE);
DAC_Cmd(DAC, DAC_CHANNEL_2,ENABLE);
DAC_SoftwareTriggerCmd(DAC, DAC_CHANNEL_1,ENABLE);
DAC_SoftwareTriggerCmd(DAC, DAC_CHANNEL_2,ENABLE);
}
9.3:测试输出
编辑代码,设置PA4,PA5指定输出2V。
void bsp_init(void)
{
RCC_ClocksTypeDef RCC_Clocks;
#if (INS_ACCELERATE_ENABLE == 1)
System_EnableIAccelerate();
#endif
#if (DATA_ACCELERATE_ENABLE == 1)
System_EnableDAccelerate();
#endif
NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
SystemClock_Config();
SystemCoreClockUpdate();
RCC_GetClocksFreq(&RCC_Clocks);
SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);
BSP_UART_Init(115200);
BSP_DAC_Init();
DAC_OutPutVoltage(2.0);
#endif
DEBUG_LOG("bsp_init_ok");
}
使用万用表来测试PA4和PA5的输出电压值。
PA4输出电压:

PA5输出电压:
