历史上的今天
返回首页

历史上的今天

今天是:2025年02月06日(星期四)

正在发生

2020年02月06日 | STM8 SPI的学习

2020-02-06 来源:eefocus

#define SPI_CS_PORT   GPIOC

#define SPI_CS_PIN    GPIO_PIN_4

#define SPI_CLK_PORT  GPIOC

#define SPI_CLK_PIN   GPIO_PIN_5

#define SPI_MOSI_PORT GPIOC

#define SPI_MOSI_PIN  GPIO_PIN_6

#define SPI_MISO_PORT GPIOC

#define SPI_MISO_PIN  GPIO_PIN_7


SPI是串行设备接口(Serial Peripheral Interface)的英文缩写,是一种单主多从式的全双工同步串行通信协议。


SCK:同步时钟信号线

    可调整数据比特流。主设备可在不同的波特率下传输数据。

MOSI:主机发送从机接受的数据线。

    数据从SPI总线的主设备输出,然后从SPI的从设备输入。

MISO:从机发送主机接收的数据线

    与上面的相反

CS:主从机通讯同步的控制信号线。

    让设备可以单独与特定的从设备通讯,避免数据线上的冲突。


按照串行通信位顺序,有MSB和LSB两种通信方式。

MSB是Most Significant Bit 的缩写,意为最高有效位。

先传输高位,后传输低位。

LSB(Least Significant Bit),意为最低有效位。

先传输低位,后传输高位。

 GPIO_Init(SPI_CS_PORT, SPI_CS_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW); //CS

推免输出高低速

    GPIO_Init(SPI_CLK_PORT, SPI_CLK_PIN, GPIO_MODE_OUT_PP_LOW_FAST);    //CLK

推免输出低高速  

GPIO_Init(SPI_MOSI_PORT, SPI_MOSI_PIN, GPIO_MODE_OUT_PP_HIGH_FAST); //MOSI

推免输出高高速

    GPIO_Init(SPI_MISO_PORT, SPI_MISO_PIN, GPIO_MODE_IN_FL_NO_IT);  //MISO

浮空输入无中断


配置步骤:

1、通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率。

2、选择CPOL和CPHA位,定制数据传输和串行时钟间的相位关系。

3、配置SPI_CR1寄存器的LSBFIRST位定义帧格式。

4、硬件模式下,在数据帧的全部传输过程中应把NSS脚连接到高电平;

   在软件模式下,需设置SPI_CR2寄存器的SSM和SSI位为1.

5、必须设置MSTR和SPE位(只当NSS脚被连到高电平,这些位才能保持为1)。


STM8应用程序通过3个状态标志位来监控SPI总线的状态。

1、总线忙(Busy)标志

当它被置1时,表明SPI正忙于通信。发送/接收完一个字后,BUSY标志立即清除,此标志由硬件设置和清楚。监视此标志可以避免写冲突错误。写此标志无效。仅当SPE位被置1时此标志才有意义。


2、发送缓冲器空标志(TXE)

此标志被置1是表明发送缓冲器为空。当发送缓冲器有一个待发送的数据时,TXE标志被清楚。

3、接收缓冲器非空(RXNE)

此标志为1时表明在接收缓冲器中包含有效的接收数据。读SPI数据寄存器可以清楚此标志。


关闭SPI

清楚SPE位即可关闭SPI。


SPI中断

STM8S系列单片机的SPI具有6个中断事件,

                    事件标志  使能控制位

1、发送缓冲器空标志    TXE    TXEIE

2、接收缓冲器非空标志  RXNE   RXNEIE

3、唤醒事件标志        WKUP   WKIE

4、主模式错误事件      MODF

5、溢出错误            OVR

6、CRC错误标志         CRCERR  ERRIE


相关功能寄存器

1、SPI控制寄存器1(SPI_CR1)

2、SPI控制寄存器1(SPI_CR2)

3、中断控制寄存器(SPI_ICR)

4、SPI状态寄存器(SPI_SR)

5、SPI数据寄存器(SPI_DR)

6、SPI_CRC多项式寄存器(SPI_CRCPR)





void spi_flash_init(void)

{

    /* spi pin init */

    GPIO_Init(SPI_CS_PORT, SPI_CS_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW); //CS

    GPIO_Init(SPI_CLK_PORT, SPI_CLK_PIN, GPIO_MODE_OUT_PP_LOW_FAST);    //CLK

    GPIO_Init(SPI_MOSI_PORT, SPI_MOSI_PIN, GPIO_MODE_OUT_PP_HIGH_FAST); //MOSI

    GPIO_Init(SPI_MISO_PORT, SPI_MISO_PIN, GPIO_MODE_IN_FL_NO_IT);  //MISO



    SPI_CS_DISABLE;



    SPI_DeInit();

    SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_2, SPI_MODE_MASTER,

             SPI_CLOCKPOLARITY_HIGH, SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT, 0);

    SPI_ITConfig(SPI_IT_TXE, DISABLE);

    SPI_ITConfig(SPI_IT_RXNE, DISABLE);



    SPI_Cmd(ENABLE);



#if SPI_FLASH_TEST

    test_spi_flash();

#endif

}

#define SPI_CS_DISABLE SET_PIN_H(SPI_CS_PORT,SPI_CS_PIN)

void SPI_DeInit(void)

{

    SPI->CR1 = SPI_CR1_RESET_VALUE;//状态寄存器配置

    SPI->CR2 = SPI_CR2_RESET_VALUE;

    SPI->ICR = SPI_ICR_RESET_VALUE;//中断寄存器配置

    SPI->SR = SPI_SR_RESET_VALUE; //状态寄存器配置

    SPI->CRCPR = SPI_CRCPR_RESET_VALUE;//CRC多项式寄存器  复位值07

}


推荐阅读

史海拾趣

峰岹(Fortior Tech )公司的发展小趣事

对于大型温室排气扇自动控制电路,网友们可能会提出一系列问题,这些问题涵盖了设计、功能、维护、能效以及安全性等多个方面。以下是一些常见问题及其回答示例:

1. 如何设计自动控制系统以确保温室内的温度和湿度保持在最佳范围?

回答
设计自动控制系统时,通常会集成温度传感器和湿度传感器,这些传感器实时监测温室内的环境参数,并将数据发送给控制器(如PLC或微控制器)。控制器根据预设的阈值(如温度上限、下限,湿度目标范围等)判断是否需要启动或调整排气扇的转速。此外,还可以加入光照强度、CO₂浓度等传感器,以更全面地控制温室环境。

2. 排气扇的自动启停是如何实现的?

回答
排气扇的自动启停通常通过继电器或固态继电器(SSR)控制。当控制器判断需要调整温室环境时,会发送信号给继电器,继电器闭合或断开电路,从而控制排气扇的电源通断。对于需要调节风速的排气扇,则可能采用变频驱动器(VFD)来控制电机的转速。

3. 如何保证自动控制系统在断电后能够恢复工作状态?

回答
为了确保系统在断电后能恢复工作状态,可以设计非易失性存储器(如EEPROM)来保存关键参数和设置。当系统重新上电时,控制器会读取这些参数并自动恢复到断电前的配置状态。此外,还可以加入备用电源(如UPS)来确保在短暂停电期间系统能够继续运行。

4. 如何提高自动控制系统的能效?

回答
提高能效的方法包括:

  • 使用高效节能的排气扇和电机。
  • 采用智能控制算法,如PID控制,精确调节排气扇的转速以匹配实际需求,避免过度或不足排气。
  • 引入自然通风策略,在适宜条件下减少机械通风的使用。
  • 定期检查和维护系统,确保传感器准确、设备无故障运行。

5. 自动控制系统在应对极端天气条件时有哪些安全措施?

回答
在应对极端天气条件时,自动控制系统应具备以下安全措施:

  • 增设防雷击保护装置,防止雷电对系统造成损害。
  • 设计防水防尘的传感器和控制器外壳,确保在恶劣天气下仍能正常工作。
  • 监控系统的运行状态,设置故障报警和自动停机功能,一旦检测到异常情况立即采取措施。
  • 备份关键数据和设置,以防数据丢失导致系统无法恢复。

这些问题和回答涵盖了大型温室排气扇自动控制电路的主要关注点,有助于理解和设计更加高效、安全、可靠的自动控制系统。

Digilent公司的发展小趣事

作为电子行业的领军企业之一,DIALIGHT始终将技术创新作为公司发展的核心驱动力。公司拥有一支高素质的研发团队和先进的研发设施,不断推出具有创新性和竞争力的LED产品。同时,DIALIGHT还积极与高校、科研机构等合作,共同推动LED照明技术的进步和应用。

Captive Fastener公司的发展小趣事

随着环保意识的日益增强,Captive Fastener公司积极响应国家环保政策,推动生产方式的绿色转型。公司引进先进的环保生产设备和技术,减少生产过程中的污染排放。同时,公司还研发出可回收再利用的紧固件产品,为电子行业的可持续发展做出了贡献。

Custom Components Inc公司的发展小趣事

在CCI的发展历程中,人才培养和团队建设始终是公司发展的重要保障。公司注重员工的个人成长和职业发展,为员工提供多样化的培训和发展机会。

同时,CCI还建立了完善的激励机制和福利制度,激发员工的工作热情和创造力。通过加强团队合作和文化建设等方式,公司营造了一个积极向上、充满活力的工作氛围。这种良好的团队氛围不仅提高了员工的工作效率和满意度,也为公司的持续发展提供了有力的人才保障。

聚辰(Giantec)公司的发展小趣事

港源公司深知品质是企业生存之本。公司先后通过了ISO9001质量管理体系认证、ISO14001环境体系认证、ISO45001职业健康安全管理体系认证以及IATF16949汽车质量体系认证等国际权威认证。这些认证不仅证明了港源公司在品质管理方面的卓越能力,还为公司赢得了国内外客户的广泛信赖和好评。港源公司坚持“诚信、创新、和谐、共赢”的企业核心价值观,致力于为客户提供高品质、高可靠性的产品和服务。

Arco Electronics公司的发展小趣事

随着公司规模的扩大,Arco Electronics开始实施全球化战略。公司先后在多个国家和地区设立了研发中心和生产基地,以便更好地服务当地市场。通过全球化的布局,Arco不仅降低了生产成本,还提高了产品的竞争力。同时,公司还积极与当地的合作伙伴建立战略合作关系,共同开拓市场,实现了互利共赢。

问答坊 | AI 解惑

集成电路导论(1)

集成电路导论[1].part1…

查看全部问答>

windows7,VC2005编译的张帆《驱动程序开发详解》的例子不能安装

编译能够成功,我把HelloWDM.inf拷到HelloWDM.sys目录下,使用EzDriverInstaller安装的时候最后总是无法成功,提示: the driver was enable successfully。 用Windows硬件管理器来手动安装。也一样的无法成功安装? 请问是和缘故? 谢谢…

查看全部问答>

波特率如何提高

我用LPC2214中集成的串口芯片UART0进行通讯,却发现终端只能处理到9600偶校验,再提高波特率数据收发就不正常了,哪位大侠帮忙指点下…

查看全部问答>

请问mobile开发包自带的例子的路径

如题,翻了半天没找到,谢谢指教。…

查看全部问答>

嵌入式指纹识别系统

有人做过嵌入式指纹识别吗?可否把相关资料发到我的邮箱collegeml@gmail.com 网上找了半天,没有头绪,在此先谢过了。…

查看全部问答>

什么是DC/DC模块,DC/AC模块?

什么是DC/DC模块,DC/AC模块? 没有概念 就是电源模块吗?…

查看全部问答>

求介绍DSP具体型号

求介绍DSP具体型号   我的需求如下: 1.主频50M+; 2.ADC通道数8+,精度8-12位(最好可调,像MSP430),内阻希望尽量高点,因为我是要用分压法测电阻的,被测电阻阻值为100M--10K;   速度希望能有4Msps+; 3.I/O口数量50+个; 4.通 ...…

查看全部问答>

DSP调试总结(转载)

DSP调试总结 1.warning: entry point symbol _c_int00 undefined 使用C写DSP时,在rts.lib库中定义了入口地址:_c_int00而使用汇编语言编程,就不用包括rts.lib库,所以入口地址及其标号可以由人工指定。而使用C时,就不同了,必须从rts.li ...…

查看全部问答>

刷机

烧写所有镜像成功后需要在securecrt  输入“reset”之后出现了下图的情况,不知道错在哪里了、 …

查看全部问答>

MXCHIP+体验用户程序下载

本帖最后由 木子鱼 于 2014-11-16 14:13 编辑      第一种方法: 使用Boot下载用户程序:    (根据用户手册操作:在Boot菜单选择1,之后选择Transfer  下拉菜单的 Send Ymodem ,在弹出菜单选择要下载 ...…

查看全部问答>