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

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

[复制链接]
提笔画夕游 发布时间:2018-12-27 18:46
本帖最后由 chrisrh 于 2018-12-27 18:48 编辑
" O/ `1 }$ N# O
* M4 g. W& y4 D在读书学32之余,再学下Python。按照霸道书中的DAC章节,比葫芦画瓢。, [% N, T# g& p9 ]
用的电脑是win7-64,所以装了较新的python-3.7.2-amd64,下载地址:http://pypi.org/
2 u  i0 T7 R* Z  `4 V# v/ v/ q接着同意同意···装在了C盘里···我的安装目录是:  }1 }2 Y1 G' o
C:\Users\Administrator\AppData\Local\Programs\Python\Python37
8 y3 Q4 u; D( U: `; T3 b5 ]6 Z' M  `+ i+ W) {' C
/ q8 F- Z0 Y  ?, Y; v
安装完后,运行->开始菜单->Python3.7->IDLE,打开可以使用Python···
+ w) `- q* `8 k
1.jpg
( `2 ?& Q4 z  p9 `  h& h6 k
9 ?4 }3 X/ Q& c2 ~, H, J
7 V4 \# ~( s& u/ d1 y" B- l
2 \( A* P! f9 x! |" C) h* R
接下来安装外部库:2 h+ L3 v5 }4 c; j
按照书中介绍,需要安装Matplotlib, a 2D plotting library.( b. V# E# e+ k7 A5 n
在安装Matplotlib库之前,需先安装依赖库:
# P6 l% d! \: t8 ZRequires numpy, dateutil, pytz, pyparsing, kiwisolver, cycler, setuptools, and optionally pillow, pycairo, tornado, wxpython, pyside, pyqt4, ghostscript, miktex, ffmpeg, mencoder, avconv, or imagemagick.) Y3 _; }  U" g/ M7 K8 m
7 j! C5 F- k; m. P9 z2 `
3 I! w+ i, e' u. l# d$ P% @5 g$ d# d
所以,安装了numoy、scipy、dateutil、pytz等几个库,/ [# L9 S% y6 ^: q
库可在这里找http://pypi.org/
/ j7 k' B" t6 ], ^* M! [4 n也可以在这http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib5 g+ Y9 a4 H5 F1 \+ E
下载所需的库。  O; ?" e# w7 J1 @1 \, h

6 A5 C$ o- |% E1 d
+ b2 C5 G( @* {/ u$ u
5 c3 A( X9 L2 L# z3 Y( w                                       安装whl文件
4 r; V* y8 d, c, x
4 A; o: F: w6 ~$ x电脑win7-64,所以我下的全是win_amd64结尾的) U. Z* h5 e3 ^4 ~* O* X
  C* E8 h  ]# F( d; H

) J$ D7 b: t  k- X4 X; @将下载的库复制到安装目录下的C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts里
  E  B# M+ y$ T/ x6 p* `$ d" O+ l( I
! O9 K5 K  o6 `+ G

4 X+ U) m& b* s接着开始菜单->键入cmd,
3 C" M6 m) `3 E1 T8 i( g0 t& K8 ~( i8 a+ z! D4 m! j

1 U7 @7 z; s0 U  K; A; i8 Z进入到安装目录下    cd \Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts1 ?: U5 A8 d; B
  h* d* X& b- I" s

! ^: @0 u% c& z) S6 c& b- X进行升级                 python -m pip install -U pip setuptools, q! R; ]# G) P% e" G$ U

8 u7 |; r/ T5 \: B; |! l% }7 [) X

% H/ C# w/ g, V: W8 N7 J执行命令                 pip install wheel
% b# w/ P/ U1 Y0 Y/ k" P0 E% n; a( J7 Q$ P9 Z0 v) {

# ]4 N3 J! [1 e# P, H3 l# {依次安装numpy、scipy、matplotlib等的whl文件+ p' U# m* W$ [

( {8 O5 x" S9 e( w4 X

, I7 o5 E7 D, q- }安装numpy的whl:) r8 q6 P: \$ u% r
在Scripts目录下,运行pip命令      pip install C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\numpy-1.16.0rc1+mkl-cp37-cp37m-win_amd64.whl2 X1 L& w4 ^9 }
等待successfully installed xxx
1 r) n+ X, m0 \- P3 |; J9 O* f1 ?/ _% u% m: Z' e

2 z) |- X3 a* {7 k  b安装scipy的whl:3 p; R5 ]8 G) X) C. q7 k, W$ a
在Scripts目录下,运行pip命令      pip install C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\scipy-1.2.0-cp37-cp37m-win_amd64.whl
$ f6 R# `* H( s0 L等待successfully installed xxx! R3 F: ?- d6 s* s( {* j* E; v  s

; r: f/ Z! j  V8 X4 Q

- J: S1 v# n  |4 w安装matplotlib的whl文件:, V5 b9 t  e! D2 c/ |3 N4 }
在Scripts目录下,运行pip命令      pip install C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts\matplotlib-3.0.2-cp37-cp37m-win_amd64.whl
1 b+ U! D' e7 [  C2 x等待successfully installed xxx
7 Q/ v9 C( ~6 C依此安装所需的库
7 g7 {: e- d3 D& Y, Z0 E$ S
" L, r' a6 p5 u  k

$ _7 u0 P/ S6 U' \安装完成后,查看已经安装的whl用     python -m pip list2 n6 `# q( D. g, d
QQ截图20181227135744.jpg
. T; r( Q' l0 }. E& }1 j6 d
: p% a3 }+ d. {6 ~# l/ `
1 b. T* z. p" @; F+ V; k, p6 o" k  ?7 W
- v7 a% D2 N4 Z; \# _7 \
在IDLE里新建一个file运行:9 g8 N8 v/ D5 g( `! R
import matplotlib.pyplot as plt1 C* l5 `3 k4 g" _
plt.plot([0,2,2])  4 ~# V1 e$ x. ]! ?3 _6 x+ ~. Q( ]4 x
plt.show()  7 K/ h& t5 X, B4 x; H" Z

6 Q- l. D7 L8 ^+ h 2.jpg 6 l* ^' N4 y+ x6 d
) Z$ [( ]( Y2 q/ [: H

( S( k) i# ^3 r4 _) Q+ q
. i, V* _- o5 c, z, k2 c) y& v: P
接下来敲了一下书中的代码,初学不精,犯了一个错误,Python是以缩进来界定范围的,同样的代码,就是一堆error···
3 t& h1 S" W! F. F# L& K; k
  1. #! python3# J+ n/ e9 t1 @$ |0 e9 j9 X
  2. #coding=utf-8
    0 |, h9 T3 G; K  C

  3. / A- k; W3 V. A) _% o- [& f9 u5 U
  4. import matplotlib.pyplot as plt * {. T5 T! v& R: Y! ]4 \2 F
  5. import numpy as np
    / S, `: s4 J: ], l( S# m: J
  6. import math& E! ]$ C6 h. \+ O! _' a3 ]+ N# Y
  7. + p  L, i) C8 j; H& T& N) X! s- t% X
  8. #修改本变量可以更改点数,如16、32、64、128等
    % r. a" G% d9 `0 n& z  K
  9. POINT_NUM = 32
    + j2 F  ]% g/ r9 C6 c6 D6 N2 {

  10. + a8 R2 r' \7 O; z& b$ p
  11. pi = math.pi8 d+ C( P# f: Z- Y; \+ `
  12. 0 k# C6 P6 s) W9 n' O
  13. #一个周期 POINT_NUM 个点
    ( b  d# C6 {% r+ ^* d
  14. n = np.linspace(0,2*pi,POINT_NUM)# p& {% }, \  u
  15. + V( ]6 n1 h# R$ J, v( @: T' l5 i
  16. #计算POINT_NUM个点的正弦值
    & Q8 N2 J* P1 ^* K2 A* ?
  17. a = map(math.cos,n)1 ?+ n( ^3 J" Y) F; k8 f. Q# U, G

  18. 7 ^/ Q+ f% F& }5 C" n) Z8 d8 ^
  19. r =[]
    . O8 Y; [7 E- U' J* L6 v  x
  20. for i in a:5 W! b9 t3 M% L4 K
  21.     #调整幅值至在0~1区间0 |5 X: o3 X+ k
  22.     i+=1      
    8 j' ]4 U$ Y% c7 B
  23.    
    # M/ J  N7 [) C
  24.     #按3.3V电压调整幅值
    3 n6 c. l# I5 n, V- N. K, R; T
  25.     i*= 3.3/2   
    * ?% s/ C* w. V7 M. G; Z

  26. 8 r6 m8 o$ p; ~" g
  27.     #求取dac数值,12位dac LSB = 3.3V/2**12 4 a/ c  C1 Z/ \) J
  28.     ri = round(i*2**12/3.3) ( t0 Y. Z( _& {% f% E) g
  29. . U+ N8 ]8 S+ {! u+ h
  30.     #检查参数, O+ S' j, J# O% l5 j, J7 ]4 y
  31.     if ri >= 4095:
    ; e* V/ t) A. q% f) Z+ Q3 u
  32.          ri = 4095
    ! D" x- `' I: Y% M) \

  33. ( h0 }+ t$ p3 R; `
  34.     #得到dac数值序列" r& e5 r3 L; d; D
  35.     r.append( ri )/ Z% j5 ?" u! O- z4 Y# N6 V! _

  36. : `7 Q  }7 @( ~' k
  37. print(list(map(int,r)))) y- |& J& ]7 j$ H/ @1 x
  38. % P- P. z/ z# K+ B) Y
  39. #写入序列到文件6 l% H; q' ^( K1 M1 ^
  40. with open("py_dac_sinWav.c",'w',encoding= 'gb2312') as f:! u- L4 D" c7 G
  41.     print(list(map(int,r)),file= f)
    1 d8 L( u1 f1 p! C8 s: C; n

  42. , t5 c+ K6 B0 r; a5 |" ^  A# O
  43. #绘图5 C* E1 O* B, ~1 W$ `# I; E, X
  44. plt.plot(n,r,"-o")% o" w4 V  }% b/ x; j
  45. plt.show()
    0 \1 C* x) O4 K1 m$ @
复制代码
需要多加注意空格,注意缩进···. T+ n1 H6 `  o. Q
10.jpg 9 n5 [7 Z* Y! _& v. s* N% I
/ Q8 b& v  j  G% s* G
- ^9 M/ y% S  k  k0 `+ U
生成一个cos余弦波形图5 D9 N4 M! V% }( Z; w
4.jpg
; {9 e! @' k/ s+ L. {1 A, u
+ u4 U5 |8 z& c# Z/ M: s& }. V7 z4 w

, u, I" x. P: X运行后生成的py_dac_sinWav.c和里面的数据,将数据复制到程序中使用
6 z5 A# K$ W6 D% e 6.jpg   ]6 h2 y3 R! B! U7 z9 j+ m
4 f# x) \- C- X+ c  h
7 s( _6 W1 _9 p- \/ m" q
书中大多都是用DMA传输的数据,以后得好好的练练DMA的使用。$ o, T4 s1 O) s' K  W1 F7 ?# g
DAC也是用DMA写的,很棒。
, x: s' L$ J/ A* Z$ P' C- |# \; O 7.jpg 7 L5 a, ]% N; ]4 M

1 s. U8 `7 J) B* @, DDAC输出用的是PA4、PA5,没有找到ZET6的板,引脚兼容,就先用VCT6了1 w+ i4 D$ [+ Z; d  X& J
9.jpg 0 R- |# f& ~  t4 w

6 D, A9 p7 t! E烧到板子里面,用示波器查看,把采样调高点,还是能看到32点波形的构成的。9 n& h! \0 \; u: C. Q4 |' `! X9 o
8.jpg 0 V& ]1 \4 O0 O; a5 v5 D, [

! a3 M& y4 S& W% k/ K# W不断学习代码,学习思想ing···
$ ]5 e2 {# E  x- [  P
赞 收藏 评论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$ L8 ?3 s) R$ g" E
问一个问题,为什么下载器插在示波器的USB口上。
8 a5 w( c" Q" ?5 P! e* g, }
那是供电用的
提笔画夕游 回答时间:2018-12-28 13:14:06
BG4RFF 发表于 2018-12-28 09:13
% N( Y) q9 {9 _, W; |0 x那是供电用的

; t. a/ |- ]; A: p8 {
jeffhe1 回答时间:2018-12-28 13:41:38
真是厲害
STMCU-管管 回答时间:2018-12-29 14:39:10
支持支持
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版