你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32的TIM、DMA、DAC实例

[复制链接]
yumeii 发布时间:2019-12-26 14:17
有人想使用STM32的TIMER及DMA,通过DAC实现指定的模拟输出,实现起来似乎不太顺畅。我这里借助于STM32F334Nucleo开发板,通过TIM6触发DMA传输,让DAC输出一路正弦波【半波】,做个简单示例,仅供参考。

1、基本原理:TIM6的更新事件周期性的触发DMA;DMA将预备好的内存数据写入到DAC的输出数据寄存器;以实现DAC通道1输出一路半波正弦波信号。


2、初始配置:【使用STM32CubeMx图形化工具进行配置】


2.1 TIM6的配置,做基本时基参数配置即可,同时开启基于TIM6更新事件的DMA传输配置【circula 模式】


1.png

2.png

3、完成上述配置后,生成含有初始化代码的工程。

4、添加用户代码。

4.1 准备用于DAC输出的数据。


我这里准备的数据基于如下正弦函数来做。准备好的数据放在数组 TodisplayData【】里,供DMA取用。


3.png


#define Step      (200)


#define half_pai (3.141592/2)


#define StepAngel (half_pai/Step)


#define Size_Array  (Step* 2)


uint16_t TodisplayData[Size_Array] = {0};

for (i=0;i<Step;i++)


{


TodisplayData=(uint16_t)(4000*sinf(StepAngel*i));


}


for (i=Step;i<Step*2;i++)


{


TodisplayData=(uint16_t)(4000*sinf(StepAngel*(Step*2-i)));  


}


4.2使能TIM6的基于更新事件的DMA请求。


  __HAL_TIM_ENABLE_DMA(&htim6,TIM_DMA_UPDATE);

4.3使能TIM6的计数器计数。


  __HAL_TIM_ENABLE(&htim6);


4.4使能DAC通道1输出启动。


  HAL_DAC_Start(&hdac1,DAC_CHANNEL_1 );

4.5完成基于TIM6更新事件的DMA传输的相关配置,并开启该传输相关中断。


HAL_DMA_Start_IT(&hdma_tim6_up,(uint32_t)TodisplayData, (uint32_t)&DAC1->DHR12R1 , Step*2-1);

5、验证结果。


我们可以通过示波器看到DAC通道1输出周期性的波形。我这里是借助MDK IDE自带的逻辑分析仪看到的结果,可以参考。如下图:


4.png


OK,到此也实现了预期的结果,其实整个过程也比较简单。

最后,稍微提醒两点:


1、对于DAC输出数据寄存器多说几句,以12位为例。


我们要写入的DAC数据输出寄存器是DAC_DHR12Rx或DAC_DHR12Lx,即数据保持寄存器,具体使用哪个看你选择的是左对齐还是右对齐数据格式。而真正体现在输出端所对应的输出数据寄存器是DORx寄存器,该寄存器是只读的,即不能被写入的。DAC_DHR寄存器的内容被加载到DOR寄存器,可能是自动完成,也可能需依靠触发事件激发完成。具体跟我们的配置有关。我们读取DAC通道实际输出的数据时应以DORx寄存器为准。

2、关于DMA配置有个地方也提醒下。用cubeMx配置时选择的内存数据宽度【BYTE/HALF WORD/WORD]注意要跟你实际定义内存数组的数据类型一致。不要DMA配置时MEMORY宽度选择WORD,而在定义内存数组数据类型时使用HALF WORD(uint16)类型。这个地方很容易出错,还很隐蔽。特作提醒。

收藏 评论0 发布时间:2019-12-26 14:17

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版