单片机实验三(D/A+DMA实验)

一、实验设备

PC机一台、实验箱一台。

二、实验内容

由定时器6溢出信号作为触发信号,控制DAC1(PA4) 循环输出阶梯波形信号,DAC1需要的数据使用DMA方式提供。实现图1的波形周期输出。

图1 理想实验结果波形图

三、实验过程

①先在CUBE软件中进行硬件的图形化配置,选择STM32F407ZE芯片后,先进行常规的RCC和SYS设置,并配置时钟树使得HCLK为168MHz,在项目管理中进行项目的命名、存放地址、IDE等配置。

图2 时钟树配置

②分析实验得,需开启定时器来作为DAC的触发,配置定时器周期为实验要求的1s,并开启更新事件(定时器配置如图3所示),开启DAC输出(如图4所示),并设置触发方式为定时器触发(如图5所示),以及DMA传输方式(如图6所示)的设置。

图3 定时器的配置

图4 DAC输出引脚配置 

 

图5 DAC触发方式配置

图6 DMA传输方式的开启 

③生成配置代码,进入到KEIL中完成相关功能代码,先进行KEIL的常规配置,设置晶振频率为8MHz,并设置硬件调试模式为J-LINK/J-TRACE Cortex,根据模拟电压波形为1V或2V,根据公式计算出对应的数字电压值,定义DAC输出的数组(如下代码所示),并输入DAC输出函数和定时器开启函数(如代码所示),编译下载后,进行硬件连线从而实现实验功能。

uint16_t dac_data[3]={0,1241,2482};
MX_GPIO_Init();
MX_DMA_Init();
MX_DAC_Init();
MX_TIM6_Init();
HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,(uint32_t*)dac_data,3,DAC_ALIGN_12B_R);
HAL_TIM_Base_Start(&htim6);

四、实验收获

①学会了DAC实际输出电压和软件输入数值的转化公式:实际电压=参考电压*(软件输入数值/2的寄存器默认位宽次方),其中STM32中默认参考电压为3.3V,而寄存器默认位宽为12位,所以实际电压=3.3V/(软件输入数值/4096),该实验中需要1V的电压时,软件输入数值约等于1241,而需要2V电压时,软件输入数值约等于2482.

②学会了在CUBE上的DAC使用定时器更新触发来输出信号、并采用DMA传递数据的配置和调用,学会了KEIL软件中DAC输出函数和定时器的开启。

③学会了在KEIL软件中使用DEBUG软件进行单步执行,并观察相关变量数值变化的方法。

版权声明:本文为CSDN博主「SiLenceJiong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/SiLenceJiong/article/details/122501275

一、实验设备

PC机一台、实验箱一台。

二、实验内容

由定时器6溢出信号作为触发信号,控制DAC1(PA4) 循环输出阶梯波形信号,DAC1需要的数据使用DMA方式提供。实现图1的波形周期输出。

图1 理想实验结果波形图

三、实验过程

①先在CUBE软件中进行硬件的图形化配置,选择STM32F407ZE芯片后,先进行常规的RCC和SYS设置,并配置时钟树使得HCLK为168MHz,在项目管理中进行项目的命名、存放地址、IDE等配置。

图2 时钟树配置

②分析实验得,需开启定时器来作为DAC的触发,配置定时器周期为实验要求的1s,并开启更新事件(定时器配置如图3所示),开启DAC输出(如图4所示),并设置触发方式为定时器触发(如图5所示),以及DMA传输方式(如图6所示)的设置。

图3 定时器的配置

图4 DAC输出引脚配置 

 

图5 DAC触发方式配置

图6 DMA传输方式的开启 

③生成配置代码,进入到KEIL中完成相关功能代码,先进行KEIL的常规配置,设置晶振频率为8MHz,并设置硬件调试模式为J-LINK/J-TRACE Cortex,根据模拟电压波形为1V或2V,根据公式计算出对应的数字电压值,定义DAC输出的数组(如下代码所示),并输入DAC输出函数和定时器开启函数(如代码所示),编译下载后,进行硬件连线从而实现实验功能。

uint16_t dac_data[3]={0,1241,2482};
MX_GPIO_Init();
MX_DMA_Init();
MX_DAC_Init();
MX_TIM6_Init();
HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,(uint32_t*)dac_data,3,DAC_ALIGN_12B_R);
HAL_TIM_Base_Start(&htim6);

四、实验收获

①学会了DAC实际输出电压和软件输入数值的转化公式:实际电压=参考电压*(软件输入数值/2的寄存器默认位宽次方),其中STM32中默认参考电压为3.3V,而寄存器默认位宽为12位,所以实际电压=3.3V/(软件输入数值/4096),该实验中需要1V的电压时,软件输入数值约等于1241,而需要2V电压时,软件输入数值约等于2482.

②学会了在CUBE上的DAC使用定时器更新触发来输出信号、并采用DMA传递数据的配置和调用,学会了KEIL软件中DAC输出函数和定时器的开启。

③学会了在KEIL软件中使用DEBUG软件进行单步执行,并观察相关变量数值变化的方法。

版权声明:本文为CSDN博主「SiLenceJiong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/SiLenceJiong/article/details/122501275

生成海报
点赞 0

SiLenceJiong

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

74HC138译码器的原理和使用

前言 译码器就是将每个输入的二进制代码译成对应的输出高低电平信号,和编码器互为逆过程。 百度百科 74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL&#xf