基于MCAL的S32K312 SPI使用

本文参考“大胡子喵喵猪”大佬《S32K312配置SPI(基于MCAL)》https://blog.csdn.net/m0_64944741/article/details/134930744

0、简介

相比于参考文章,本文基于S32K312 介绍SPI的使用,主要是记录开发流程,本文基于《基于MCAL的S32K3 MCU使用》的工程,环境如下:

MCU:NXP S32k312

RTD版本:SW32K3_S32M27x_RTD_R21-11_4.0.0_D2311

EB版本:tresos Studio 29.0

***本文目前主要是记录配置,后期不断完善配置内容的含义***

1、模块简介

SDO 主设备数据输出,从设备数据输入 对应MOSI master output slave input
SDI 主设备数据输入,从设备数据输出 对应MISO master input slave output
SCLK 时钟信号,由主设备产生
CS Chip Select,从设备使能信号,由主设备控制

SDI/SDO/SCLK: 通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。

当SPI主设备想读/写从设备时,它首先拉低从设备对应的CS线(如果CS是低电平有效)。接着开始发送工作脉冲到时钟线上,在相应的脉冲时间上,主设备把数据信号按位发到MOSI实现“写”,同时可对MISO采样而实现“读”。如下图所示:
在这里插入图片描述
注意:此图只是示例,不代表所有SPI的情况,因为输出和采样的边沿可能会变化。

采集位置 : CKPHA (Clock Phase) = CPHA = PHA = Phase = (时钟)相位
空闲电平 : CKPOL (Clock Polarity) = CPOL = POL = Polarity = (时钟)极性

在这里插入图片描述

2、新建工程

2.1 新建工程

本文基于《基于MCAL的S32K3 MCU使用》的工程。

2.2 添加相关模块

在这里插入图片描述

2.3 PORT配置

参考《基于MCAL的S32K3 PORT、DIO使用》中PortContainer配置。

2.4 MCU配置

添加McuClockReferencePoint
在这里插入图片描述
时钟源如下图所示:
在这里插入图片描述
需要手动打开添加的模块LPSPI0:
在这里插入图片描述

2.4 SPI配置

2.4.1 general

在这里插入图片描述

2.4.2 SpiPhyUint

在这里插入图片描述

2.4.3 SpiChannel

在这里插入图片描述

2.4.4 SpiExternalDevice

在这里插入图片描述
MT6DIMD0芯片时序图如下
在这里插入图片描述

2.4.5 SpiJob、SpiSequence:

这里注意配多个SPI时SpiChannel、SpiJob、SpiSequence尽量相对应
在这里插入图片描述
在这里插入图片描述

3.1 S32DS代码

在main函数里初始化MCU、Port、Spi,初始化完后即可发送/接收:

在这里插入图片描述
(图中代码使用的是EB)Spi_SetupEB(),有四个参数,第一个选择使用的哪个Channel,第二个参数是发送地址指针,第三个参数是接收地址指针,第四个参数是外部缓冲区的数据长度:
在这里插入图片描述
Spi_SyncTransmit() 发送、接收都是调用这个函数:
在这里插入图片描述
Channel与Sequence两个参数,代码生成的位置如下图:
在这里插入图片描述

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值