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

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

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

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


  1. /*--ZQP的74HC595的初始化*/

  2. void HC595_Init()

  3. {

  4. GPIO_InitTypeDef GPIO_InitS;

  5.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);


  6.   GPIO_InitS.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;

  7.   GPIO_InitS.GPIO_Mode = GPIO_Mode_Out_PP;

  8.   GPIO_InitS.GPIO_Speed = GPIO_Speed_50MHz;

  9.   GPIO_Init(HC595_PORT, &GPIO_InitS);


  10. GPIO_SetBits(HC595_PORT,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);

  11. }



  12. void HC595SendData(unsigned int SendVal)

  13. {

  14.   uint8_t i;

  15. for (i=0; i<16; i++)

  16.   {

  17. /*--step1、串行输入引脚,所谓串行就是使数据在一根信号线上按顺序一位一位地传输*/

  18.     if (((SendVal << i) & 0x8000) != 0 )

  19. MOSIO_Pin14_DS_OUT=1;

  20.     else

  21. MOSIO_Pin14_DS_OUT=0;

  22. /*--step2、SHCP发生一次上升沿的时候,74HC595才会从DS引脚上取得当前的数据*/

  23.     S_CLK_Pin11_SHCP_OUT=0;

  24. delay_us(100);

  25.     S_CLK_Pin11_SHCP_OUT=1;

  26.   }

  27. /*--step3、当移位寄存器的8位数据全部传输完毕后,制造一次锁存器时钟引脚的上升沿(先拉低电平再拉高电平)*/

  28. R_CLK_Pin12_STCP_OUT=0;

  29. delay_us(100);

  30. R_CLK_Pin12_STCP_OUT=1;

  31. }


  32. /main函数

  33. unsigned char tab[]={0xFF,0XFE};

  34. unsigned int Val;

  35. /*--Z QP的74HC595*/

  36. Val=tab[1]&0x00ff;  //--保存tab[1],并将将tab[1]放置在高8位

  37. Val<<=8;

  38. Val=Val+tab[0]; //--保存tab[0]放置在低8位

  39. HC595SendData(Val);
复制代码

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


收藏 评论0 发布时间:2022-12-12 14:00

举报

0个回答

所属标签

相似分享

官网相关资源

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