spi的学习

spi的学习总结

spi的原理

spi是一个全双工模式,同步的通讯模式。
通讯包括一个主设备(master)和多个从设备(slave)。spi的读写操作都是由主设备发起,通过片选信号选择从设备

spi的信号线:

在这里插入图片描述
在这里插入图片描述

spi的数据发送接受

spi主机和从机都会有一个串行移位寄存器,主机通过向它的移位寄存器写入一个数据来发起数据传送。
在这里插入图片描述
SPI严格来说,只有主从模式之分,外设的读写是同时进行的。主机如果要读一个数据,就必须发送一个数据来引起从机的传输
简单来说就是发一个数据 ,必然会接受到一个数据.反之亦然

spi的时序图

CPOL决定空闲状态的电平.
CPHA决定在一个周期的第几个边沿采样.
spi工作模式:
CPOL=0 CPHA=0 上升沿
CPOL=0 CPHA=1 下降沿
CPOL=1 CPHA=0 下降沿
CPOL=1 CPHA=1 上升沿
具体采用什么模式根据芯片手册和实际情况

spi的使用

stm32cubemx

在这里插入图片描述

Frame Format: 决定移位时从高位开始,还是低位
NSS Signal Type: 是硬件片选还是软件片选

使用前建议先封装

1.参数定义

unsigned char rx_data[32] = {0};
unsigned char tx_data[32] = {0};

2.封装
8位的读取

uint8_t read8(unsigned char reg)
{
  uint8_t value;
	tx_data[0] = reg;
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
	HAL_SPI_TransmitReceive(&hspi1, tx_data, rx_data, 2, 0x10);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);	
	value = rx_data[1];
  return value;
}

16位的读取

uint16_t read16(unsigned char reg)
{
  uint16_t value;
	tx_data[0] = reg;
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
	HAL_SPI_TransmitReceive(&hspi1, tx_data, rx_data, 3, 0x10);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);	
	value = (rx_data[1]<<8) + rx_data[2];
  return value;
}

注:本文的读取函数封装是基于BMP280气压传感器.在从BMP280得到数据时需要先发送reg存储寄存器的地址.返回第一个字节是spi寄存器的值,所以取tx_data[1].

  • 所以要对spi有进一步了解,可以查阅spi的芯片手册.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值