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

stm32mp1 Cortex M4开发篇10:扩展板数码管控制

[复制链接]
STMCU小助手 发布时间:2022-10-1 21:22
1.资源扩展板介绍
9 e, Y- |' H5 c, @7 S$ S1.1硬件介绍
1 e9 n" |5 L9 K- x: p
5 m! y, M+ F  u- M
204aec3791bd4e56132dceb35faea357.png
$ V4 ~# ~! E% f" X6 g
, ~8 G4 l$ V. H: p2 B1 |1.2资源扩展板可开发项目
8 p1 z; F/ f6 A, g/ d4 }* D3 Q3 q' v" j4 j. T
a07003ff254363947de491f332313126.png
' ]- n5 [7 f# J8 w1 J9 x- {6 e  B  h% s- k8 W7 R9 M% E: x) w
2. 扩展板数码管控制# ^" k2 U* S) ]. b4 V, N
2.1.实验原理
. \3 h1 j& s  Z- \2 ]9 f5 G# m
打开扩展板原理图对照扩展板可以看到扩展板上四位数码管原理图如下:+ V3 K1 \2 N, F2 E4 e5 m& I4 }* J" }
9 A6 k' D3 s! p- |
1e06d4c67654867b0cd8fa18c23f6272.png
( E' ~3 o7 E) J* P/ O4 j4 k% x
0 W5 S# W& a4 K' ]+ D由图中可以确定数码管为共阴极数码管,DS_A、DS_B、DS_C、DS_D、DS_E、DS_F、DS_G、DS_DP分别对应数码管的每个段,对应管脚为高电平时对应的部位会被电量,因为只有一组数据信号,但是有四个数码管,所以需要通过控制DS_G1、DS_G2、DS_G3和DS_G4选择某个数码管显示内容,然后通过轮询刷新让四个数码管正常显示。2 Z" E5 @2 y8 r0 M1 [

' h" D7 y. O! E% n+ R+ F5 t8 _( r 5e2088dafb1edbb2521d2f717984ec92.png
- ?& a2 ?2 a# f
) Q. R* v$ C) W  o' E9 ~ 52ec087611c0aa0a34331cb0df0aa818.png 7 p  b% m: ]" @4 Q2 K' S
  o1 [; m9 A" \; E9 s' Y; V
M74HC595是一个传入并出的移位寄存器,如果有多个芯片级联也可串行输出控制下一级芯片,QA~QH为并行输出,QH’为串行输出;如果本例四个LED数码管由两个M74HC595控制,第一级控制数码管显示什么,第二级控制哪个数码管显示。
3 X, o$ f: n+ S/ Y  i  ^3 L% Z$ D$ z4 E/ i# n
dff1b85723c2f452bce2d68c35b70cda.png
9 L4 ~( W! \* y# W6 H1 ]7 D6 g
2 ]) a& |6 M. O) ^根据上述描述在编写驱动是可以通过GPIO模拟74HC595的时钟完成控制,因为74H595时序和SPI时序兼容,所以也可通过SPI控制器控制74HC595。
, y& V1 T4 M; Z8 A" [9 c( j/ _
; D1 Z6 J& C+ [, J  M7 k/ c 95d3b603fe1cf40d8c2e05be6b99f2e8.png ' F% T' g- x" U8 a3 t
9 |/ j+ x& s- ]$ }/ d" I! B
74H595部分时序
  V0 d; g: F* }4 n% z) r  w
- O6 Q0 c/ b. A5 d 874bd324a0429d0a4b90ac08bb7716ec.png 2 G4 h: c7 x7 e# t- B

( h( Q2 Y4 _* ^SPI时序(CPHA=0 CPOL=0)
$ A3 f& L/ T4 e& C/ r6 q0 {
6 E# F- p5 Z$ I- W( P 584fb7909a6950b9683998b4ff34ba5c.png 1 r+ i7 {9 q; t% ~' T0 i2 r
+ ?. a; i, }6 c! @' v, s9 I: j
扩展板与底板接口对照图) X- E4 a; m2 |0 ?& D) h7 c$ v0 r

7 O4 }0 G0 R& |% d+ K  g查看芯片手册,管脚对应关系如下:" ~6 M; A! r) T4 ]

& t9 t) G7 K: j; ~3 E& {# M 81a1a413d26fff0e3465551dbf188dfa.png
3 U7 x8 ~0 ]  k4 b2 Q
; D: K/ b, Z. ~) I: H7 C2 _4 j( Z2.2. 实验目的
+ R; T) e5 Z4 F" J! z1 f- f4 n, u2 y2 X5 O/ E
了解M74HC595移位寄存器5 e* X# [1 Z2 ^( |* o! t; Q
7 @4 a: P* I, X! F9 L7 I7 s
学习SPI协议的使用方法,掌握如何利用STM32MP157A芯片控制显示数码管* g) C2 W" S1 z; J

9 t6 {1 W, n: z2 b# h( R8 h2.3. 实验环境
4 R; }$ b( a& DFS-MP1A开发平台/ P# R% {& Y! J4 O' i$ v8 z

/ X( B+ }$ H+ T4 C" I" xST-Link仿真器% Z2 E2 X$ a! }% R) [9 i

) `  {* I4 M/ ]0 X2 n2 O7 N, b- _STM32CubeIDE开发软件9 o) w% d$ e) }! `$ I3 x

' `; x/ O0 r3 }1 q1 i6 {/ mPC机 XP、Window7/10 (32/64bit)
# Q6 |9 z, E; n2 t' H
: s& x9 c$ k' m2.4. 实验步骤
7 m! I; z9 P3 ~. K% ~打开STM32CubeIDE,配置CubeMX。
4 O1 q9 S! m$ S! ~& _' Q" q! P$ B8 \$ \* Y" D! p, Y
根据21.1节,使用的是SPI默认引脚,分别对PE11、PE12、PE13和PE14配置为SPI_NSS、SPI_SCK、SPI_MISO和SPI_MOSI。切换到SPI4标签,勾选为“M4”,“Mode”选择“Full-Duplex-Master”,使用硬件片选,选择“Hardware NSS Output Signal”,其配置如下图所示。4 Q. R. \2 x4 L- A$ H; @' J
. T9 {- R0 _: P$ h  ~# i% p
253f84e04e9a94b9efada60aa385629f.png
$ L' o' x' ?% F) k$ r) d& P) Q0 j# |& ^
上述为新建工程配置过程,可参考12.3.2章节进行导入已有工程,工程存放路径【华清远见-FS-MP1A开发资料\02-程序源码\ARM体系结构与接口技术\Cortex-M4\9_EX_SPI_NUMBER】, I6 o3 z1 K. l; w5 J
+ j- D+ e; `  U! i4 ~; T8 _
代码设计8 W4 t& u, W  i/ y, ]4 K5 h0 k. h6 m
4 G# u: W* I7 D' B! j8 y7 X/ n6 f
本次使用的是硬件SPI,就不需要自己写程序实现SPI时序,需要做的仅仅是调用HAL提供的SPI硬件操作函数,其中,调用“HAL_SPI_Transmit”函数实现主机向从机发送数据,创建driver_sm74hc.c文件,在文件中实现数码管的控制代码如下。. o8 g$ h, J( p# ]8 K9 m/ @) p

; R( ?8 H2 D" X; I, ^( `: F1 ?
  1. void M74HC595_ReadDataTest(void)4 p% {& K4 R6 o5 f
  2. ; n& d6 n: `' N1 _
  3. {! e( S( }: N( C$ f4 R
  4. " ^6 ?/ w$ W* s* f1 {0 t! r1 T8 ^
  5. rw_595_Register(0X02,0X66);
    ' `" `4 P: g* ?- \
  6. , i8 Z* E$ r; G  ]% c2 H
  7. HAL_Delay(1);, i- k  ?  T! f

  8. . E5 l" M3 @: n7 I
  9. rw_595_Register(0X04,0X07);8 X. g2 N9 N+ O9 p8 F2 [8 U- Q6 {

  10. # c  e' u9 B$ d- b4 H5 e
  11. HAL_Delay(1);' c9 T: J" V2 Z' y) M( k6 `; y# c

  12. & N5 {3 |: \* Q9 F1 d& y
  13. }
    : b+ v+ E% t* I4 Y1 h4 O% H* J

  14. 3 K; V5 K" m; o) z' n* Q0 ^
  15. uint8_t rw_595_Register(uint8_t reg,uint8_t data)# U! m2 d6 h8 R! |
  16. 7 F' u7 d$ k' m  r% P* l3 {
  17. {
    2 H& G) M4 G7 M. D  j9 L

  18. $ k2 r. u8 W, e, ^2 e2 j
  19. uint8_t txdata[2] = {reg, data};* T+ S1 q$ P, s" F9 O+ s4 t

  20. 5 J/ q/ T) K7 |' y9 \1 i
  21. if(HAL_SPI_Transmit(&hspi4, txdata ,2,300) != HAL_OK)
    ; h+ w' k2 w/ X6 ]+ S

  22. & `8 k% b6 R; X& l6 [& A
  23. {
    , |9 h2 R6 {, P! o
  24. ' m8 N3 C  \. C6 R6 f9 n! y
  25. Error_Handler();
    + o: H9 m/ x' {

  26. / N  x9 |, ~9 X1 B! b6 e
  27. }
    - ^) i; p9 E# F: t+ U& ?' G8 |

  28. 1 J" Y- e! W+ @' \, C; q
  29. return 0;
    # [# V: P8 i* p# G" c

  30. ! H9 Q2 n  R$ e3 V+ S
  31. }
复制代码
& i; Z' {  w! B" q( x

" Z/ U* v7 Y! u6 b+ a其中,参数“reg”表示第几个数码管显示,参数“data”表示数码管显示的内容。
& V. r' _- e; y' M6 N. w& ]6 W9 L. N! F& O1 F9 u
在主函数中循环调用“rw_595_Register”函数即可以实现在数码管上显示特定内容,实验结果如图所示。
6 m7 _& X9 n8 V6 f% g* }5 l9 E# H. t* U0 d

# [, k' S7 A. C; @& b) v' Z 199ebd9cdce9ead3a0a105802772f741.png
( y  Y( c9 Z8 j7 I
& B$ Q' Y) a) _4 r' r: \————————————————7 q: ^; `  |5 ?+ I
版权声明:华清远见IT开放实验室7 T( h. F1 H# {# L
% R/ ~& l9 U+ Z0 C9 }6 o& w' a; ]
赞 收藏 评论0 发布时间:2022-10-1 21:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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