|
STM32H743V 通过DMA传输DAC来输出正弦波,用示波器显示无波形输出,输出正弦波却有,以下部分配置:
TIM_MasterConfigTypeDef sMasterConfig;
/* TIM6 时钟使能 */
__HAL_RCC_TIM6_CLK_ENABLE();
/* 配置定时器外设 */
htim.Instance = TIM6;
htim.Init.Period = 20-1;
htim.Init.Prescaler = 0;
htim.Init.ClockDivision = 0;
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.RepetitionCounter = 0;
HAL_TIM_Base_Init(&htim);
/* TIM6 TRGO 选择 */
sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&htim, &sMasterConfig);
/* 使能定时器 */
HAL_TIM_Base_Start(&htim);
sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE; /* 关闭采样保持模式,这个模式主要用于低功耗 */
sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO; /* 采用定时器6触发 */
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; /* 使能输出缓冲 */
sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_DISABLE;/* 不将DAC连接到片上外设 */
sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY; /* 使用出厂校准 */
if (HAL_DAC_ConfigChannel(&DacHandle, &sConfig, DAC_CHANNEL_1) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
hdma_dac1.Instance = DMA1_Stream0; /* 使用的DAM1 Stream0 */
hdma_dac1.Init.Request = DMA_REQUEST_DAC1_CH1; /* DAC触发DMA传输 */
hdma_dac1.Init.Direction = DMA_MEMORY_TO_PERIPH;/* 存储器到外设 */
hdma_dac1.Init.PeriphInc = DMA_PINC_DISABLE; /* 外设地址禁止自增 */
hdma_dac1.Init.MemInc = DMA_MINC_ENABLE; /* 存储器地址自增 */
hdma_dac1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; /* 外输操作数据宽度,半字 */
hdma_dac1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; /* 存储器操作数据宽度,半字 */
hdma_dac1.Init.Mode = DMA_CIRCULAR; /* 循环模式 */
hdma_dac1.Init.Priority = DMA_PRIORITY_HIGH; /* 优先级高 */
HAL_DMA_Init(&hdma_dac1);
/* 关联DMA句柄到DAC句柄下 */
__HAL_LINKDMA(&DacHandle, DMA_Handle1, hdma_dac1);
/* 启动DAC DMA 输出正弦波 */
if (HAL_DAC_Start_DMA(&DacHandle, DAC_CHANNEL_1, (uint32_t *)Sine12P, 30, DAC_ALIGN_12B_R) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
|
|