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

【经验之谈】基于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产生一上升沿(输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的 同时移入数据。

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

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

. o9 A7 C5 p* s

  1. /*--ZQP的74HC595的初始化*/+ P# e6 `, E) x+ ]1 L. b8 q" p

  2. : e  [% u- g/ Y1 G( W. V- u6 A
  3. void HC595_Init()5 E/ `( B9 G; R! a5 A- F" ]; B+ U

  4. + y; _3 z: A7 [( v( I( \
  5. {# B' Y8 x2 C9 y$ Z% n" V
  6. / w. U! S1 Y. ~6 N+ d8 Y
  7. GPIO_InitTypeDef GPIO_InitS;
    9 v7 q5 S; q, ^5 `0 n

  8.   t1 O4 H! I3 s% {
  9.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    7 Y; D; p- X& s' R( ?& O
  10. & n& ^: F2 ]2 L

  11. " T1 I; Q; `& I* C
  12.   GPIO_InitS.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;2 V5 k5 w' ~; j1 u' E8 b

  13. ; ~  H* G5 d; T0 D2 l
  14.   GPIO_InitS.GPIO_Mode = GPIO_Mode_Out_PP;
    3 K" @% C3 W9 g

  15. $ n; g; s' s- ]1 m, r8 S# s
  16.   GPIO_InitS.GPIO_Speed = GPIO_Speed_50MHz;
    6 p& l1 @  t' H7 Q
  17. : D+ Y! k1 ~! V! Z$ i
  18.   GPIO_Init(HC595_PORT, &GPIO_InitS);6 q; J' A" M+ w( s. {2 Q( q& @
  19. ' x- ]5 h* c5 e. ?/ W- y
  20. 0 P$ p' y- T" K1 l; n
  21. GPIO_SetBits(HC595_PORT,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);
    1 D* b& p0 l* u8 T
  22. 0 h! n! e1 W5 x1 Z2 z, u0 f
  23. }& B8 `! L- b2 H  l4 }( w* J
  24. + T' e) x9 Q8 G/ g4 M0 X, L; b7 x8 t$ l

  25. * N$ \7 q" n& g6 R" r

  26. " d8 d% S$ x" {! y0 A" J
  27. void HC595SendData(unsigned int SendVal)9 H: C, P0 `' l+ j# S

  28. " {& l" H( ~4 B! Y% x5 J$ r: I
  29. {+ h5 y5 k% N  ]5 D% ^, S# Y
  30. & D* h, h' W8 v- ?
  31.   uint8_t i;
    % m7 X/ ~# a2 F( j

  32. 1 H$ H7 I7 b% J$ j0 l9 P) f/ f8 V+ X
  33. for (i=0; i<16; i++)
    / R5 x# }8 d3 _2 b5 l

  34. 0 U! S" b& l, S
  35.   {% Z+ H3 i$ N7 O5 `

  36. * Y1 r, p9 M: ^4 U  a" A
  37. /*--step1、串行输入引脚,所谓串行就是使数据在一根信号线上按顺序一位一位地传输*/5 P. i! h4 q5 e  B. G! w' j/ R* Q
  38. % [6 O$ d# d9 h
  39.     if (((SendVal << i) & 0x8000) != 0 )3 N4 X* j" B1 [0 p3 L+ K1 Y
  40. 9 p: `9 ]3 f9 f$ [0 {
  41. MOSIO_Pin14_DS_OUT=1;* z. s: h2 H1 z# @: {5 x+ K! D
  42. + o1 q6 H) Q  Q/ O3 I5 |# W" T! t
  43.     else7 E) s9 h9 G3 p7 }! K9 q3 K

  44. 1 k4 S. L) M% }7 N
  45. MOSIO_Pin14_DS_OUT=0;8 i' \3 i! P1 ]) M
  46. $ R  X* L- |1 C9 D" U( {1 v) ~
  47. /*--step2、SHCP发生一次上升沿的时候,74HC595才会从DS引脚上取得当前的数据*/
    . Q$ X3 P' E( n1 m
  48.   {* J' w. T8 n5 [: |4 E
  49.     S_CLK_Pin11_SHCP_OUT=0;
    8 J: ~, B& [& |/ r% c0 x( {- Q
  50. $ P1 }7 L& Z  `+ Y. d, {2 j
  51. delay_us(100);
    & L1 s& j. p6 }7 a$ i
  52. ( }$ W% k7 h" h7 v
  53.     S_CLK_Pin11_SHCP_OUT=1;1 v4 D! ^1 K3 b$ ?( m# l& w; j  E

  54. # E, r7 t; Q( E& m# I! s
  55.   }
    9 p2 o. Y# j0 M0 w5 t# P

  56. ' f" Z: A7 z0 I. M
  57. /*--step3、当移位寄存器的8位数据全部传输完毕后,制造一次锁存器时钟引脚的上升沿(先拉低电平再拉高电平)*/3 \1 Q. M; U/ I% k# a/ ^
  58. 2 V# N! N/ W* W; ], F3 A
  59. R_CLK_Pin12_STCP_OUT=0;
    - l" h1 E! D' \7 }# Q5 {/ U- e

  60. " I, Z  G% N& `2 G* `& c
  61. delay_us(100);" J4 J7 H7 j7 K8 f  R, T
  62. ' z" G3 `" d2 N6 K, u# u
  63. R_CLK_Pin12_STCP_OUT=1;
    5 P( @, l: k3 h( e+ `8 _1 W8 q
  64. ( L$ j+ i6 D. Q2 |0 ]7 I9 o% Y+ Z
  65. }0 p9 U2 W/ J/ C4 x# t% M# [2 ~
  66. : |) u4 s1 t& [. ~7 [5 S4 S
  67. ! o+ k1 p! X4 A1 T
  68. /main函数0 i! U5 v3 G7 P0 v& Z0 k" f. _
  69. - v4 o9 E/ B8 A( U  I. R
  70. unsigned char tab[]={0xFF,0XFE};4 p' n9 M4 `7 f- [) [

  71.   ]! o7 g* Q3 R
  72. unsigned int Val;
    . H3 n4 Q2 w  r* ~  o0 q2 u6 V' Z- a/ J' H# S

  73. , x$ X9 b2 c5 o
  74. /*--Z QP的74HC595*/
    ! }* b% Y9 _0 r  X
  75. $ Q6 Q. T- ]8 p# q: n
  76. Val=tab[1]&0x00ff;  //--保存tab[1],并将将tab[1]放置在高8位8 @8 u8 }+ i+ r" N; X9 F0 ~

  77. " F$ B. n) `# n5 I- L8 @  I
  78. Val<<=8;
    " _) m3 G" w  S
  79. 8 R) V# I9 u2 D: s( B$ T
  80. Val=Val+tab[0]; //--保存tab[0]放置在低8位
    2 u, a9 }$ ?$ `1 P6 L) T

  81. 5 @+ A) y4 z7 w- A* `$ c% G
  82. HC595SendData(Val);
复制代码
. s7 F: {. D+ T( b; p3 J2 E

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

2 l3 P5 E& g5 m4 j" C1 I
收藏 评论0 发布时间:2022-12-12 14:00

举报

0个回答

所属标签

相似分享

官网相关资源

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