|
本帖最后由 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& e1.测量直流信号、交流信号的电压幅度; ; Y. D) `: ]! i; i2.测量交流信号的周期,并计算频率; ; i3 o% m( U: b% n( F3.显示交流信号波形; 4.波形的放大和缩小; 7 g; Y; _7 C# N5 e S; Q5.··········· 暂时就先实现以上几个简单的基本功能,STM32芯片是3.3V供电,AD采样也只有0-3.3V,前端没有做硬件电路,所以这些测量暂时都是0-3.3V; 目前实习功能:AD采样和显示; 效果如图:
: ^) m8 k5 O5 H3 W" ?/ B" z u( r( K & E1 B& `( g# q1 f0 @. E 实现过程:(我以前都是用STM32的DSP库开发,而STM32F469Discovery的DSP库的显示驱动还没有,所以我暂时只能在HAL库上进行开发,所以很多东西都不是很熟悉,而实现的功能也是大多基于 官方的例程开发,望各位路过大神多多指点,谢谢!) - 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如图:
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 @: ? * a X: _' W$ d" e2 Q2 d其他就是关于ADC的宏定义,按照例程中的复制到main.h文件中 在mian.c中定义一个uint16_t uhADCxConvertedValue[500] ={ 0};用作存ADC采样值在把DMA中数据改为半字 hdma_adc.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;//DMA_PDATAALIGN_WORD; 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我也是初次使用,所以也是在摸索中,具体有些什么经验也谈不上,所以就不过多叙说了 GUI_SetBkColor(GUI_BLACK); GUI_Clear(); , k$ Q# X; y# y/ Q( @8 n/ n5 H; x+ cGUI_SetColor(GUI_WHITE); 0 g) K! {2 D* z9 Y+ ~GUI_SetFont(&GUI_Font8x16); " r# w I9 L/ w: k: U3 _8 r设置背景色、字体颜色和字体 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); GUI_GotoXY(30,i-8); 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) {3 I/ n2 [. r8 @8 k; X3 I' s5 O GUI_DrawVLine(i,40,440); GUI_GotoXY(i-8,450); GUI_DispDec(x_lable[(i-50)/100],3); }( ^8 L; a7 C( U* R: _) w; ~ 画背景网格 for(i = 0; i<500;i++) { y3 = 440-(80*3.3*uhADCxConvertedValue/4095); GUI_SetColor(GUI_GREEN);; O2 _4 Y, J. \4 L3 E+ l GUI_DrawPoint(x+50,y3); } & |5 S' y9 Y5 G+ `* A) l 画函数曲线,效果如下: s7 O) d- n6 K% w o0 o- X ADC接3.3V时:
ADC接GND时:3 u% i" d# C8 @0 Y1 a' ` 1 v! q1 v* w. M" C 如果ADC悬空: 为什么会这样呢?因为我使用的画点函数,每次画上去都没有清楚,所以当ADC在0-3.3V跳变时,就会一直画很多点,就是这个效果了 ADC使用的引脚和接线如图:
附上adc.c和main.c文件 |
Src.rar
下载5.18 KB, 下载次数: 119
| 支持支持 |
| 谢谢楼主! |
| 谢谢楼主 |
微信公众号
手机版