历史上的今天
返回首页

历史上的今天

今天是:2025年07月21日(星期一)

正在发生

2018年07月21日 | STM32之SPI串行线与HC595使用

2018-07-21 来源:eefocus

/* 

名称:STM32之SPI串行线与HC595使用 

说明:


SPI:串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC、 LCD 等设备与 MCU 间,要求通讯速率较高的场合。对于SPI来说,其使用主要有四根线:分别是CS、MOSI、MISO、CLK;其中片选线CS,一般用普通的GPIO口来代替。


其次,SPI是全双工通信线路,其发送的时候同时也在接收着。因此要注意发送的时候接收的数据是否是垃圾数据。


就我理解,SPI一般用于外围的部件中,如FLASH、ADC、LCD和MCU。这些部件一般都包含了SPI接口,方便和主机进行通信。但是也有用于普通的串行线,用于一般的串行传输中。如此处的和HC595通信中,基本上只使用了SPI的串行通信功能。


*/


//SPI2初始化

void SPI2_Init(void)

{

  SPI_InitTypeDef  SPI_InitStructure;

  GPIO_InitTypeDef GPIO_InitStructure;


  //使能相应时钟

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);


  /* Configure SPI2 pins: NSS, SCK, MISO and MOSI */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  GPIO_Init(GPIOB, &GPIO_InitStructure);


    /*Configure PA.4(NSS)--------------------------------------------*/

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_12;

  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOB, &GPIO_InitStructure);




  /* SPI1 configuration */ 

  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;     //主机模式

  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8位数据

  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;//SPI_CPOL_High=模式3,时钟空闲为高 //SPI_CPOL_Low=模式0,时钟空闲为低

  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//SPI_CPHA_2Edge;//SPI_CPHA_1Edge, SPI_CPHA_2Edge;

  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//SPI_NSS_Soft;//SPI_NSS_Hard

  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//SPI_BaudRatePrescaler_2=18M;//SPI_BaudRatePrescaler_4=9MHz

  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//数据从高位开始发送

  SPI_InitStructure.SPI_CRCPolynomial = 7;


  SPI_Init(SPI2, &SPI_InitStructure);

    /*Enable SPI1.NSS as a GPIO*/

  //SPI_SSOutputCmd(SPI2, ENABLE);


  /* Enable SPI2  */

  SPI_Cmd(SPI2, ENABLE);   

}




//SPI发送一个字符数据

uint8_t SPI_Send_Byte(uint8_t dat)

{

  /* Loop while DR register in not emplty */

 while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);


  /* Send byte through the SPI2 peripheral */       


  SPI_I2S_SendData(SPI2, dat);


    while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);

  /* Wait to receive a byte */



  /* Return the byte read from the SPI bus */

  return SPI_I2S_ReceiveData(SPI2);

}


主函数主要代码(注意输出锁存的数据要产生相关引脚的上升沿):


    SPI_Send_Byte(val);


    GPIO_ResetBits(SPI_CS_PORT,SPI_CS_PIN);

    delay_ms(10);

    GPIO_SetBits(SPI_CS_PORT,SPI_CS_PIN);


推荐阅读

史海拾趣

Discera公司的发展小趣事

随着CMOS MEMS谐振器技术的不断成熟,Discera公司开始注重专利的申请和保护。他们投入大量资源用于技术研发和专利申请,逐渐在MEMS谐振器技术领域积累了大量的专利。这些专利不仅保护了公司的核心技术,也为公司的持续发展提供了坚实的法律保障。

Handok Co Ltd公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,Discera公司始终保持着对技术创新的追求。他们不断投入研发资源,推动产品的升级和换代。同时,Discera还积极探索新的应用领域和市场机会,为公司的未来发展描绘出更加广阔的蓝图。

以上五个故事概要基于Discera公司的发展历程和公开信息构建,旨在展示公司在电子行业中的成长和进步。请注意,这些故事并非真实事件,仅供参考。

Crane Connectors公司的发展小趣事

在日益严峻的环保形势下,Crane Connectors公司积极响应国家环保政策,将绿色环保理念融入企业的生产经营活动中。公司采用环保材料和节能技术,减少生产过程中的污染物排放和资源消耗。同时,公司还加强废弃物的回收和处理工作,实现资源的循环利用。这些环保举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

功得(CONQUER)公司的发展小趣事

在追求经济效益的同时,功得公司也积极履行社会责任。他们关注环保问题,采用环保材料和工艺生产产品;关注员工福利,为员工提供良好的工作环境和福利待遇;关注社会公益事业,积极参与各种慈善活动。这些举措使得功得公司在社会上树立了良好的形象,也为公司的长远发展提供了有力保障。

Allied Controls Incorporated公司的发展小趣事

功得公司最初成立时,只是一家专注于电子元器件代理的小公司。创始人李明看准了电子行业快速发展的趋势,决定投身于这一领域。他带领团队深入市场调研,发现了一种新型的集成电路芯片在市场上有着巨大的潜力。于是,功得公司投入大量资金研发这种芯片,并通过不断改进和优化,最终成功推出了具有竞争力的产品。凭借这一创新产品,功得公司在市场上获得了初步的成功,为后续发展奠定了基础。

Diodes Incorporated公司的发展小趣事

值得一提的是,Diodes Incorporated还荣获了亚洲金选奖殊荣。公司的超高功率密度(UHPD)充电器解决方案在亚洲金选奖中获得了金选节能系统功率半导体供货商项目公司奖。这一奖项的获得,不仅彰显了公司在节能系统功率半导体产品领域的领先地位,也进一步提升了公司的品牌形象和市场竞争力。

以上五个故事概述了Diodes Incorporated公司在电子行业中发展起来的相关事实。通过这些故事,我们可以看到公司在技术创新、市场拓展、财务表现以及品牌建设等方面所取得的成就和进步。

问答坊 | AI 解惑

为PCB布线规范

为PCB布线规范,只用于学习,请勿用于商业利益。…

查看全部问答>

LED的发展

LED的兴起,是照明路上的又一次革命,从艾迪生发明的第一只灯泡到现在仅不到二百年,照明在一直使用白炽灯泡做为照明用,后来发明了日光灯,一直 延用至今,20世纪都研究出来了各种灯具,多数是用在工厂,道路和特殊用途的灯具,节能灯和日光灯是 ...…

查看全部问答>

请问 版主 ST官方网页没有参考价格?

请问 版主 ST官方网页没有参考价格? 在选型时想看到参考价格.在TI的官方网页,比如说MSP430,就可以看到参考价格.…

查看全部问答>

TI汽车资讯娱乐系统设计

$(\'swf_Ieg\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMzA3OTYwMTQw/v.sw ...…

查看全部问答>

血氧饱和度测量中的直流成分应该如何测量

如题,血氧饱和度的经验公式中有一个直流成分与交流成分的比值这一项,其中的直流成分应当怎样确定呢?大神求解释~…

查看全部问答>

求高手指教关于Quartus ii中testbench的问题

测试程序设置完成后 运行不出仿真图形 却出来这个错误 求高人指点啊。。。谢谢啦。。。…

查看全部问答>

ElectroFlo 系统级高精度电子产品热分析软件

ElectroFlo 是一个专门针对模拟高密度、高功率电子 产品的电子散热而开发的仿真软件。ElectroFlo 是一个功 能完整并且高效的热分析软件。ElectroFlo 结合强大的热 电耦合分析能力和面向对象的图形化用户界面,为用户提 供了一个兼具效率和精度 ...…

查看全部问答>