新手入门
- 积分
- 9
- 金钱
- 9
- 注册时间
- 2025-5-3
- 在线时间
- 2 小时
|
#include "./BSP/DAC/dac.h"
extern uint16_t g_dac_sin_buf[4096];
DAC_HandleTypeDef g_dac_dma_handle;
DMA_HandleTypeDef g_dma1_dac_handle;
void dac1_dma_wave_init(void)
{
DAC_ChannelConfTypeDef dac_ch_conf;
__HAL_RCC_DMA1_CLK_ENABLE();
g_dma1_dac_handle.Instance = DMA1_Stream6;
g_dma1_dac_handle.Init.Channel = DMA_CHANNEL_7;
g_dma1_dac_handle.Init.Direction = DMA_MEMORY_TO_PERIPH;
g_dma1_dac_handle.Init.PeriphInc = DMA_PINC_DISABLE;
g_dma1_dac_handle.Init.MemInc = DMA_MINC_ENABLE;
g_dma1_dac_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
g_dma1_dac_handle.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
g_dma1_dac_handle.Init.Mode = DMA_CIRCULAR;
g_dma1_dac_handle.Init.Priority = DMA_PRIORITY_MEDIUM;
g_dma1_dac_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
HAL_DMA_Init(&g_dma1_dac_handle);
__HAL_LINKDMA(&g_dac_dma_handle, DMA_Handle1, g_dma1_dac_handle);
g_dac_dma_handle.Instance = DAC;
HAL_DAC_Init(&g_dac_dma_handle);
dac_ch_conf.DAC_Trigger=DAC_TRIGGER_T6_TRGO ;
dac_ch_conf.DAC_OutputBuffer=DAC_OUTPUTBUFFER_DISABLE;
HAL_DAC_ConfigChannel(&g_dac_dma_handle,&dac_ch_conf,DAC_CHANNEL_2);
HAL_DMA_Start_IT(&g_dma1_dac_handle,(uint32_t)g_dac_sin_buf,(uint32_t)&DAC->DHR12RD,0);
}
void HAL_DAC_MspInit(DAC_HandleTypeDef *hdac)
{
if(hdac->Instance==DAC)
{
GPIO_InitTypeDef gpio_init_struct;
__HAL_RCC_SPI1_CLK_DISABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_TIM2_CLK_DISABLE() ;
__HAL_RCC_TIM6_CLK_ENABLE() ;
__HAL_RCC_DAC_CLK_ENABLE();
gpio_init_struct.Pin =GPIO_PIN_5;
gpio_init_struct.Mode = GPIO_MODE_ANALOG;
gpio_init_struct.Pull=GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &gpio_init_struct);
}
}
void dac1_dma_wave_enable( uint16_t ndtr1, uint16_t arr1, uint16_t psc1)
{
TIM_MasterConfigTypeDef master_config={0};
TIM_HandleTypeDef g_timx_chy_handle={0};
__HAL_RCC_TIM6_CLK_ENABLE() ;
g_timx_chy_handle.Instance = TIM6;
g_timx_chy_handle.Init.Prescaler=psc1;
g_timx_chy_handle.Init.Period=arr1;
g_timx_chy_handle.Init.CounterMode=TIM_COUNTERMODE_UP;
HAL_TIM_Base_Init(&g_timx_chy_handle);
master_config.MasterOutputTrigger = TIM_TRGO_UPDATE;
master_config.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&g_timx_chy_handle, &master_config);
HAL_DAC_Stop_DMA(&g_dac_dma_handle, DAC_CHANNEL_2 );
HAL_DAC_Start_DMA(&g_dac_dma_handle, DAC_CHANNEL_2,(uint32_t *)g_dac_sin_buf, ndtr1, DAC_ALIGN_12B_R );
HAL_TIM_Base_Start_IT(&g_timx_chy_handle);
}
|
|