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

简易示波器(二)AD采样+画图

[复制链接]
294479435@qq.co 发布时间:2016-1-9 16:02
本帖最后由 00-405686 于 2016-1-9 16:25 编辑 " s. Z' W: a2 E& \
# n, {) i) v7 U- @& Z
AD采样+画图
简易示波器功能描述:
* C: G# _+ S* U' C7 }: c) F& e
1.测量直流信号、交流信号的电压幅度;
; Y. D) `: ]! i; i
2.测量交流信号的周期,并计算频率;
; i3 o% m( U: b% n( F
3.显示交流信号波形;

* Y& A5 |1 \/ ?8 w) u
4.波形的放大和缩小;
7 g; Y; _7 C# N5 e  S; Q
5.···········

$ p  o# Q- Y+ v) C3 N; ~
暂时就先实现以上几个简单的基本功能,STM32芯片是3.3V供电,AD采样也只有0-3.3V,前端没有做硬件电路,所以这些测量暂时都是0-3.3V;

  _; l2 B; D: c2 x2 F" L1 W  r
目前实习功能:AD采样和显示;
效果如图:
P60109-150706.jpg P60109-150655.jpg
7 R' {. P- W9 `
: ^) m8 k5 O5 H3 W" ?/ B" z  u( r( K
& E1 B& `( g# q1 f0 @. E
实现过程:(我以前都是用STM32的DSP库开发,而STM32F469Discovery的DSP库的显示驱动还没有,所以我暂时只能在HAL库上进行开发,所以很多东西都不是很熟悉,而实现的功能也是大多基于

) f% H4 K4 z( [& E
官方的例程开发,望各位路过大神多多指点,谢谢!)
- V5 C7 Z; O8 [( M
首先,在官方库路径:stm32cubef4\Projects\STM32469I-Discovery\Applications\STemWin中以Hello World为模版进行开发
  a( ]/ B6 U* r0 Q- _! k5 }
1.去掉例程中的BASIC_HelloWorld文件,以及main.c中的MainTask子程序,然后就可以开始自己的编程了;
( s! q5 K* p+ f& _3 o5 G5 R
如图:
QQ截图20160109153538.jpg 1 ]7 K: M6 Y$ ?

+ M+ J! O; V& @1 M: o' ?$ A3 b4 k5 O3 v
" C  ^+ G7 c& h
2.新建一个空白文件,作为C文件,用作ADC初始化的C文件,这里C文件也直接从在官方库路径:stm32cubef4\Projects\STM32469I-Discovery\Examples\ADC\ADC_RegularConversion_DMA中的Src文件中的main.c中找到自己需要的代码:
然后在main函数中添加ADC相关的代码:' W2 v6 X* f. _, |) V$ C, ]2 @: ?
其他就是关于ADC的宏定义,按照例程中的复制到main.h文件中
* i+ ^. b0 p: _+ ?1 g; t$ j在mian.c中定义一个uint16_t uhADCxConvertedValue[500] ={ 0};用作存ADC采样值在把DMA中数据改为半字
' f3 N* o7 T& U: \% H+ V+ `  hdma_adc.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;//DMA_PDATAALIGN_WORD;
; K4 h9 Z% K0 c9 M" ~; V  hdma_adc.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;//DMA_MDATAALIGN_WORD;;! C3 r- ?, T: j8 `: P) k( R
到这里ADC就差不多改好了( g- M# S: s, Z7 _" L2 y$ D
然后就是用STemWin画图了,这个GUI我也是初次使用,所以也是在摸索中,具体有些什么经验也谈不上,所以就不过多叙说了
, L3 i0 R# P* z3 y  `6 F
GUI_SetBkColor(GUI_BLACK);

2 g) d% a# j+ V
GUI_Clear();
, k$ Q# X; y# y/ Q( @8 n/ n5 H; x+ c
GUI_SetColor(GUI_WHITE);
0 g) K! {2 D* z9 Y+ ~
GUI_SetFont(&GUI_Font8x16);
" r# w  I9 L/ w: k: U3 _8 r
设置背景色、字体颜色和字体

' m6 P. u; N  O  N
for(i = 40; i<=440; i = i+80)/ V, {0 U" p) s  a; s
        {8 v; }8 ~& {8 l. ~4 S! ]
          GUI_DrawHLine(i,50,550);
8 a4 o* R3 ]$ U2 D                GUI_GotoXY(30,i-8);
; u9 S; j, ]3 {1 {" ~          GUI_DispDec(y_lable[5-(i-40)/80],1);( |/ d# F$ F2 ~+ y' M( s
        }0 Y' R, Q" C9 ]. F$ r* q
        for(i = 50; i<=550; i = i+100)
4 a5 f* g) J2 |        {3 I/ n2 [. r8 @8 k; X3 I' s5 O
          GUI_DrawVLine(i,40,440);
* f9 ^8 [$ R7 E0 }7 q                GUI_GotoXY(i-8,450);
* v4 r' @6 x) G' j$ i4 C! @0 ~8 t          GUI_DispDec(x_lable[(i-50)/100],3);
1 a# V1 t" _5 O* Y        }( ^8 L; a7 C( U* R: _) w; ~
画背景网格
6 R6 f- A  u4 e) Z+ r! |9 mfor(i = 0; i<500;i++)
- d6 K. b$ J3 J( L. L        {
. W* [$ Z7 G% t- `                y3 = 440-(80*3.3*uhADCxConvertedValue/4095);
7 }) v" J" F; V) W8 Z# R. _" G0 w                GUI_SetColor(GUI_GREEN);; O2 _4 Y, J. \4 L3 E+ l
                GUI_DrawPoint(x+50,y3);
1 E1 h& e1 @! ~+ U        }
2 X! l) `0 `8 b& |5 S' y9 Y5 G+ `* A) l
画函数曲线,效果如下:  s7 O) d- n6 K% w  o0 o- X
ADC接3.3V时:
! H  f8 T5 a1 g% _7 W P60109-150637.jpg
# l. h( R$ f3 d9 L. nADC接GND时:3 u% i" d# C8 @0 Y1 a' `
1 v! q1 v* w. M" C
如果ADC悬空:
: P7 @. q& c  n+ ?5 n( F
. g$ S+ u% ~8 w$ g为什么会这样呢?因为我使用的画点函数,每次画上去都没有清楚,所以当ADC在0-3.3V跳变时,就会一直画很多点,就是这个效果了
1 ?  {* N, M2 D/ d2 ~  n, a7 ?. |ADC使用的引脚和接线如图:
2 n4 @( I  M; ^3 o2 \ P60109-150719.jpg
; g& |& }0 F6 A( T% o- }; x附上adc.c和main.c文件
* a  X: _' W$ d" e2 Q2 d

Src.rar

下载

5.18 KB, 下载次数: 119

赞 1 收藏 2 评论3 发布时间:2016-1-9 16:02

举报

3个回答
随风飘扬 回答时间:2016-1-9 21:04:25
支持支持
沐紫 回答时间:2016-1-20 15:54:34
谢谢楼主!
godyq 回答时间:2018-4-13 11:24:44
谢谢楼主
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版