请选择 进入手机版 | 继续访问电脑版

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

使用MDK 自带逻辑分析仪显示任意波形

[复制链接]
fightingboon 发布时间:2019-10-31 13:04
发现有人对使用MDK自带逻辑分析仪实现波形输出比较感兴趣。下面使用STM32F334的DAC模块,输出一任意波形,并通过ARM MDK IDE自带的逻辑分析仪将波形显示出来。我尽量就整个过程描述得详细点。

" J/ m( w, w( h0 ^# ]: J# O0 @' H. h+ d
11.png

9 ]" R3 P& I+ i" `. |# M8 `
我这里使用TIM6的更新事件触发DMA,让DMA将我事先准备好的内存数据传输到DAC通道1数据保持寄存器【DAC1->DHR12R1】。然后,我在TIM6的中断里将DAC数据输出寄存器【DOR】的内容读到一个全局变量【DAC_Out】,将来作为逻辑分析仪里的一个模拟量并输出该信号。

/ ^9 K* ]+ L/ O# D9 d% j$ Y
同时,我将DAC的输出端接到ADC1模块的通道1作为其输入,将DAC过来的信号进行AD转换,并通过DMA将ADC结果存放到另一个内存空间。我利用TIM3更新事件周期性触发ADC,并在TIM3更新中断里将最新ADC数据赋给另一个全局变量【ADC_Res】,作为MDK_IDE逻辑分析仪的另外一路模拟量,也将输出其波形。

, ]/ P2 y1 L3 k! ~! D5 T
一、下面开始使用STM32CubeMx做图形化配置
4 {3 \2 S2 n4 t; |
1、DAC的配置如下。配置很简单,只是开启了DAC通道1的输出使能,至于输出缓冲可根据具体情况来配置,这里将其使能了。

' n+ A% _4 ?- r7 D3 n9 k0 Q
22.png

: T9 V( d; @( N/ M
2、配置TIM6。主要是使用它的更新事件触发DMA,将数据从内存传输到DAC的寄存器。

* N9 j3 s4 ^2 T
33.jpg

: l/ t+ D3 i& ?) P) j% d
3、ADC的配置。这里仅开启一个通道,TIM3更新事件作为ADC启动触发事件。ADC转换完成事件触发DMA传输,将ADC结果取走。

$ d& Q7 |6 c( U
44.jpg

( J4 ~7 A  _$ W% c$ M, d
4、TIM3的配置。它的配置也很简单,给定适当时基参数,使能更新中断。
5 z' M& b6 c7 w8 ]2 m) D6 V: W' H
55.png

2 U3 ]; ?$ o! \) S. H
外设配置主要就上面这些,其它有关DMA、RCC的配置就不再贴图了。
  P9 \2 c: ]! m( j4 m, D7 W2 b
二、配置完成后,生成初始化文件,然后添加用户代码

9 x9 t  ~6 D) ]$ n% B* P5 x
1、数据准备。因为要借助DAC输出一任意波形,可以先借助其它工具模拟一下输出波形。最便捷的就是使用EXCEL的数学函数功能模拟相关波形。这里使用几个三角函数叠加而成一个新的函数。基于该函数生成一个数据序列用于DAC输出。

( C5 s) k7 N9 \) J+ k  V& {
66.png

  Z6 |& T1 h: Q
2、添加用户代码。
要添加的用户代码就是下面几行,意思都很明确了,无须过多解释。其中length是宏定义过的一个常量,代表数据个数。下面代码基于STM32Cube库。

6 d+ G) t/ x% [, D( y- W7 M7 M' S
77.png

( [& @; n% R, r5 V& Q; S1 g
3、中断函数处理。
在TIM6的更新中断里加入如下代码,实时获取DAC输出数据。
DAC_Out=DAC1->DOR1;
在TIM3的更新中断里加入如下代码,实时读取ADC结果。
ADC_Res=(uint16_t)Adc_Value[Length-DMA1_Channel1->CNDTR];
- ~  N8 p+ A8 v0 }# _6 f/ Q
三、针对MDK逻辑分析仪的配置

% y. W! r7 Q4 h
88.jpg
( h0 F9 [6 `- F# u
这里提醒下,那个Core_clock一定要跟你芯片配置的系统时钟一致。另外Trace Enable一定要勾选上。联机进入调试状态后,继续进行对逻辑分析仪的配置。下图中的红色数字1/2/3表示操作顺序。
/ a& b" G* e+ p9 J" n8 J, E
99.png
9 }' o) n5 l2 _
点击箭头处添加我们之前准备好的全局变量并做适当配置。这里添加的两个变量都是模拟量,所以显示类型选Analog,显示颜色根据个人喜好。注意模拟量有最值的设定问题,太大、太小都不合适,这个不难理解。屏蔽处的配置根据要显示的数据范围来指定,本实验数据不会超过0xfff,所以就按图中配置了。
: m" X$ C, X! Q0 W2 _2 k
四、查看结果

; i  m/ i7 t5 e+ _8 _* }" a
下面的第一幅截图就是通过MDK自带的逻辑分析仪输出的两路波形。红色曲线是DAC输出的波形图,蓝色曲线是ADC转换后得到的实时结果波形图。

/ Z3 j. [8 \* c& r, g; Y" e
不难看出,两路波形是一致的周期性输出,但ADC的输出与DAC的输出存在相差,因为ADC的结果是对DAC输出进行采样转换后所得的结果,所以时序上存在滞后。第二幅图是调整时间观测宽度后的截图。
  a; Q: S, g9 T0 u! Y1 }( s% `
10.jpg
: E6 S. g" |+ y# s# |1 ]
8 q) P  H3 p, V: A7 k4 r
111.jpg
8 }9 M+ L: ~& Z# O8 K5 M
好,关于用MDK自带逻辑分析仪进行任意波形的输出就介绍到这里,顺便也简单介绍了STM32 ADC/DAC的一些配置与应用。
关于MDK自带的这个工具,如果会用了,有时还是会给我们的调试带来些方便。使用起来不难,有兴趣的话不妨试试。3 K/ a! _( i" a4 j8 W

4 k$ c* v' S5 b2 R& s
$ a+ [9 T/ g8 u

( K1 R2 v0 z" i, S; d
* }# S8 l. R. m: F
3 J6 c6 I: r8 i( I  q7 W& \) T0 k. ^+ d

) }" l( x" u0 v7 g* r( T' y/ H
收藏 8 评论6 发布时间:2019-10-31 13:04

举报

6个回答
goyhuan 回答时间:2019-10-31 15:54:34
七哥 回答时间:2019-10-31 17:40:58
不赖
w014017 回答时间:2019-10-31 19:58:10
wyxy163@126.com 回答时间:2019-10-31 20:10:21
提示: 作者被禁止或删除 内容自动屏蔽
飞之天之飞 回答时间:2019-10-31 20:41:47
不错
AI++ 回答时间:2019-11-1 00:06:52
非常好

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版