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

读书感悟-3.学习下野火F103霸道里的DAC部分

[复制链接]
提笔画夕游 发布时间:2018-12-27 18:46
本帖最后由 chrisrh 于 2018-12-27 18:48 编辑
0 V+ x8 ~/ Q- |9 M1 N3 ~3 h6 a3 D( k: `$ o  S. B
在读书学32之余,再学下Python。按照霸道书中的DAC章节,比葫芦画瓢& E: r5 a) A( Y4 R( y
用的电脑是win7-64,所以装了较新的python-3.7.2-amd64,下载地址:http://pypi.org/
1 F$ p8 S% e8 h接着同意同意···装在了C盘里···我的安装目录是:
+ D2 A  ^: @. yC:\Users\Administrator\AppData\Local\Programs\Python\Python37+ T$ g, \" z5 v- ~( J6 b
( |3 g9 N  L3 I0 k; ]4 W+ e

2 ]% S. Y" [4 e安装完后,运行->开始菜单->Python3.7->IDLE,打开可以使用Python···
% r: D8 B5 h, G8 ?
1.jpg
0 P0 E; `* E0 X/ S9 R: N
0 P+ Q9 ^2 V$ L9 M

- R& i* @( p( C" J$ [" Z3 H# J+ }) a* ~
2 Y$ e* R* Z" s& z
接下来安装外部库:- r+ v$ T7 L6 g# y
按照书中介绍,需要安装Matplotlib, a 2D plotting library.
4 F5 G* a3 J& @3 K在安装Matplotlib库之前,需先安装依赖库:
4 ?6 X0 G2 \) y) `  n$ LRequires numpy, dateutil, pytz, pyparsing, kiwisolver, cycler, setuptools, and optionally pillow, pycairo, tornado, wxpython, pyside, pyqt4, ghostscript, miktex, ffmpeg, mencoder, avconv, or imagemagick.
% F% t# B% V" z$ h  u7 W. x# W9 i/ x& _7 w/ w; Z
% h* a  }: |9 T0 |: k" M
所以,安装了numoy、scipy、dateutil、pytz等几个库,7 k5 n3 R, T. V
库可在这里找http://pypi.org/
; ~" Z3 v2 ]5 u) _也可以在这http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib9 i* A$ A( C7 |0 D9 v: m
下载所需的库。
3 {  |" D/ Q, F; y' a1 w) B0 Q% h* L4 f+ q8 V# Q8 u

3 [8 H- A4 ?# g) Q4 o) j+ |& E9 J* T
                                       安装whl文件& P# V- f; K; t7 o* d
, ^& ^2 p, a( F! e
电脑win7-64,所以我下的全是win_amd64结尾的$ F; W3 M8 A  B  M

- q% }( M! S% |$ r- D) j6 P
  \( F# p) e$ i% q6 [. y/ \
将下载的库复制到安装目录下的C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts里, X& u4 \2 c7 F" f. u
- }" q# L) D5 o

7 {- U$ `6 U& W接着开始菜单->键入cmd,5 }9 B& w; |& N3 ?6 \
4 k$ d' Q8 p/ h  v/ A2 f0 c7 J

" ~( f- m2 |* `4 |9 a7 E' i进入到安装目录下    cd \Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts
1 H) p9 M' ~& N0 |
( N9 ]6 I" u, I2 U1 p3 W
6 S* a8 w' W  N* }3 I/ ~% m1 ?
进行升级                 python -m pip install -U pip setuptools$ g, g. ?; `& D+ v+ j6 E5 T

6 R7 d0 x. X' b
1 d2 Y7 _0 e, I% y. ?
执行命令                 pip install wheel  A# d' }) n0 j' |6 H; V

& b; ^6 c+ n! }! l9 ^# j: a0 J

( V' E9 \3 Q. |依次安装numpy、scipy、matplotlib等的whl文件
4 ]" Y# k+ u' G: t( o5 O7 z: L  G. B; `* a- z$ [6 \$ I6 D

1 j" {. \: Q: G7 k; |! m/ v安装numpy的whl:
5 a/ u& V4 R5 G. c% J5 \5 n在Scripts目录下,运行pip命令      pip install C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\numpy-1.16.0rc1+mkl-cp37-cp37m-win_amd64.whl, |* C# }$ m; n5 X% {
等待successfully installed xxx  b6 p$ ^4 G$ l. `9 Q
$ v7 n" k3 h- a! L8 [7 m
) _: J& H: `  h1 Q
安装scipy的whl:
; n4 r4 a/ J0 R: \在Scripts目录下,运行pip命令      pip install C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\scipy-1.2.0-cp37-cp37m-win_amd64.whl
% `" D; K# [% d- ]% ^等待successfully installed xxx
; b1 b- `' x3 z9 P5 P
, l5 a! O7 O( R8 u, q( x) m
2 u& K2 v2 Y& m
安装matplotlib的whl文件:# }& p9 r. }; G2 {' [3 Z- t
在Scripts目录下,运行pip命令      pip install C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\matplotlib-3.0.2-cp37-cp37m-win_amd64.whl0 I& ^% o& O/ c6 l* o# D9 v1 j
等待successfully installed xxx
" q: Z3 t7 \, }+ z依此安装所需的库
# l1 ]4 }$ M# c  b/ X$ v
+ q' r! c3 _: L/ z9 X. _  C2 W
" I! x  [* h/ ]
安装完成后,查看已经安装的whl用     python -m pip list- x* y1 J# [1 e( s2 `
QQ截图20181227135744.jpg
$ r+ q" S" C/ R* k: |  }) X2 o" n2 h9 L9 v( y6 [

, \/ p! x" ?9 U! ]: |+ J. F6 v+ b$ ^8 L# r& R' W" n( \4 o

) t7 d1 {3 N+ ~6 V在IDLE里新建一个file运行:# k! J* C( \1 C% x5 T
import matplotlib.pyplot as plt
2 d: F" J" l0 O& j3 Pplt.plot([0,2,2])  
$ b" \) x& \% X: M  ^plt.show()  
8 `" ?& l0 @* G& f5 q1 p
* A6 r) o; ~8 Y' b* X; U
2.jpg
8 i- C7 o$ @' H7 X: y% }+ D3 d  K; p
- z1 t0 M; f6 C6 O
% Z. }! m6 M5 N( I4 H6 N/ j
. \; X( n/ _4 |. u! T& E+ B
接下来敲了一下书中的代码,初学不精,犯了一个错误,Python是以缩进来界定范围的,同样的代码,就是一堆error···# {0 \; ~- V& j2 [) B/ m
  1. #! python3
    . y% u1 h& ?, R6 G; d+ F& _
  2. #coding=utf-86 E- V5 R1 }9 _
  3. 3 |. T: i# C. W0 v. c- \+ @
  4. import matplotlib.pyplot as plt
    6 W1 j7 c& d' C7 C
  5. import numpy as np' D8 L! Y) Z! |0 h$ N/ d
  6. import math
    4 w. X% p7 C) T" V

  7. 5 ?6 J0 P8 {6 C; a# b% I: ]
  8. #修改本变量可以更改点数,如16、32、64、128等; V6 J/ `8 t5 h6 b2 |
  9. POINT_NUM = 32; U* w' D( i) e2 N) W1 t" @

  10. ( [! E5 v) c5 @/ L6 ~
  11. pi = math.pi
    , M  v" d2 l8 W$ l
  12.   y% M* b. `; V+ R7 d- l
  13. #一个周期 POINT_NUM 个点8 d8 Q, K! d/ T; m4 L- v- r- n5 h
  14. n = np.linspace(0,2*pi,POINT_NUM)
    , x# ~$ v" e& q# V& b5 K2 N

  15. 4 g% V$ g- B, R) ~8 t9 e
  16. #计算POINT_NUM个点的正弦值4 F8 H" w' e$ p. I. D# {
  17. a = map(math.cos,n)
    ' a+ ~5 T$ k% ^) t

  18. ) S' w0 K8 h/ o8 X/ L
  19. r =[]
    + {4 N5 t( R; b3 a; i
  20. for i in a:9 c3 ~% ]0 Q5 D; F  L
  21.     #调整幅值至在0~1区间: M' b3 B/ K+ U0 G( m! }. {0 E
  22.     i+=1      
    ) K- u# @7 v% Y. _/ P/ K( s
  23.    
    : O$ G- Y! M; b( r
  24.     #按3.3V电压调整幅值
    9 x) h( n2 Q. ]& j- C" f
  25.     i*= 3.3/2   # z2 W/ a7 f) V! A7 Q

  26. - `' B- W/ f1 M3 N5 M, x$ w4 V
  27.     #求取dac数值,12位dac LSB = 3.3V/2**12 0 F5 c& {4 F' b
  28.     ri = round(i*2**12/3.3)
    / i/ ^4 S% p" S: y# U9 {4 n
  29. 2 g3 T/ t- Y3 d7 ~  d, C0 J
  30.     #检查参数# u6 z! p5 F8 i
  31.     if ri >= 4095:1 ?% l6 I6 N, S' G6 P+ I
  32.          ri = 4095& ~5 x' t/ T6 F; m3 n2 d

  33. # s  l! @! b; h. i( x/ X: V( z4 E
  34.     #得到dac数值序列
    - E% n: W! X. P/ X" X
  35.     r.append( ri )
    3 x# _" T+ y. D5 O' x
  36. % q% u6 Q/ _  C. T0 x; n
  37. print(list(map(int,r)))
    6 S9 e7 Q) d  B8 T
  38. ! E+ [5 h! f6 D
  39. #写入序列到文件
    5 r# g/ b# Y+ d) m3 k
  40. with open("py_dac_sinWav.c",'w',encoding= 'gb2312') as f:* Y1 n# s  l% _, z! P
  41.     print(list(map(int,r)),file= f), u9 C1 A8 J1 z0 z5 C, z

  42. 9 T2 O# R9 T3 H% `" e; O8 l$ P
  43. #绘图- Z+ ^$ t3 ]8 Z
  44. plt.plot(n,r,"-o")
    , H$ W2 \/ g' L2 m3 i* U
  45. plt.show()3 F0 W( \4 {9 ]1 g( R% V: V  ]
复制代码
需要多加注意空格,注意缩进···8 b9 z* X4 B$ S+ x  l, I
10.jpg
8 Y/ h: Z' q% q9 I, r( n% p0 j) e) a: [. X$ r' g
6 N( J# F* |8 s# V5 y
生成一个cos余弦波形图
* d; j" @) m  v 4.jpg
; S* ~: S5 L( U2 l% \5 g
$ W0 k9 u/ Q  Z; k6 G

4 [5 N4 m, }. T; i0 [运行后生成的py_dac_sinWav.c和里面的数据,将数据复制到程序中使用
) r5 m( \  p6 ^% ]; o+ v 6.jpg ! ^  ^( z/ P$ a$ x+ F  u2 K9 ^6 n

9 x6 Z: b" Z  B, R( W
7 u+ t  O6 G% ^6 {; H
书中大多都是用DMA传输的数据,以后得好好的练练DMA的使用。1 A& r2 F2 h1 Y3 K, [- I; S( H
DAC也是用DMA写的,很棒。
5 p$ G- N- |8 z. b 7.jpg 6 U& T0 f- t5 L  p6 d/ l+ I( t, {& d
. W8 M7 h, `/ S& ?" ?* u8 Q
DAC输出用的是PA4、PA5,没有找到ZET6的板,引脚兼容,就先用VCT6了
  o# \% L5 u0 \* O$ C6 _! U 9.jpg
) M, {2 T; J2 o$ Y6 A+ z+ j3 @5 s5 l* G
烧到板子里面,用示波器查看,把采样调高点,还是能看到32点波形的构成的。3 h. r2 k+ C" W/ w8 c
8.jpg
% [- `% w  k5 M/ C8 a* J" E6 @
不断学习代码,学习思想ing···# _/ q) ]0 R! F1 X) O# U
收藏 评论5 发布时间:2018-12-27 18:46

举报

5个回答
disheng4688 回答时间:2018-12-28 08:53:54
问一个问题,为什么下载器插在示波器的USB口上。
BG4RFF 回答时间:2018-12-28 09:13:47
disheng4688 发表于 2018-12-28 08:53
% t; n4 ?0 l$ Z" L" ]3 G6 p问一个问题,为什么下载器插在示波器的USB口上。

' @5 |& c. a5 a: p+ W0 d那是供电用的
提笔画夕游 回答时间:2018-12-28 13:14:06
BG4RFF 发表于 2018-12-28 09:130 b* K- ]1 E6 D# ]5 ^, x
那是供电用的

+ k4 R& ]* ?& P9 i! K/ n) s7 `
jeffhe1 回答时间:2018-12-28 13:41:38
真是厲害
STMCU-管管 回答时间:2018-12-29 14:39:10
支持支持

所属标签

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