GD32 DAC+TIMER+DMA实现正弦波

6 篇文章 0 订阅
1 篇文章 0 订阅

一、目的

1.使用GD32的DAC、TIMER、DMA实现正弦波

二、原理

1.正弦波:周期一定,相同时间间隔时能够取得不同的数值(符合SIN函数)。

二、芯片功能组合实现SIN

1.DAC:能够输出不同的电压值(0-3.3v)

2.TIMER:能够提供均匀的时间

3.DMA:能够将数据从存储器传输到外设而不占用CPU资源

4.SIN数据:本工程中使用的是“野火”DAC正弦波工程中提供的正弦数据

四、GD32实现正弦波的步骤图

1.步骤一:定时器按固定间隔触发DAC

2.步骤二:DAC被触发后,发送DMA请求

3.步骤三:DMA接收到DAC请求后,将一个数据发送到DAC的数据保持寄存器中

4.步骤四:DAC被外部触发后,会将DAC数据保持寄存器中的数据转移到数据输出寄存器中,输出数据对应的电压

五、实现环境

1.引脚:PA4

2.芯片:GD32F103X

3.开发板:GD32103C-START

4.显示环境:数字示波器

-----------------------------详讲GD32中DAC+TIMER+DMA如何实现------------------------------

六、DAC(基础:可以将数据转换为模拟输出电压)

1.DAC结构图

1)TIMER6_TRGO,为外部定时器触发;配置触发源时选择它,对应函数:timer_master_output_trigger_source_select()

2)DMA requestx,DMA请求;在有外部触发同时DAC中的DMA功能使能后,会发送DMA触发请求,对应函数:dac_dma_enable()

3)DHx,DAC数据保持寄存器;用于保存将要转移到输出寄存器(DOx)的数据,及下一个输出的数据。DMA传输时,这个寄存器就是DAC的接收地址。

2.DAC输出电压的计算

七、TIMER6(基本定时器)

1.结构图

1)触发选择,这里说的是主输出的触发源要选择相应的参数,之后发送TIMERx_TRGO触发信号;对应函数:timer_master_output_trigger_source_select

2.相应参数如何选择(老实说这个比较坑,在文档的功能说明中没找到,是直接看寄存器才发现的,-_-||)

1)TIMERx_CTL1,就是进行同步时需要进行配置的寄存器

2)MMC,中选择更新(010为定时器触发TIMERx_TRGO的时间。对应函数:timer_master_output_trigger_source_select

3.为什么要选择更新(010为定时器触发???

1)阅读资料可知,定时器一旦超过阈值(自动重装载值),就会产生更新事件,同时更新所有寄存器。

2)结论是,更新事件发生时,时间已到设定的时间,反复实现更新事件就会产生定时触发TIMERx_TRGO。

3)防止额外因素,使能定时器更新事件;对应函数timer_update_event_enable

 

八、DMA

1.结构框图

2.DMA传输步骤

1)从源地址读取数据

2)之后将读取的数据存储到目的地址

3.DACDMA是如何配合,实现数据的传输的?

1)(重点)DMA的外设握手

1)从外设握手功能中,可以看到,在DMA给外设发送数据时,需要等外设给DMA控制器发送请求,之后DMA发送应答信号后,才会进行数据传输。

2)本实现结论:也就是说DAC给DMA一个请求(此请求由定时器触发),DMA才给DAC的发送一个数据;所以数据才能依次的传输过来。

4.任何一个DMA的通道都可以连接到DAC吗?

1)答案:错

2)由映射图可知,DAC_CH0对应的只有DMA1的Channel2.

5.DMA配置过程中难点--外设地址的计算

1.一般是寄存器的地址;如DAC的DAC0_R12DH(DAC0 12位右对齐数据保持位)

实际地址(DAC0_R12DH=实际地址(DAC0+偏移地址(DAC0_R12DH

1)实际地址(DAC0)---0x40007400

2)偏移地址(DAC0_R12DH)---0x08

3)实际地址(DAC0_R12DH)=0x40007408

九、结果波形

十、代码

GD3210x-DAC_TIMER_DMASIN.rar-C文档类资源-CSDN下载

  • 0
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值