前几篇介绍过UART串口,地址:http://blog.csdn.net/devintt/article/details/52512457
这次讲解一下另一个常用的串口:SPI通信

科普SPI:是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,分别是:SCK(时钟)、MOSI(主机发送数据)、MISO(主机接收数据)、NSS(片选),其中NSS的片选信号,大部分情况下我们使用的是软件NSS,即为使用一个GPIO进行软件控制片选。值得注意的是,其中SPI有4中模式:分别是空闲时SCLK的电平高\低、MISO采样时第1\2个变化沿。

stm8s的SPI结构如下图,

如果用形象的比喻的话:SCK像一个发条齿轮,只有当发条齿轮转动的时候(SCK输出8个时钟),MOSI才能将1Byte的数据发送出去,同时,MISO将1Byte的数据接收回来。

使用SPI无非就一个初始化,一个数据发送/接收,两大功能。

初始化分初始化为主机、从机,不过一般和外部芯片通信单片机都是作为主机

  1. //******************************************************************
  2. //函数名: SPI_Master_Conf
  3. //功能: 硬件SPI主设备初始化
  4. //输入参数:无
  5. //返回值: 无
  6. //******************************************************************
  7. void SPI_Master_Conf(void)
  8. {
  9. CLK_PCKENR1 |= 0x02; //打开SPI时钟
  10. /*PC6、PC5设置为输出,最大10MHz*/
  11. PC_DDR |= 0x60;
  12. PC_CR1 |= 0x60;
  13. PC_CR2 |= 0x60;
  14. SPI_CR1 = 0x04;
  15. SPI_CR2 = 0x03;
  16. SPI_CR1|= 0x40;
  17. /*
  18. SPI_CR1_SPE = 0; //禁止SPI
  19. SPI_CR1_LSBFIRST = 0; //先发送MSB
  20. SPI_CR1_BR = 0; //波特率设为 fbus 16MHz
  21. SPI_CR1_MSTR = 1; //主模式
  22. SPI_CR1_CPOL = 1; //空闲状态时SCK为高电平
  23. SPI_CR1_CPHA = 1; //数据从第二个时钟边沿开始采样
  24. SPI_CR2_BDM = 0; //双线单向模式
  25. SPI_CR2_SSM = 1; //使能软件从设备管理
  26. SPI_CR2_SSI = 1; //内部从设备选择为主模式
  27. SPI_CR1_SPE = 1; //使能SPI
  28. */
  29. }
  30. //******************************************************************
  31. //函数名: SPI_Slave_Conf
  32. //功能: 硬件SPI从设备初始化
  33. //输入参数:无
  34. //返回值: 无
  35. //******************************************************************
  36. void SPI_Slave_Conf(void)
  37. {
  38. // SPI_CR1_LSBFIRST = 0; //先发送MSB
  39. // SPI_CR1_SPE = 0; //禁止SPI
  40. SPI_CR1_BR = 3; //波特率设为 fbus/16 1MHz
  41. SPI_CR1_MSTR = 0; //从模式
  42. SPI_CR1_CPOL = 1; //空闲状态时SCK为高电平
  43. SPI_CR1_CPHA = 1; //数据从第二个时钟边沿开始采样
  44. // SPI_CR2_BDM = 0; //双线单向模式
  45. SPI_CR2_SSM = 1; //使能软件从设备管理
  46. SPI_CR2_SSI = 1; //内部从设备选择为从模式
  47. SPI_ICR_RXIE = 1; //开启接收中断
  48. SPI_CR1_SPE = 1; //使能SPI
  49. }

发送方式一般有两种:阻塞轮训 和 中断   注意:发送的同时也在接收

  1. //******************************************************************
  2. //函数名: SPI_WriteByte
  3. //功能: 硬件SPI读写一个字节数据
  4. //输入参数:byte:数据
  5. //返回值: 无
  6. //******************************************************************
  7. u8 SPI_WriteByte(u8 byte)
  8. {
  9. while(SPI_SR_TXE==0);
  10. SPI_DR = byte;
  11. while(SPI_SR_RXNE==0);
  12. return SPI_DR;
  13. }
  14. #pragma vector=SPI_RXNE_vector
  15. __interrupt void SPI_RXNE_IRQHandler(void)
  16. {
  17. RxBuf[cnt++]=SPI_DR;
  18. }

这里的 #pragma vector=SPI_RXNE_vector 是IAR工程的中断函数入口地址。 SPI_DR为接收到的数据(其实就是寄存器的值)

这里给出的代码使用的是SPI的其中一个MODE,实际使用的话还需要结合外部芯片的SPI的MODE是哪个,通过修改配置 SPI控制器 SPI_CR1 (这个寄存器主要是修改SPI通信配置的)。

最后需要验证SPI初始化、通信成功了没,你只需要将MOSI和MISO(也就是PC5和PC6)短接在一起,发什么,接什么,也就是:u8 temp = SPI_WriteByte(0x5A);  如果通信成功的话,temp就是0x5A了。

stm8s开发(七) SPI的使用:SPI主机通信!相关推荐

  1. ADI Blackfin DSP处理器-BF533的开发详解7:SPI接口的驱动和应用(含源代码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 接口功能介绍 SPI 接口是 4 线串口,可以 ...

  2. STM32学习开发记录:W25Q16(FLASH)——SPI

    选用硬件:STM32F103 Nano开发板 板载有W25Q16 一.SPI协议简介 1.SPI的接线与数据 SPI:Serial Peripheral interface 串行外围设备接口 上图是S ...

  3. ESPIDF开发ESP32学习笔记【SPI与片外FLASH基础】

    文章目录 SPI SPI Master SPI传输时序 Notes on Sending Mixed Transactions to the Same Device SPI传输模式 中断传输 轮询传输 ...

  4. 树莓派开发系列教程10——树莓派spi液晶屏支持(fbtft)

        树莓派官方支持av及HDMI输出,板子上预留了一个csi接口的液晶显示屏,但是一直没有相应的模组出现.在很多应用场合我们需要一些小型的液晶屏显示一些基本的信息,所以小屏驱动很是必要. 在git ...

  5. AD9364 测试平台开发——第六篇,SPI配置内容解析

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 AD9364 测试平台开发--第六篇,SPI配置内容解析 以下为个人的一些理解,有一些东西可能不一定理解透彻了,可能有错误,请指正和见 ...

  6. 【MM32F5270开发板试用】RT-Thread SPI 驱动适配指南

    本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:xusiwei1236 本文记录了我在社区"Rice我叫加饭?"大佬移 ...

  7. 玩转移远SC60 Android开发板------(3)SPI转CAN总线

    SC60开发板默认是不支持CAN接口的,需要外接转换芯片,选取MICROCHIP的MCP25625这一款. 芯片特点如下: • Stand-Alone CAN 2.0B Controller with ...

  8. 18. SPI协议,spi转can,MCP2515裸机驱动详解

    更多信息请关注公众号:一口Linux 十八.SPI.MCP2515 一.SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC68HC ...

  9. 【SPI】SPI学习之SPI硬件相关

    关联内容: [SPI]SPI学习之SPI硬件相关 [SPI]SPI学习之SPI驱动相关 [SPI]SPI学习之SPI调试相关 目录 SPI硬件知识 SPI相关的缩写或说法 SPI外部信号描述 SPI硬 ...

  10. 【STM32H7教程】第94章 STM32H7的SPI总线应用之双机通信(DMA方式)

    完整教程下载地址:链接 第94章       STM32H7的SPI总线应用之双机通信(DMA方式) 本章节为大家讲解SPI DMA方式双机通信. 目录 94.1 初学者重要提示 94.2 SPI D ...

最新文章

  1. python flask 获取 get post 参数
  2. 机器学习实战(八)预测数值型数据:回归
  3. php 淘宝客接口开发,如何使用PHP的curl函数调用维易淘客接口
  4. 动态规划 —— 背包问题 P06 —— 分组背包
  5. ppt课堂流程图_4个超实用的PPT制作技巧:开学提升备课质量,资深老师都在用
  6. 中livechart显示大数据_Kaggle 大数据竞赛中的Tricks总结
  7. 什么是SQL Server数据库镜像?
  8. 掉价最快的手机排行榜_如何看待2020第一季度手机销量数据。
  9. Python入门经典学习1-乳腺癌分类问题
  10. 《勤哲Excel服务器专业开发》
  11. 【转】LaTeX 符号命令大全
  12. 自己建网站时要注意哪些细节
  13. 安卓10源码开发定制(29)手电筒控制源码分析
  14. vcpu和cpu的关系
  15. 全栈开发-Python的介绍
  16. 自建OTA服务器实现设备固件自动更新
  17. 数据的相似性和相异性的度量
  18. 9个宝藏级的神奇网站!个个精品,让你人生开挂,效率翻倍
  19. 电子词典(tcp多进程模型)
  20. 关于 /proc/mounts

热门文章

  1. Tensorflow LSTM时间序列预测的尝试
  2. gorm增删改查总结
  3. 47.命名空间namespace
  4. 「名词」数据管理、数据治理、数据中心、数据中台、数据湖、数据资产等
  5. 100%由清洁能源供电的数据中心什么样?苹果丹麦维堡数据中心投入使用
  6. 重新考虑数据中心的冷却方案—水冷却或将再次兴起
  7. 数据加载很慢_Vaex真香!几秒钟就能处理数十亿行数据,比Pandas、Dask更好用
  8. python datetime格式转换_分别用Excel和python进行日期格式转换成时间戳格式
  9. Python之sklearn2pmml:sklearn2pmml库函数的简介、安装、使用方法之详细攻略
  10. 成功解决pillow模块内生成的非UTF-8格式(比如label中有汉字时)