DAC配置
DAC_HandleTypeDef DAC1_Handler;//DAC句柄
void DAC_Timer_Init(u16 arr,u16 psc);
//初始化DAC
void DAC1_Init(void)
{
DAC_ChannelConfTypeDef DACCH1_Config;
DAC1_Handler.Instance=DAC;
HAL_DAC_Init(&DAC1_Handler); //初始化DAC
DACCH1_Config.DAC_Trigger=DAC_TRIGGER_T6_TRGO; //定时器2的更新触发
DACCH1_Config.DAC_OutputBuffer=DAC_OUTPUTBUFFER_DISABLE;//DAC1输出缓冲关闭
HAL_DAC_ConfigChannel(&DAC1_Handler,&DACCH1_Config,DAC_CHANNEL_1);//DAC通道1配置
HAL_DAC_Start(&DAC1_Handler,DAC_CHANNEL_1); //开启DAC通道1
DACDMA_Config();//初始化DMA
DAC_Timer_Init(90-1,1);
}
//DAC底层驱动,时钟配置,引脚 配置
//此函数会被HAL_DAC_Init()调用
//hdac:DAC句柄
void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_DAC_CLK_ENABLE(); //使能DAC时钟
__HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOA时钟
GPIO_Initure.Pin=GPIO_PIN_4; //PA4
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟
GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}
TIM6配置
TIM_HandleTypeDef TIM6_Handler; //定时器句柄
//通用定时器6中断初始化
//arr:自动重装值
//psc:时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,单位:Mhz
//这里使用的是定时器6!
void DAC_Timer_Init(u16 arr,u16 psc) //定时器6初始化
{
__HAL_RCC_TIM6_CLK_ENABLE(); //使能TIM6时钟
TIM6_Handler.Instance=TIM6; //通用定时器6
TIM6_Handler.Init.Prescaler=arr; //分频系数
TIM6_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //向上计数器
TIM6_Handler.Init.Period=psc; //自动装载值
TIM6_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1; //时钟分频因子
HAL_TIM_Base_DeInit(&TIM6_Handler); //时基复位
HAL_TIM_Base_Init(&TIM6_Handler); //定时器6初始化
TIM6->CR2 &= ~(0x0070); //清除定时器6MMS位
TIM6->CR2 |= 0x0020; //选择定时器更新事件作为触发输出
__HAL_TIM_ENABLE(&TIM6_Handler); //开启定时器6
}
DMA配置
DMA_HandleTypeDef DAC1DMA_Handler; //DMA句柄
//DMAx的各通道配置
//这里的传输形式是固定的,这点要根据不同的情况来修改
//从存储器->外设模式/8位数据宽度/存储器增量模式
void DACDMA_Config(void)
{
__HAL_RCC_DMA1_CLK_ENABLE();//DMA1时钟使能
//Tx DMA配置
DAC1DMA_Handler.Instance=DMA1_Stream5; //数据流选择
DAC1DMA_Handler.Init.Channel=DMA_CHANNEL_7; //通道选择
DAC1DMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH; //存储器到外设
DAC1DMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE; //外设非增量模式
DAC1DMA_Handler.Init.MemInc=DMA_MINC_ENABLE; //存储器增量模式
DAC1DMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD; //外设数据长度:16位
DAC1DMA_Handler.Init.MemDataAlignment=DMA_PDATAALIGN_HALFWORD; //存储器数据长度:16位
DAC1DMA_Handler.Init.Mode=DMA_CIRCULAR; //循环模式
DAC1DMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM; //中等优先级
DAC1DMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
DAC1DMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
DAC1DMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE; //存储器突发单次传输
DAC1DMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE; //外设突发单次传输
HAL_DMA_DeInit(&DAC1DMA_Handler);
HAL_DMA_Init(&DAC1DMA_Handler);
DMA1_Stream5->CR|=1; //使能DMA(别用什么辣鸡库函数了)
__HAL_LINKDMA(&DAC1_Handler,DMA_Handle1,DAC1DMA_Handler); //将DMA与DAC1联系起来
//启动DAC和DMA
HAL_DAC_Start_DMA(&DAC1_Handler,DAC_CHANNEL_1,(uint32_t*)TriWave_Value, 210,DAC_ALIGN_12B_R);
}
三角波数据
//210个点
u16 TriWave_Value[]={0 ,
39 ,78 ,117 ,156 ,195 ,234 ,273 ,312 ,351 ,390 ,429 ,468 ,507 ,546 ,585 ,624 ,663 ,702 ,741 ,780 ,819 ,858 ,897 ,936 ,975 ,
1014 ,1053 ,1092 ,1131 ,1170 ,1209 ,1248 ,1287 ,1326 ,1365 ,1404 ,1443 ,1482 ,1521 ,1560 ,1599 ,1638 ,1677 ,1716 ,1755 ,1794 ,1833 ,1872 ,1911 ,1950 ,
1989 ,2028 ,2067 ,2106 ,2145 ,2184 ,2223 ,2262 ,2301 ,2340 ,2379 ,2418 ,2457 ,2496 ,2535 ,2574 ,2613 ,2652 ,2691 ,2730 ,2769 ,2808 ,2847 ,2886 ,2925 ,
2964 ,3003 ,3042 ,3081 ,3120 ,3159 ,3198 ,3237 ,3276 ,3315 ,3354 ,3393 ,3432 ,3471 ,3510 ,3549 ,3588 ,3627 ,3666 ,3705 ,3744 ,3783 ,3822 ,3861 ,3900 ,
3939 ,3978 ,4017 ,4056 ,4095 ,4056 ,4017 ,3978 ,3939 ,3900 ,3861 ,3822 ,3783 ,3744 ,3705 ,3666 ,3627 ,3588 ,3549 ,3510 ,3471 ,3432 ,3393 ,3354 ,3315 ,
3276 ,3237 ,3198 ,3159 ,3120 ,3081 ,3042 ,3003 ,2964 ,2925 ,2886 ,2847 ,2808 ,2769 ,2730 ,2691 ,2652 ,2613 ,2574 ,2535 ,2496 ,2457 ,2418 ,2379 ,2340 ,
2301 ,2262 ,2223 ,2184 ,2145 ,2106 ,2067 ,2028 ,1989 ,1950 ,1911 ,1872 ,1833 ,1794 ,1755 ,1716 ,1677 ,1638 ,1599 ,1560 ,1521 ,1482 ,1443 ,1404 ,1365 ,
1326 ,1287 ,1248 ,1209 ,1170 ,1131 ,1092 ,1053 ,1014 ,975 ,936 ,897 ,858 ,819 ,780 ,741 ,702 ,663 ,624 ,585 ,546 ,507 ,468 ,429 ,390 ,
351 ,312 ,273 ,234 ,195 ,156 ,117 ,78 ,39};