stm8s开发(七) SPI的使用:SPI主机通信!
前几篇介绍过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无非就一个初始化,一个数据发送/接收,两大功能。
初始化分初始化为主机、从机,不过一般和外部芯片通信单片机都是作为主机
- //******************************************************************
- //函数名: SPI_Master_Conf
- //功能: 硬件SPI主设备初始化
- //输入参数:无
- //返回值: 无
- //******************************************************************
- void SPI_Master_Conf(void)
- {
- CLK_PCKENR1 |= 0x02; //打开SPI时钟
- /*PC6、PC5设置为输出,最大10MHz*/
- PC_DDR |= 0x60;
- PC_CR1 |= 0x60;
- PC_CR2 |= 0x60;
- SPI_CR1 = 0x04;
- SPI_CR2 = 0x03;
- SPI_CR1|= 0x40;
- /*
- SPI_CR1_SPE = 0; //禁止SPI
- SPI_CR1_LSBFIRST = 0; //先发送MSB
- SPI_CR1_BR = 0; //波特率设为 fbus 16MHz
- SPI_CR1_MSTR = 1; //主模式
- SPI_CR1_CPOL = 1; //空闲状态时SCK为高电平
- SPI_CR1_CPHA = 1; //数据从第二个时钟边沿开始采样
- SPI_CR2_BDM = 0; //双线单向模式
- SPI_CR2_SSM = 1; //使能软件从设备管理
- SPI_CR2_SSI = 1; //内部从设备选择为主模式
- SPI_CR1_SPE = 1; //使能SPI
- */
- }
- //******************************************************************
- //函数名: SPI_Slave_Conf
- //功能: 硬件SPI从设备初始化
- //输入参数:无
- //返回值: 无
- //******************************************************************
- void SPI_Slave_Conf(void)
- {
- // SPI_CR1_LSBFIRST = 0; //先发送MSB
- // SPI_CR1_SPE = 0; //禁止SPI
- SPI_CR1_BR = 3; //波特率设为 fbus/16 1MHz
- SPI_CR1_MSTR = 0; //从模式
- SPI_CR1_CPOL = 1; //空闲状态时SCK为高电平
- SPI_CR1_CPHA = 1; //数据从第二个时钟边沿开始采样
- // SPI_CR2_BDM = 0; //双线单向模式
- SPI_CR2_SSM = 1; //使能软件从设备管理
- SPI_CR2_SSI = 1; //内部从设备选择为从模式
- SPI_ICR_RXIE = 1; //开启接收中断
- SPI_CR1_SPE = 1; //使能SPI
- }
发送方式一般有两种:阻塞轮训 和 中断 注意:发送的同时也在接收
- //******************************************************************
- //函数名: SPI_WriteByte
- //功能: 硬件SPI读写一个字节数据
- //输入参数:byte:数据
- //返回值: 无
- //******************************************************************
- u8 SPI_WriteByte(u8 byte)
- {
- while(SPI_SR_TXE==0);
- SPI_DR = byte;
- while(SPI_SR_RXNE==0);
- return SPI_DR;
- }
- #pragma vector=SPI_RXNE_vector
- __interrupt void SPI_RXNE_IRQHandler(void)
- {
- RxBuf[cnt++]=SPI_DR;
- }
这里的 #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主机通信!相关推荐
- ADI Blackfin DSP处理器-BF533的开发详解7:SPI接口的驱动和应用(含源代码)
硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 接口功能介绍 SPI 接口是 4 线串口,可以 ...
- STM32学习开发记录:W25Q16(FLASH)——SPI
选用硬件:STM32F103 Nano开发板 板载有W25Q16 一.SPI协议简介 1.SPI的接线与数据 SPI:Serial Peripheral interface 串行外围设备接口 上图是S ...
- ESPIDF开发ESP32学习笔记【SPI与片外FLASH基础】
文章目录 SPI SPI Master SPI传输时序 Notes on Sending Mixed Transactions to the Same Device SPI传输模式 中断传输 轮询传输 ...
- 树莓派开发系列教程10——树莓派spi液晶屏支持(fbtft)
树莓派官方支持av及HDMI输出,板子上预留了一个csi接口的液晶显示屏,但是一直没有相应的模组出现.在很多应用场合我们需要一些小型的液晶屏显示一些基本的信息,所以小屏驱动很是必要. 在git ...
- AD9364 测试平台开发——第六篇,SPI配置内容解析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 AD9364 测试平台开发--第六篇,SPI配置内容解析 以下为个人的一些理解,有一些东西可能不一定理解透彻了,可能有错误,请指正和见 ...
- 【MM32F5270开发板试用】RT-Thread SPI 驱动适配指南
本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:xusiwei1236 本文记录了我在社区"Rice我叫加饭?"大佬移 ...
- 玩转移远SC60 Android开发板------(3)SPI转CAN总线
SC60开发板默认是不支持CAN接口的,需要外接转换芯片,选取MICROCHIP的MCP25625这一款. 芯片特点如下: • Stand-Alone CAN 2.0B Controller with ...
- 18. SPI协议,spi转can,MCP2515裸机驱动详解
更多信息请关注公众号:一口Linux 十八.SPI.MCP2515 一.SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC68HC ...
- 【SPI】SPI学习之SPI硬件相关
关联内容: [SPI]SPI学习之SPI硬件相关 [SPI]SPI学习之SPI驱动相关 [SPI]SPI学习之SPI调试相关 目录 SPI硬件知识 SPI相关的缩写或说法 SPI外部信号描述 SPI硬 ...
- 【STM32H7教程】第94章 STM32H7的SPI总线应用之双机通信(DMA方式)
完整教程下载地址:链接 第94章 STM32H7的SPI总线应用之双机通信(DMA方式) 本章节为大家讲解SPI DMA方式双机通信. 目录 94.1 初学者重要提示 94.2 SPI D ...
最新文章
- python flask 获取 get post 参数
- 机器学习实战(八)预测数值型数据:回归
- php 淘宝客接口开发,如何使用PHP的curl函数调用维易淘客接口
- 动态规划 —— 背包问题 P06 —— 分组背包
- ppt课堂流程图_4个超实用的PPT制作技巧:开学提升备课质量,资深老师都在用
- 中livechart显示大数据_Kaggle 大数据竞赛中的Tricks总结
- 什么是SQL Server数据库镜像?
- 掉价最快的手机排行榜_如何看待2020第一季度手机销量数据。
- Python入门经典学习1-乳腺癌分类问题
- 《勤哲Excel服务器专业开发》
- 【转】LaTeX 符号命令大全
- 自己建网站时要注意哪些细节
- 安卓10源码开发定制(29)手电筒控制源码分析
- vcpu和cpu的关系
- 全栈开发-Python的介绍
- 自建OTA服务器实现设备固件自动更新
- 数据的相似性和相异性的度量
- 9个宝藏级的神奇网站!个个精品,让你人生开挂,效率翻倍
- 电子词典(tcp多进程模型)
- 关于 /proc/mounts
热门文章
- Tensorflow LSTM时间序列预测的尝试
- gorm增删改查总结
- 47.命名空间namespace
- 「名词」数据管理、数据治理、数据中心、数据中台、数据湖、数据资产等
- 100%由清洁能源供电的数据中心什么样?苹果丹麦维堡数据中心投入使用
- 重新考虑数据中心的冷却方案—水冷却或将再次兴起
- 数据加载很慢_Vaex真香!几秒钟就能处理数十亿行数据,比Pandas、Dask更好用
- python datetime格式转换_分别用Excel和python进行日期格式转换成时间戳格式
- Python之sklearn2pmml:sklearn2pmml库函数的简介、安装、使用方法之详细攻略
- 成功解决pillow模块内生成的非UTF-8格式(比如label中有汉字时)