双DAC通道输出波形
例程路径:ls_sdk\examples\peripheral\dac\dual_dac_channel_wave
一、功能描述
本示例使用定时器触发方式实现了双DAC通道的噪声波和三角波的产生。
二、软件配置
2.1 DAC IO 配置
DAC1对应的IO为PA07,DAC2对应的IO为PC04;
例程中使用两个DAC同时实现波形的产生,以下函数配置相应IO的复用功能。
pinmux_dac1_init(); // PA07
pinmux_dac2_init(); // PC04
2.2 定时器结构体配置
void Basic_Timer_Cfg(void)
{
TimHandle.Instance = LSGPTIMA; // 选择定时器
TimHandle.Init.Prescaler = TIM_PRESCALER; // 预分屏器
TimHandle.Init.Period = TIM_PERIOD; // 定时器计数值
TimHandle.Init.ClockDivision = 0; // 时钟分频,配置死去时间才会用到,忽略
TimHandle.Init.CounterMode = TIM_COUNTERMODE_DOWN; // 计数模式
TimHandle.Init.TrgoSource = TIM_TRGO_UPDATE; //更新 – 更新事件被选为触发输入
// 初始化定时器
HAL_TIM_Init(&TimHandle);
HAL_TIM_Base_Start(&TimHandle);
}
2.3 基本DAC配置
void DAC_Init_Func(void)
{
DACx_Hdl.Instance = LSDAC12; // 选择硬件DAC模块,DAC1和DAC2的基址相同
DACx_Hdl.DACx = DAC1AndDAC2; // 选择要使用的DAC
//有关DAC1的配置
DACx_Hdl.DAC1_Trigger = GENERAL_TimerA_TRGO; // 选择触发器
DACx_Hdl.DAC1_wave = Noise_Wave; // 配置输出噪声波
DACx_Hdl.DAC1_Mamp = triangle_amplitude_4095; // 选择波形的峰值
//有关DAC2的配置
DACx_Hdl.DAC2_Trigger = GENERAL_TimerA_TRGO; // 选择触发器
DACx_Hdl.DAC2_wave = Triangle_Wave; // 配置输出三角波
DACx_Hdl.DAC2_Mamp = triangle_amplitude_4095; // 选择波形的峰值
if (HAL_DAC_Init(&DACx_Hdl) != HAL_OK)
{
Error_Handler();
}
}
注:配置触发器和定时器的时候需要匹配。 例如:当 DACx_Hdl.DAC2_Trigger = GENERAL_TimerA_TRGO 时 TimHandle.Instance = LSGPTIMA;
三、下载验证
将示波器的探头分别接开发板的PA07和PC04引脚,编译运行程序,查看波形。(PA07引脚输出噪声波,PC04引脚输出三角波)