STM32_SPI多机通信的实现——整理自网络

2024-05-05 07:32

本文主要是介绍STM32_SPI多机通信的实现——整理自网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用DMA的SPI双机通信中几个很容易出错的点:

1)分频值:SPI的频率最高为18M,SPI1是在频率为72M的APB2上,而SPI2是在频率为36M的APB1上。如果芯片时钟频率为72M,那么SPI1的分频值为4,SPI2的分频值为2.

2)开DMA顺序:我在网上看到有人说要先开从机发送、再开主机发送、再开从机接收、最后开主机接收。我不知道为什么要这么开,而且这种开DMA方式是很难实现的,你可能要再加两根握手线判断对方到底开好DMA没有。我的程序“从机接收-从机发送-主机接收-主机发送”的顺序一样可行。
3)DMA中断:当数据发送到最后一个字节的第一位时,如果你开了DMA发送中断,就会进入DMA发送中断函数,这时候不能马上清楚标志位。必须要查询ISR寄存器判断剩下的7位数据是否也传输完毕,然后就是判断SR寄存器是否在忙。都完成以后才可清楚标志位、重新配置DMA数据长度,否则你后面的数据会出错。
4)上拉电阻:不加上拉偶尔会出错,这个出错并不是仿真能看出来的,我仿真每次都对,但是拔掉仿真器不停测试就发现数据出错了,5次重启能有1次错误。加了后数据异常稳定。不明白为何网上资料全没加上拉。
5)重设缓冲区地址:由于项目需要一个长度可变的缓冲区,所以我多次用了malloc和free进行分配缓冲区大小,这样就造成了缓冲区地址的不停改变,所以必须要失能DMA,然后重新配置DMA的缓冲区地址。
6)不用中断的主机发送过程:我看到网上的资料是主机使能DMA后,死等在那查询DMA是否传输完毕,这样就发挥不出DMA的作用了。SPI的频率是18M,而DMA据说大概是10M左右,如果用死等的方式,反而不如不用DMA。

所以,如果主机不用DMA中断的方式,那么可以写两个函数,一个是使能DMA,一个是判断DMA有没有传输完成。在这两个函数之间CPU就可以自己做自己的事情去了,反正主机有主动权。



多从机建议加243一类的三态驱动芯片,spi速度可以很快,并且稳定。如果允许的话,更好的办法是每个从机都加一个和主机隔离开,这样即使某个从机有问题也不会影响总线。

这篇关于STM32_SPI多机通信的实现——整理自网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961132

相关文章

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

基于Python和Tkinter实现高考倒计时功能

《基于Python和Tkinter实现高考倒计时功能》随着高考的临近,每个考生都在紧锣密鼓地复习,这时候,一款实用的倒计时软件能有效帮助你规划剩余时间,提醒你不要浪费每一分每一秒,今天,我们来聊聊一款... 目录一、软件概述:二、功能亮点:1. 高考倒计时2. 添加目标倒计时3. 励志语句4. 透明度调节与

Python实现PDF与多种图片格式之间互转(PNG, JPG, BMP, EMF, SVG)

《Python实现PDF与多种图片格式之间互转(PNG,JPG,BMP,EMF,SVG)》PDF和图片是我们日常生活和工作中常用的文件格式,有时候,我们可能需要将PDF和图片进行格式互转来满足... 目录一、介绍二、安装python库三、Python实现多种图片格式转PDF1、单张图片转换为PDF2、多张图

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

Java实现MD5加密的四种方式

《Java实现MD5加密的四种方式》MD5是一种广泛使用的哈希算法,其输出结果是一个128位的二进制数,通常以32位十六进制数的形式表示,MD5的底层实现涉及多个复杂的步骤和算法,本文给大家介绍了Ja... 目录MD5介绍Java 中实现 MD5 加密方式方法一:使用 MessageDigest方法二:使用

mysql删除无用用户的方法实现

《mysql删除无用用户的方法实现》本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 1、删除不用的账户(1) 查看当前已存在账户mysql> select user,host,pa

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line