STM32 学习笔记--SPI通信配置
来源:互联网 发布:淘宝大学vip课程下载 编辑:程序博客网 时间:2024/06/01 10:13
SPI时序
SPI时序图如下:
STM32做为主机设计SPI时序一般选用CPOL=1/CPHA=1;
SPI通信配置
1、时钟使能。GPIO时钟使能RCC->APB2ENR,SPI时钟使能RCC->APB2ENR设置。
(为什么还要连接GPIO时钟,参见STM32参考手册8.1.4节。手册上这么说的:对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。)
2、配置GPIO工作模式。配置GPIO片选,由软件管理(即自定义引脚),推挽输出,上拉;
配置SPI引脚SCK、MOSI、MISO所用到的引脚为复用功能;GPIOX->CR1 GPIOX->ODR;
3、SPI设置工作模式。通过配置SPIx->CR1来设置SPI 的工作模式。配置工作模式为全双工,主机模式,SCK闲时电平为高,第二个时钟沿(上升沿)采样数据,内部从机选择软件管理模式。设置SPI的时钟频率(最大18MHZ),设置数据格式(MSB在前还是LSB在后),内部从机选择设置为主机(置1)。
4、使能SPI,启动传输。
5,因为SPI是同步输入输出的,在发送数据的时候已经在接受数据。通过检测SPIx->SR第一位的状态来决定要进行发送和接受数据。通过读取SPIx->DR位的来发送和接受数据。
SPIx->SR寄存器图:
SPIx->DR寄存器图
程序如下:
#include "spi.h" //SPI口初始化//这里针是对SPI1的初始化void SPI1_Init(void){ RCC->APB2ENR|=1<<2; //PORTA时钟使能 RCC->APB2ENR|=1<<12; //SPI1时钟使能 //这里只针对SPI口初始化 GPIOA->CRL&=0X000FFFFF; GPIOA->CRL|=0XBBB00000;//PA5.6.7复用 GPIOA->ODR|=0X7<<5; //PA5.6.7上拉 //这里只针对SPI——CS口初始化 GPIOA->CRL&=0XFFFFF0FF; GPIOA->CRL|=0X00000300;//PA2推挽输出 GPIOA->ODR|=1<<2; //PA2上拉 SPI1->CR1|=0<<10;//全双工模式 SPI1->CR1|=1<<9; //软件nss管理 SPI1->CR1|=1<<8; SPI1->CR1|=1<<2; //SPI主机 SPI1->CR1|=0<<11;//8bit数据格式 SPI1->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1 SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1 SPI1->CR1|=7<<3; //Fsck=Fcpu/256 SPI1->CR1|=0<<7; //MSBfirst SPI1->CR1|=1<<6; //SPI设备使能 SPI1_ReadWriteByte(0xff);//启动传输(主要作用:维持MOSI为高) } //SPI1 速度设置函数//SpeedSet:0~7//SPI速度=fAPB2/2^(SpeedSet+1)//APB2时钟一般为72Mhzvoid SPI1_SetSpeed(u8 SpeedSet){ SpeedSet&=0X07; //限制范围 SPI1->CR1&=0XFFC7; SPI1->CR1|=SpeedSet<<3; //设置SPI1速度 SPI1->CR1|=1<<6; //SPI设备使能 } //SPI1 读写一个字节//TxData:要写入的字节//返回值:读取到的字节u8 SPI1_ReadWriteByte(u8 TxData){ u16 retry=0; while((SPI1->SR&1<<1)==0)//等待发送区空 { retry++; if(retry>0XFFFE)return 0; } SPI1->DR=TxData; //发送一个byte retry=0; while((SPI1->SR&1<<0)==0) //等待接收完一个byte { retry++; if(retry>0XFFFE)return 0; } return SPI1->DR; //返回收到的数据 }
0 0
- STM32 学习笔记--SPI通信配置
- STM32 SPI学习笔记!
- STM32 SPI 学习笔记
- STM32-SPI实验学习笔记
- STM32的SPI学习笔记
- STM32如何配置使用SPI通信
- STM32学习之路之SPI通信
- STM32之间SPI通信
- STM32 SPI 通信
- STM32 SPI DMA通信
- STM32之SPI通信
- stm32学习笔记 F1系列SPI
- STM32 SPI配置
- stm32配置spi
- s5pv210与stm32 spi通信
- stm32 SPI通信 操作寄存器
- stm32 io模拟spi通信
- stm32 SPI学习
- Markdown-07流程图
- Java接口 继承 多态
- 蓝桥杯-字母图形
- 脱壳-PECompact v1.66
- bzoj3569 DZY Loves Chinese II
- STM32 学习笔记--SPI通信配置
- 算是总结2016,想想2017
- pycharm快捷键、常用设置、配置管理
- C++数据类型及限制和类型转换
- Myhabits报错invalid types () or values ()解决方法with invalid types () or values (). Cause: java.lang.NoSu
- java包1
- JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】
- Scala中的=>符号
- HTTP协议详解