Appearance
DAC
c
void dac_init(void)
{
DAC_ChannelConfTypeDef dac_ch_conf;
g_dac_handle.Instance = DAC;
HAL_DAC_Init(&g_dac_handle); /* 初始化DAC */
dac_ch_conf.DAC_Trigger = DAC_TRIGGER_NONE; /* 不使用触发功能,设置为自动触发 */
dac_ch_conf.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE; /* DAC输出缓冲关闭 */
HAL_DAC_ConfigChannel(&g_dac_handle, &dac_ch_conf, DAC_CHANNEL_1); /* 配置DAC通道1 */
HAL_DAC_Start(&g_dac_handle, DAC_CHANNEL_1); /* 开启DAC通道1 */
}
使用外部触发
c
dac_ch_conf.DAC_Trigger = DAC_TRIGGER_T7_TRGO; //设置为定时器7触发
dac_ch_conf.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE; //不使能缓冲
HAL_DAC_ConfigChannel(&g_dac_dma_handle, &dac_ch_conf, DAC_CHANNEL_1);
c
/**
* @brief DAC DMA使能波形输出
* @note TIM7的输入时钟频率(f)来自APB1, f = 36M * 2 = 72Mhz.
* DAC触发频率 ftrgo = f / ((psc + 1) * (arr + 1))
* 波形频率 = ftrgo / ndtr;
*
* @param ndtr : DMA通道单次传输数据量
* @param arr : TIM7的自动重装载值
* @param psc : TIM7的分频系数
* @retval 无
*/
void dac_dma_wave_enable(uint16_t cndtr, uint16_t arr, uint16_t psc)
{
TIM_HandleTypeDef tim7_handle = {0};
TIM_MasterConfigTypeDef tim_mater_config = {0};
__HAL_RCC_TIM7_CLK_ENABLE();
tim7_handle.Instance = TIM7;
tim7_handle.Init.Prescaler = psc;
tim7_handle.Init.Period = arr;
HAL_TIM_Base_Init(&tim7_handle);//初始化定时器
tim_mater_config.MasterOutputTrigger = TIM_TRGO_UPDATE; //更新事件, 会产生一个TRGO信号
tim_mater_config.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&tim7_handle, &tim_mater_config);
HAL_TIM_Base_Start(&tim7_handle);
HAL_DAC_Stop_DMA(&g_dac_dma_handle, DAC_CHANNEL_1);
HAL_DAC_Start_DMA(&g_dac_dma_handle, DAC_CHANNEL_1, (uint32_t *)g_dac_sin_buf, cndtr, DAC_ALIGN_12B_R);
}