STM32F407 SPI的几个注意事项

1、STM32F407的SPI1的波特率最高,但也只能到37.5Mbits/s。和SPI从设备交互时,不能只看从设备的SPI能力,得按主从设备的低限确定系统的整体波特率;

2、SPI+DMA时,发送和接收都会很快,从波形看,字节间几乎没有明显的间隔。但在读取从设备的地址空间时,从设备往往需要一定的时间准备数据,如果主设备读取太快,从设备的数据准备时间不足,会导致读取错误。此时,可不使用DMA,而是采用阻塞式或中断式SPI收发函数。经测试HAL_SPI_TransmitRecieve()会在字节间有约0.8us的空档;HAL_SPI_Transmit()会快些,间隔大约0.1us;

3、SPI+DMA的另一个问题就是:CPU调用DMA函数后并不会等待数据传输完成,而是直接运行后续程序,这就给拉高片选(NSS)以及得到的数据做后续处理带来问题,比如SPI还未传输完就拉高了NSS,或者还没完全读出数据就拿来做判断处理。于是为了解决这些问题,还得用定时器做中断拉高NSS及开始后续处理等,反而麻烦。而不使用DMA,采用阻塞式或中断式SPI收发函数则可避免这一问题;

3、SPI从设备往往需要主设备在通信的开头几个字节里写入命令和地址,如果需要往一个地址开始写入大量数据,且需要根据情况从不同的数组中取数,那就可以采用”先发字头再发数据“的方法(而且使用Transmit函数比较快):

void Write_Data(uint32_t Addr, uint8_t* pBuf, uint16_t len)
{
	HAL_GPIO_WritePin(W5100S_SCS_GPIO_Port, W5100S_SCS_Pin, GPIO_
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值