STM32 SPI通信协议2——SPI功能选项设置

在上篇文章中,已经对STM32的四个引脚进行了GPIO的基本配置,现在开始SPI外设进行配置。

SPI_InitTypeDef SPI_InitStructure; 
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; 
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; 
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; 
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; 
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; 
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; 
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128; 
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; 
SPI_InitStructure.SPI_CRCPolynomial = 7; 
SPI_Init(SPI1, &SPI_InitStructure);

SPI_Direction:设置SPI单向或者双向的数据模式。参数可取值如下图:

SPI_Direction的参数值
SPI_Mode描述
SPI_Direction_2Lines_FullDuplex

SPI设置为双线双向全双工

SPI_Direction_2Lines_RxOnlySPI设置为双线单向接收
SPI_Direction_1Line_RxSPI设置为单线双向接收
SPI_Direction_1Line_TxSPI设置为单线双向发送

        建议写双线双向全双工,没用到也无所谓,以后要是用到了,也不用去改。

 SPI_Mode:设置SPI的工作模式(这个SPI_Mode和上面的只是名字一样,其他完全不同)。

SPI_Mode的参数值
SPI_Mode描述
SPI_Mode_Master设置为主SPI
SPI_Mode_Slave设置为从SPI

SPI_DataSize:设置SPI的数据大小。

SPI_DataSize的参数值
SPI_DataSize描述
SPI_DataSize_16bSPI发送接收16位帧结构
SPI_DataSize_8bSPI发送接收8位帧结构

        看一下连接什么样的外设,在对应的手册里可以找到是多少帧的。 

SPI_CPOL:选择串行时钟的稳态。

SPI_CPOL的参数值
SPI_CPOL描述
SPI_CPOL_High时钟悬空高
SPI_CPOL_Low时钟悬空低

         看外设空闲的时候是低电平还是高电平。

 SPI_CPHA:设置为捕获的时钟活动沿。

SPI_CPHA的参数值
SPI_CPHA描述
SPI_CPHA_2Edge数据捕获于第二个时钟沿
SPI_CPHA_1Edge数据捕获于第一个时钟沿

         CPHA已经在上一章已经详细介绍过了。

SPI_NSS:指定NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理。

SPI_NSS的参数值
SPI_NSS描述
SPI_NSS_HardNSS由外部管脚管理
SPI_NSS_Soft内部NSS信号有SSI位控制

SPI_BaudRatePrescaler:设置波特率预分配的值(用于设置发送和接收的SCK时钟)。

SPI_BaudRatePrescaler的参数值
SPI_NSS描述
SPI_BaudRatePrescaler2波特率预分频值为2
SPI_BaudRatePrescaler4波特率预分频值为4
SPI_BaudRatePrescaler8波特率预分频值为8
SPI_BaudRatePrescaler16波特率预分频值为16
SPI_BaudRatePrescaler32波特率预分频值为32
SPI_BaudRatePrescaler64波特率预分频值为64
SPI_BaudRatePrescaler128波特率预分频值为128
SPI_BaudRatePrescaler256波特率预分频值为256

         凡是串行通信就肯定有波特率,因为波特率决定了串行通信的速度,而串行通信的速度越快stm32接收的速度也就越快。如果你想让32工作的快一点,采集的频率快一点,那么可以让分频系数小一些,波特率就会变大。

        分频系数是指UART模块将时钟频率进行分频后得到的用于传输数据的实际时钟频率,其计算公式为:分频系数 = UART时钟频率 / (波特率 x 16)。例如,当UART时钟频率为16MHz,波特率为9600时,分频系数为104.1667。

 SPI_FirstBit:设置数据传输从MSB开始,还是从LSB开始。

SPI_FirstBit的参数值
SPI_FirstBit描述
SPI_FirstBit_MSB数据传输从MSB位开始
SPI_FirstBit_LSB数据传输从LSB位开始

        MSB:数据的高位。

        LSB:数据的低位。

        外设的手册里面也有要求。

SPI_CRCPolynomial:定义了用于CRC值计算的多项式。

以下是关于SPI通信中CRC校验的计算方法:

  1. 首先,我们需要准备好要发送的数据,假设为data。

  2. 然后,我们需要定义一个生成多项式,假设为0x1021。

  3. 接下来,我们需要将data和一个16位的初始值0xFFFF进行异或运算,得到一个新的16位值。

  4. 然后,我们需要将这个16位值的最高位(即第15位)设置为0,然后将这个16位值左移一位。

  5. 如果这个16位值的最高位为1,则需要将其与生成多项式进行异或运算。

  6. 重复步骤4和5,直到左移了16次,此时得到的16位值就是CRC校验码。

下面是一个Python实现的例子:

def spi_crc(data):crc = 0xFFFFpoly = 0x1021for byte in data:crc ^= (byte << 8)for _ in range(8):if crc & 0x8000:crc = (crc << 1) ^ polyelse:crc <<= 1return crc & 0xFFFF

其中,data为要发送的数据,返回值为CRC校验码。

SPI的配置基本上全都看外设的要求是什么,照搬就可以了。 

最后使能一下SPI就可以了

SPI_Cmd(SPI1,ENABLE);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode每日一题】2085. 统计出现过一次的公共字符串(哈希表)

2024-1-12 文章目录 [2085. 统计出现过一次的公共字符串](https://leetcode.cn/problems/count-common-words-with-one-occurrence/)思路&#xff1a;哈希表计算 2085. 统计出现过一次的公共字符串 思路&#xff1a;哈希表计算 1.用两个哈希表分别统计word1和word2中字符出现的…

大模型学习与实践笔记(五)

一、环境配置 1. huggingface 镜像下载 sentence-transformers 开源词向量模型 import os# 设置环境变量 os.environ[HF_ENDPOINT] https://hf-mirror.com# 下载模型 os.system(huggingface-cli download --resume-download sentence-transformers/paraphrase-multilingual-…

【算法】动态中位数(对顶堆)

题目 依次读入一个整数序列&#xff0c;每当已经读入的整数个数为奇数时&#xff0c;输出已读入的整数构成的序列的中位数。 输入格式 第一行输入一个整数 P&#xff0c;代表后面数据集的个数&#xff0c;接下来若干行输入各个数据集。 每个数据集的第一行首先输入一个代表…

使用CentOS搭建高性能静态HTTP服务器

在互联网应用中&#xff0c;静态内容是广泛存在的&#xff0c;例如HTML页面、图片、视频等。为了提供高效、稳定和安全的静态内容服务&#xff0c;我们可以使用CentOS来搭建高性能的静态HTTP服务器。 1. 选择合适的软件 Nginx和Apache是两个流行的HTTP服务器软件。Nginx以其高…

ffmpeg全景视频转普通视角视频的filter开发

环境macos12.6 brew install glfw ffmpeg编译脚本 ./configure --ccclang --prefix$PWD/build --enable-libx264 --enable-filtergenericshader --enable-gpl --enable-opengl --extra-libs-lglfw -ldl --extra-cflags"-I/Users/taio/Downloads/x264-snapshot-2017052…

【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(上)

HashMap工作原理全揭秘 — 核心源码解析 知识盲点概念介绍数据结构数组链表数组VS链表哈希表不同JVM版本HashMap的展现形式 HashMap VS HashTable特性区别对比 hashcodehashCode的作用equals方法和hashcode的关系key为null怎么办执行步骤 核心参数容量探讨负载因子探讨加载因子…

第21集《佛法修学概要》

乙三、修行篇第三分三&#xff1a;丙一、总标五乘要义&#xff1b;丙二、别明五乘解脱法门&#xff1b;丙三、结归一佛乘 请大家打开讲义第五十八页。我们讲到乙三&#xff0c;修行篇第三。 大乘佛法有八万四千个法门&#xff0c;但是我们可以把它归纳成两个重点&#xff1a;…

Wine源码中添加新的DLL模块

Wine源码中添加新的DLL模块 1. 基础环境准备 编译环境&#xff1a;debootstrap 安装 debian bullseye 源码版本&#xff1a;Wine 9.0-rc4 基础环境搭建 2. 创建DLL模块目录 在dlls目录下新建一个文件夹&#xff1a;nfs 将amsi目录下的三个文件全部复制到nfs目录下&#xff…

3-微信小程序组件基本用法

小程序组件是由宿主环境提供的&#xff0c;开发者可以基于组件快速搭建出页面结构。官方把小程序组件分为9类。 视图容器基础内容表单组件导航组件媒体组件map地图组件canvas画布组件开放能力无障碍访问 常用视图组件 view 官网传送门 普通视图区域 类似于HTML中div&#x…

Python基础语法(中)—— python列表、字符串、函数

文章目录 5. python中的列表5.1 列表的初始化5.1.1 直接初始化5.1.2 通过append函数初始化5.1.3 通过for语句初始化列表长度和每个位置的数值 5.2访问列表元素5.3使用循环语句遍历列表5.4列表的切片操作5.5列表的复制5.6列表的运算5.7列表的常用操作5.8嵌套列表5.9列表其他小知…

【计算机二级考试C语言】C基本语法

C 基本语法 我们已经看过 C 程序的基本结构&#xff0c;这将有助于我们理解 C 语言的其他基本的构建块。 C 的令牌&#xff08;Token&#xff09; C 程序由各种令牌组成&#xff0c;令牌可以是关键字、标识符、常量、字符串值&#xff0c;或者是一个符号。例如&#xff0c;下…

基于springboot+vue的网上花卉商城系统(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

Pandas实战100例 | 案例 6: 数据排序 - 对 DataFrame 进行排序

案例 6: 数据排序 - 对 DataFrame 进行排序 知识点讲解 数据排序是数据分析中的一个重要环节&#xff0c;可以帮助我们更好地理解数据的分布和趋势。Pandas 提供了灵活的排序功能&#xff0c;包括按照一列或多列进行升序或降序排序。 示例代码 按单列升序排序 # 按单列升序…

「 网络安全术语解读 」点击劫持Clickjacking详解

引言&#xff1a;要想深入理解点击劫持攻击&#xff0c;我们需要先清楚iframe的用途及优缺点。 1. 关于iframe iframe是HTML语言中的一部分&#xff0c;通常用于在网页中嵌入其他网页的内容&#xff0c;如图像、视频、音频、链接等。它允许在一个网页中插入另一个网页&#xf…

高性能mysql 第三版 读书笔记

MySQL中的tmp_table_size和max_heap_table_size|极客笔记 mysql占用内存过高调优方法_tmp_table_size过大阻塞-CSDN博客 查看mysql分配的内存 mysql查看内存利用状态_mob6454cc6d81c9的技术博客_51CTO博客 https://www.cnblogs.com/stronger-xsw/p/13632505.html

国企石油化工单位任职资格体系搭建案例

传统的任职资格体系主要考虑年限、经验、资历等因素&#xff0c;部分企业在任职资格体系中也引入了能力指标&#xff0c;但是&#xff0c;实际管理过程中仍然存在很多问题&#xff1a;员工“熬年头”意识严重、工作积极性差、优秀人员因得不到晋升而流失、各方面能力都不错的人…

three.js讲解

文章目录 一、概念二、案例三、常见问题四、优缺点五、相关链接 一、概念 three.js是一个基于WebGL的JavaScript库&#xff0c;用于创建和展示三维图形。它提供了一套简单而强大的工具&#xff0c;可以在浏览器中实现高性能的3D渲染。 three.js的主要概念包括以下几个方面&am…

【一文详解】知识分享:(C#开发学习快速入门)

面向对象(OOP) c语言是面向过程。 c是面向过程面向对象。 c#是纯粹的面向对象: 核心思想是以人的思维习惯来分析和解决问题。万物皆对象。 面向对象开发步骤: 分析对象 特征行为关系(对象关系/类关系) 写代码: 特征–>成员变量 方法–>成员方法 实例化–具体对象 …

系统学习Python——警告信息的控制模块warnings:暂时禁止警告

分类目录&#xff1a;《系统学习Python》总目录 如果明知正在使用会引起警告的代码&#xff0c;比如某个废弃函数&#xff0c;但不想看到警告&#xff08;即便警告已经通过命令行作了显式配置&#xff09;&#xff0c;那么可以使用catch_warnings上下文管理器来抑制警告&#x…