前期准备:
- STM32CubeMX
- STM32RCT6核心板
- IDE Keil(MDK-ARM)
STM32CubeMX部分
1. 配置时钟
选择STM32F103RCTx系列芯片,配置时钟的同时会自动配置IO口引脚 将HCLK设置为最大频率72MHz
2. 配置DAC
什么是DAC?
数模转换器,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。模数转换器中一般都要用到数模转换器
简单来讲,就是将键盘敲上去的一堆数字,变成看不见摸不着的量
1. DAC的触发方式
- 定时器触发:TIM2、TIM4、TIM5、TIM6、TIM7、TIM8共6个定时器可以触发
- 外部中断触发:EXTI线路9
- 软件触发
2. DAC可发生的波形:
3. DAC输出电压:
DAC输出 = VREF x (DOR/4095) 2.4V < VREF范围 < 3.3V DAC的引脚应该设置成模拟输入(AIN)模式
总结:
- 2个DAC转换器
- 每个转换器对应1个输出通道
- 可采用DAC+DMA方式使用
- 8位或者12位单调输出
- 12位模式下数据左对齐或者右对齐
- 同步更新功能
- 噪声波形生成
- 三角波形生成
- 双DAC通道时,可同时或单独转换
- 外部触发转换
- OUT1通道输出
- External Trigger (外部中断EXTI9触发):不勾选
- Output Buffer (使能DAC输出缓存):DAC集成了2个输出缓存,可以用来减少输出阻抗,无需外部运放即可直接驱动外部负载。
- Tigger (触发方式): None(不需要其他任何的触发源,直接使用DAC_SetChannelxData(),就可以设定输出电压的大小。如果使用了软件触发,那么,每次在使用DAC_SetChannelxData()修改输出电压后,还需要调用DAC_SoftwareTriggerCmd(),目的是使能软件触发。由于:软件触发是硬件在一个APB1时钟周期后自动关断的,于是,每次修改输出电压的值后,都要调用DAC_SoftwareTriggerCmd()方法,才能生效。)
3. 工程生成
工程管理依旧是这几个选项,然后GENERATE CODE,STM32CubeMX部分完成。
Keil部分
? HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel);
? HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel);
? HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment);
? HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel);
? HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data);
? uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel);
输出矩形波:
在main.c文件添加
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048);
HAL_DAC_Start(&hdac,DAC_CHANNEL_1);
输出电压 = ( 设定的DAC / 4096 ) * 3.3 V => ( 2.48 / 4096 ) * 3.3 ≈ 1.6 V
编译下载时需要选择相对应的下载器,勾选以下 运行即可
如图为PA4(DAC)引脚电压:
输出三角波:
重新点开CubeMX工程,重新配置
- Tigger (触发方式): 定时器2
- 波形生成模式(Wave generation mode) :
三角波发生器(Triangle wave generation)勾选 噪声波形(noise wave generation)不选择 - 最大三角波幅(Maximum Triangle Amplitude) :4095
如果最大电压是3.3V,那么三角波幅值为3.3V 0 ~ 4095 对应 0V ~ 3.3V
配置定时器,频率为2MHZ,配置TIM有讲过,这里和下面涉及TIM的知识点快进不再讲解,不了解的具体请看 【STM32】HAL库 CubeMX例程四—定时器中断(附工程源码)
由图可知三角波一个周期是一上一下,一上(一下)周期是4095,两趟就是4095 * 2
因此三角波频率 = (定时器频率 / (4095 * 2)) 在main.c添加
HAL_TIM_Base_Start(&htim2);
HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
用示波器看到的就是三角波
链接:本期内容Keil工程 提取码:6735
|