目录
1、准备材料
2、实验目标
3、实验流程
3.0、前提知识
3.1、CubeMX相关配置
3.1.1、时钟树配置
3.1.2、外设参数配置
3.1.3、外设中断配置
3.2、生成代码
3.2.1、外设初始化调用流程
3.2.2、外设中断调用流程
3.2.3、添加其他必要代码
4、常用函数
5、烧录验证
5.1、实验具体流程
5.2、实验现象
6、注释解析
参考资料
1、准备材料
开发板(正点原子stm32f407探索者开发板V2.4)
STM32CubeMX软件(Version 6.10.0)
野火DAP仿真器
keil µVision5 IDE(MDK-Arm)
一台示波器
2、实验目标
使用STM32CubeMX软件配置STM32F407开发板的DAC OUT1实现输出三角波
3、实验流程
3.0、前提知识
STM32F407的DAC输出引脚除可以输出 DACoutput = VREF+ * DOR / 4095 的模拟电压之外,其DAC控制逻辑中还有两个重要的波形生成器,分别为三角波和噪声波,本小节的实验主要以生成三角波为例,只会在“3.0、前提知识”中简单提到噪声波相关内容,在实际生成过程中两者的设置类似,且均简单易理解
使用DAC输出指定三角波/噪声波需要先指定DAC的输出触发源,DAC输出的触发源一共有7个,包括Timer 2/4/5/6/7/8 Trigger Out event和Software trigger,一般使用定时器的溢出时间作为DAC输出的触发源,本实验采用了TIM6的溢出更新事件作为DAC OUT1 三角波的触发源,所有可选的触发源如下图所示
当DAC输出三角波时需要设置Maximum Triangle Amplitude参数,当触发源定时器每次产生溢出更新事件时,DAC的输出值就会从基值增加1/减少1,因为TIM6基础定时器只能向上计数,因此当TIM6每次溢出时,DAC的输出会增加1,直到增加到设置的Maximum Triangle Amplitude参数值为止,然后逐渐减少直到基值,这个过程会反复执行从而生成三角波,上述过程如下图所示(注释1)
当DAC输出伪噪声波时需要设置Noise Amplitude参数,其主要配置生成噪声波使用的12位LFSR寄存器解锁的位,如下图所示为DAC使用LFSR寄存器生成伪噪声的算法结构图,这里具体不做深究(注释1)
3.1、CubeMX相关配置
请先阅读“STM32CubeMX教程1 工程建立”实验3.4.1小节配置RCC和SYS
3.1.1、时钟树配置
系统时钟树配置均设置为STM32F407总线能达到的最高时钟频率,具体如下图所示
3.1.2、外设参数配置
在Pinout & Configuration页面左边功能分类栏目Analog中单击其中DAC,在Mode中勾选OUT1 Configuration
DAC OUT1的触发源选择TIM6外部触发,最大三角波幅值设置为4095
具体配置如下图所示
在Pinout & Configuration页面左边功能分类栏目Timers中单击其中TIM6,勾选Activated激活定时器,配置其计数器参数溢出时间为0.1ms,具体参数解释请阅读“STM32CubeMX教程5 TIM 定时器概述及基本定时器”
外部事件触发选择更新事件Updata Event,具体配置如下图所示
3.1.3、外设中断配置
此实验无需开启DAC的任何中断
3.2、生成代码
请先阅读“STM32CubeMX教程1 工程建立”实验3.4.3小节配置Project Manager
单击页面右上角GENERATE CODE生成工程
3.2.1、外设初始化调用流程
请阅读“STM32CubeMX教程15 DAC - 输出3.3V内任意电压”实验“3.2.1、外设初始化调用流程”小节
3.2.2、外设中断调用流程
此实验无需开启DAC的任何中断
3.2.3、添加其他必要代码
在主函数中启动DAC通道1输出,默认基值设置为0即可,源代码如下所示
/*启动DAC输出*/
HAL_DAC_Start(&hdac,DAC_CHANNEL_1);
/*设置DAC三角波输出基值*/
int32_t DacValue=0;
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_L,DacValue);
/*启动TIM6触发源*/
HAL_TIM_Base_Start(&htim6);
printf("Reset\r\n");
4、常用函数
请阅读“STM32CubeMX教程15 DAC - 输出3.3V内任意电压”实验
5、烧录验证
5.1、实验具体流程
“配置定时器TIM6实现0.1ms定时时间 -> 配置其外部触发事件选择更新事件 -> 配置DAC OUT1触发源、生成波形模式及最大幅值 -> 主函数中启动DAC OU1输出即可”
5.2、实验现象
烧录程序,单片机上电后,将示波器的探头挂钩与DAC OUT1引脚PA4相连接,接地环与开发板上的GND引脚连接,将示波器每格电压幅值调节为1.00V,将每格子采集时间调节为400ms,然后开启示波器对DAC OU1输出的波形采集
设置Maximum Triangle Amplitud最大三角波幅值设置为2047时由示波器采集到的三角波如下图所示,其中三角波的幅值电压为1.48V,大致为3.3V的一半,波形频率为2.446Hz,计算的周期大约为408.8ms,定时器溢出时间为0.1ms,期待的周期为0.1*2048*2=409.6ms,与示波器采集结果大致一致
设置Maximum Triangle Amplitud最大三角波幅值设置为4095时由示波器采集到的三角波如下图所示,其中三角波的幅值电压为2.96V,波形频率为1.207Hz,计算的周期大约为828.5ms,定时器溢出时间为0.1ms,期待的周期为0.1*4096*2=819.2ms,与示波器采集结果大致一致
6、注释解析
注释1:图片来源STM32F4xx 中文参考手册
参考资料
STM32Cube高效开发教程(基础篇)