IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32之 SPI 学习笔记 -> 正文阅读

[嵌入式]STM32之 SPI 学习笔记

SPI

物理层
1》SPI通信是摩托罗拉公司研发通信
2》SPI需要四线串?同步通信,
分别是MCLK(同步时钟线),
MOSI(主机输出从机输? 线),
MISO(主机输?从机输出线),
NSS(?选信号线)。
3》SPI是?低位先?可选择的,8bit和16bit数据位可选择的通信?式
4》SPI的通信速率在stm32中可达18MHZ
5》SPI通信是?种全双?的通信?式
6》SPI可实现单主机多从机的通信?式
7》 MSB(?位先?),LSB(低位先?) 协议层 4种?作模式
CPOL:时钟极性,?于确定空闲时,时钟线的状态
CPHA:时钟相位,?于确定数据的采样和输出在哪?个时钟边沿(采样不变,输出允许发 ?改变)
MODE CPOL CPHA
0 0 0 时钟线空闲时为低电平,在时钟线前沿采样,在时钟线的后沿输 出
1 0 1 时钟线空闲时为低电平,在时钟线前沿输出,在时钟线的后沿采 样
2 1 0 时钟线空闲时为?电平,在时钟线前沿采样,在时钟线的后沿输出
3 1 1 时钟线空闲时为?电平,在时钟线前沿输出,在时钟线的后沿采 样
// 读取W25Qxx的制造商和设备ID
1》打开时钟----GPIOA,SPI1,AFIO
2》初始化GPIOA
–GPIO_Pin_4
–通?推挽输出
–输出速度–50M
–GPIO_Pin_5|6|7
–复?推挽输出
–输出速度–50M
3》SPI初始化
–双线全双?
–主机
–数据位数8bit
–时钟悬空?
–数据捕获于第?个时钟边沿
–?选引脚由软件控制
–波特率预分频器–4分频
–?位先?MSB
–CRC校验–7
4》SPI使能

#include "spi.h"
	#define CS_HI GPIO_SetBits(GPIOA, GPIO_Pin_4)
	#define CS_LO GPIO_ResetBits(GPIOA, GPIO_Pin_4)
	void SPI_Config(void)
	{
		GPIO_InitTypeDef GPIO_InitStruct;
		SPI_InitTypeDef SPI_InitStruct; 
		//打开时钟
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1,ENABLE);
		//初始化
		GPIOA GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
		GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
		GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOA,&GPIO_InitStruct);
		GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
		GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
		GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOA,&GPIO_InitStruct); 
		//初始化SPI
		SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
		SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;
		SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;
		SPI_InitStruct.SPI_CRCPolynomial = 7;
		SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
		SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
		SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
		SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
		SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
		SPI_Init(SPI1,&SPI_InitStruct);
		 //使能SPI SPI_Cmd(SPI1,ENABLE);
 }
 uint8_t SPI_SendRxData(uint8_t txdata)
 {
		 while(SET != SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE));
		 SPI_I2S_ClearITPendingBit(SPI1,SPI_I2S_FLAG_TXE);
		 SPI_I2S_SendData(SPI1,txdata);
		 while(SET != SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE));
		 SPI_I2S_ClearITPendingBit(SPI1,SPI_I2S_FLAG_RXNE);
		 return SPI_I2S_ReceiveData(SPI1);
 }
 uint16_t SPI_W25QXX_ID(void)
 {
		 uint16_t read_data = 0;
		 CS_LO;
		 SPI_SendRxData(0x90);
		 SPI_SendRxData(0x00);
		 SPI_SendRxData(0x00);
		 SPI_SendRxData(0x00);
		 read_data = SPI_SendRxData(0x11);
		 read_data = read_data<<8;
		 read_data |= SPI_SendRxData(0x11);
		 CS_HI;
		 return read_data;
 }
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 01:07:48  更:2022-09-30 01:09:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 19:21:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码