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

【经验之谈】基于STM32+74HC595:对74HC595芯片的经验分享

[复制链接]
STMCU小助手 发布时间:2022-12-12 14:00

使用的是STM32CBT8,小模块用起来性价比超级高,资源丰富,移植u/COS及HTTP、MQTT协议等等用起来简直欲罢不能,摇摇欲仙!

BUT:IO口资源太少了,我想让你驱动100个LED,你缺告诉我,我的要求太多,你满足不了......

还好,找到了74HC595,但是网上很多资源讲的我看了半天才总结、提炼并另辟**出来精髓

==========================================================

595具体使用的步骤:

第1步:目的:将要准备输入的位数据移入74HC595数据输入端上。

方法:送位数据到_595。

第2步:目的:将位数据逐位移入74HC595,即数据串入

方法:SH_CP__(S_CLK)产生一上升沿,将DS上的数据移入74HC595移位寄存器中,先送低位,后送高位。

第3步:目的:并行输出数据。即数据并出

方法:ST_CP__(R_CLK)产生一上升沿,将由DS上已移入数据寄存器中的数据

送入到输出锁存器。

说明: 从上可分析:从SH_CP产生一上升沿(移入数据)和ST_CP产生一上升沿(输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的 同时移入数据。

=============================================================

理论掌握那点其实已经够了呢,不过我贴出代码,更容易明白


) i0 _' p1 w! U" w

  1. /*--ZQP的74HC595的初始化*/' l. D$ ^2 \& `$ b2 l8 m
  2. 5 B0 D5 j+ }9 O6 d* R4 K8 F. `6 y0 K
  3. void HC595_Init()) [5 e+ D* X4 I4 M0 W+ n( d; \( g

  4. # m, M0 C' a: s; n  l
  5. {) T2 R7 C+ W' v$ Y( l4 T

  6. * ]- U/ ?# W% [$ V; o; {( c, k
  7. GPIO_InitTypeDef GPIO_InitS;
    ! C% T- ]" t2 h1 i4 d
  8. 1 Z+ W) z, D& \+ ?
  9.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);1 v/ ~) K/ b# n0 o2 }7 O; I

  10. # @& g7 X7 N7 E; Y

  11. 4 n0 b9 X' r3 L- o( o$ r+ c5 l
  12.   GPIO_InitS.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;" b# i2 o5 p+ D" g! K& v
  13. ' i8 Y# _- _$ G* K- ~& v- I+ _
  14.   GPIO_InitS.GPIO_Mode = GPIO_Mode_Out_PP;' D7 \6 V. [* N/ A' C
  15. 0 `6 ?9 `% Y3 ]1 H8 E
  16.   GPIO_InitS.GPIO_Speed = GPIO_Speed_50MHz;' R4 f# [6 ~! D4 J% g0 F) K) r

  17. * o! K0 E& \3 {& l; {4 [* v) F
  18.   GPIO_Init(HC595_PORT, &GPIO_InitS);6 H1 j$ K' l( A4 D; _
  19. 8 e  [! I9 G; }6 M2 h+ `

  20. 6 |. s- a: L0 S0 I- D; N$ @& J+ n- t
  21. GPIO_SetBits(HC595_PORT,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);
    % j: P6 G  _3 F' u. R8 @3 ]- i! L
  22. ; |  J! f2 M& }+ k; c, Y  h9 t
  23. }
    4 t( E& n( E* K. x8 k: O

  24. * I3 P5 B# D. g6 V% k; l8 |

  25. 5 S( ]3 ]* j1 W* s$ h& D" W
  26. , U, I, }; i. Z2 H
  27. void HC595SendData(unsigned int SendVal)
    - }4 U2 I3 U; g* {) }
  28. 8 Y7 v% v: T# E; `& K
  29. {0 Z! c0 ~% |( N

  30. % g' W0 p' \6 H# u& I3 s- i
  31.   uint8_t i;
    0 {* G) l3 _4 H  p' X

  32. $ {$ J, a; }, L" n! J( a
  33. for (i=0; i<16; i++)% U/ Q7 w0 R) ]8 S- g1 Q+ y

  34. # T$ y* {; Y# u' _! j3 d! A$ y! I
  35.   {' I5 B8 l3 `- b% x2 R  G

  36.   Y9 i- W8 w6 m5 f1 w0 A& |
  37. /*--step1、串行输入引脚,所谓串行就是使数据在一根信号线上按顺序一位一位地传输*/
    : `4 O2 V3 U) e; s) x* E) o5 m5 ^

  38. ( C4 z) @% E* T7 f+ U/ m
  39.     if (((SendVal << i) & 0x8000) != 0 )
    , v4 N5 H8 |; x5 t) @  a- [

  40. % N) g3 \0 E5 o7 t7 C7 |
  41. MOSIO_Pin14_DS_OUT=1;
    9 t* z- W7 A$ `

  42. ( @' y% h' O% F/ n, m+ M8 p" v
  43.     else, `3 M, ?' z: ?( F2 f

  44. 2 r0 D2 D: ~& ]" k6 {  f
  45. MOSIO_Pin14_DS_OUT=0;
    & h- [4 t# B5 _* v0 K: M; j+ \

  46. 2 O) o. i: b; n, ]" F" P
  47. /*--step2、SHCP发生一次上升沿的时候,74HC595才会从DS引脚上取得当前的数据*/
    9 _' N( U: d8 I* r9 c
  48. / D7 ]! C. ]5 `! l. ]
  49.     S_CLK_Pin11_SHCP_OUT=0;
    : P% [0 ^" ?, t4 O
  50. ) {. _0 Q- V1 m/ x& H3 J
  51. delay_us(100);
    4 P/ M( l' j$ M; f9 T( O) q

  52. ' f+ m7 F5 p( E8 a( q
  53.     S_CLK_Pin11_SHCP_OUT=1;6 M: v7 Z  ~( J9 o( `! A

  54. ! I  d  h8 n1 H
  55.   }8 ?2 B* m, p/ r# {+ E; H  i

  56. ! x$ m4 x  [# R% j4 p+ @% I  J
  57. /*--step3、当移位寄存器的8位数据全部传输完毕后,制造一次锁存器时钟引脚的上升沿(先拉低电平再拉高电平)*/
    8 [3 u% g( @5 l7 k

  58. 3 o3 q: V* r  I9 ?, Z! q
  59. R_CLK_Pin12_STCP_OUT=0;
    5 m4 t" f* Y/ b: G
  60. 3 R) v" h2 {; W+ p6 {' B
  61. delay_us(100);) F# u& N5 t7 _0 d
  62. / Z/ a/ v, R8 D+ W
  63. R_CLK_Pin12_STCP_OUT=1;
    8 I) }6 I, Q4 ^0 E/ L$ ?% H& ]

  64. " ~- e! t% S3 Y5 i, T. Q
  65. }/ f8 Y4 X4 m1 c$ f9 @8 ~* ]6 H

  66. / b# o+ c; v0 W/ M2 ?

  67. - L; W# v8 O6 h+ R6 Z! ^: I" G* Z% S
  68. /main函数
    ' \0 Y" M, j7 W- h
  69. 6 l/ U' B& y/ d1 w0 r
  70. unsigned char tab[]={0xFF,0XFE};$ A% c0 J' g) d! e: s( Z6 x# M( J

  71. / Z2 Y" G  ~' M: |
  72. unsigned int Val;
    9 D4 B+ E0 l5 {. D

  73. : S# \9 I4 {( J, o7 \7 U
  74. /*--Z QP的74HC595*/# ]+ |- E; x3 }9 C' \- W: i
  75. 8 ]) p' d; j0 N" f* T% T
  76. Val=tab[1]&0x00ff;  //--保存tab[1],并将将tab[1]放置在高8位5 `/ _* q0 F% r: M# {3 ?! U) |

  77. . a8 q4 R! h: Q" h2 k
  78. Val<<=8;, x3 q8 e2 `7 I9 J/ J- y/ g7 }& S

  79. ( n; n; s$ {( k4 n2 h; {
  80. Val=Val+tab[0]; //--保存tab[0]放置在低8位
    5 u3 M/ {) ~# r1 w3 A% `( @
  81. * `$ A, w. t* p* |# d  {4 M2 O
  82. HC595SendData(Val);
复制代码

* \  w: f+ v- N1 u$ V5 d

如果你使用2个74HC595,两个的级联:<1的9引脚:_Q7S>连接<2的14引脚:_DS>;一切搞定!


) o: [% H2 Y7 {* N- @5 W, K: ^9 S
赞 收藏 评论0 发布时间:2022-12-12 14:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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