搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
酷酷是懒虫
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
AD9361使用概述_ad9361调试说明
2
软件测试基础1--功能测试
3
Python代码注释详解(0基础入门_python注释
4
python抓取网页图片显示不出来_python抓取网页图片
5
AI绘画之SD_sd跑图没办法调用gpu
6
GO -操作mysql
7
钉钉 基于vue开发h5微应用,免登录获取用户信息_vuejs dd.runtime.permission获取到code然后获取用户信息
8
redis执行lua脚本_redis script lua怎么监控连接
9
开源大语言模型完整列表_flowise+
10
PS CS6视频剪辑基本技巧(三)添加声音和字幕_ps如何给视频加字幕
当前位置:
article
> 正文
STM32 spi与FPGA的通信_stm32与fpga的spi通讯
作者:酷酷是懒虫 | 2024-07-30 23:50:13
赞
踩
stm32与fpga的spi通讯
STM32 spi总线通信
最近在研究SPI总线,至于协议和硬件描述就不多说了
四线包括时钟、片选、接收、发送
初始化SP
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主模式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //16bit宽度
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_2; //2--18MHz; 4--9MHz; 8--4.5MHz
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //高位在前
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPIx, &SPI_InitStructure);
SPI_Cmd(SPIx, ENABLE);
SPI不能硬件控制CS,只能软件来控,就是通过将NSS设为外部GPIO来控制。
像我所做的项目是使用STM32与FPGA通信,而FPGA的SPI工作在这种一直状态
作为主设备的STM32,CS在传输数据的时候为低,传输完毕后必须拉高,这样FPGA可以判断出SPI的传输起止状态。
FPGA的数据传输格式是16bit地址+16bit数据
对于读16bit,实现如下
uint16_t spi_read(SPI_TypeDef* SPIx,uint32_t addr)
{
uint16_t value;
uint16_t spi_nss;
uint16_t add;
uint32_t level;
if(SPI1 == SPIx)
spi_nss = SPI1_PIN_NSS;
else if(SPI2 == SPIx)
spi_nss = SPI2_PIN_NSS;
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
GPIO_ResetBits(GPIOA, spi_nss);
SPI_I2S_SendData(SPIx, addr); //0xf014 >> 2
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPIx, 0x0);
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(SPIx);
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
GPIO_SetBits(GPIOA, spi_nss);
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
value = SPI_I2S_ReceiveData(SPIx);
return value;
}
写函数
void spi_write(SPI_TypeDef* SPIx,uint32_t addr, uint16_t value)
{
uint16_t spi_nss;
uint32_t level;
if(SPI1 == SPIx)
spi_nss = SPI1_PIN_NSS;
else if(SPI2 == SPIx)
spi_nss = SPI2_PIN_NSS;
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
GPIO_ResetBits(GPIOA, spi_nss);
SPI_I2S_SendData(SPIx, addr);
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPIx, value);
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(SPIx);
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
GPIO_SetBits(GPIOA, spi_nss);
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(SPIx);
}
拿write函数举例
只所以这么设计是因为
如果是函数一开始就将NSS脚拉低,然后再去send,如下
GPIO_ResetBits(GPIOA, spi_nss);
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPIx, addr);
这样在CS拉低一段时间后(时间大概有16个时钟周期),才有CLK,这样延时就会降低SPI的传输效率
之前那种方式会在CS拉底后很快就有clk时钟出来
之所以写两次再读两次而不是读一次写一次也是考虑到效率的问题
如果先写一次再读一次,看波形每个数据之间有比较大的空隙是没有clk的,就是说在传输完一个数据后再
传第二个会要等一段时间,这个对速度要求比较高的设备是不允许的
还有值得注意的是:
如果SPI是主模式,那么GPIO设置为
NSS是GPIO_Mode_Out_PP
CLK是GPIO_Mode_AF_PP
MOSI是GPIO_Mode_AF_PP
MISO是GPIO_Mode_IN_FLOATING
如果SPI是从模式,那么GPIO设置为
NSS是GPIO_Mode_Out_PP
CLK是GPIO_Mode_IN_FLOATING
MOSI是GPIO_Mode_IN_FLOATING
MISO是GPIO_Mode_AF_PP
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/905894
推荐阅读
article
手把手
教
你纯PL
配置
ad9361
/
ad936x
_
ad936x
fpga
...
因为ADI官方,只提供了利用软件(SDK)和硬件平台(vivado)去
配置
AD936x,但是在一些工程中,这种方法很难去...
赞
踩
article
STM32
——
串口
(
UART
)使用_
stm32
uart
...
节主要学习了
STM32
串口
的相关知识,包括有:基本的通信方式,
串口
通信的基本概念,相关寄存器的设置,以及如何利用HAL进...
赞
踩
article
FPGA
-
SRAM
读写测试_
fpga
sram
读写...
之前一直没太搞懂这个
SRAM
是用来做什么的,现在做完了vga的觉得这个
SRAM
的作用很大,说白了这就是个储存器,而在我...
赞
踩
article
FPGA
-学习片外
S
RAM
读写测试包括
RAM
ROM
FIFO
对比 总结与实战_
sram
测试...
学习内容
RAM
、
ROM
、
FIFO
等概念对比,
S
RAM
读写测试。实现功能一个8位数字从0000000开始,每一秒自加1,并...
赞
踩
article
STM32
-
基本知识
梳理9-
FSMC
控制
外部
SRAM
_
stm32
驱动spi
sram
...
SRAM
比较小,没有列地址线,它的数据宽度为16位,即一个行地址对应2字节空间,框图中左侧的A0-A18是行址信号,18...
赞
踩
article
STM32
FSMC
学习记录-
SRAM
_
fsmc
引脚
时钟
输出...
FSMC
学习记录_
fsmc
引脚
时钟
输出
fsmc
引脚
时钟
输出 目录
FSMC
...
赞
踩
article
stm32
ADC
采集
音频信号_
stm32
f103
采集
声音...
利用AD模块
采集
音频信号后,绘制其波形_
stm32
f103
采集
声音
stm32
f103
采集
声音 ...
赞
踩
article
FPGA
JTAG最小系统
EP2C5T144C8N
...
FPGA
的文档没有相应的基础还真不容易看懂,下面是B站上对
FPGA
文档的解读(本文非对文档解读,只是为个人记录核心电源(...
赞
踩
article
【零基础轻松学习
FPGA
】
小梅哥
Xilinx
FPGA
基础入门到项目应用培训
教程
_
小梅哥
fpga
...
写一套硬件描述语言,能够在指定的硬件平台上实践相应的功能。设计定义(让LED一秒闪烁一次)设计输入(编写逻辑(使用Ver...
赞
踩
article
大数据最全【
Verilog
HDL
】
FPGA
-
testbench
基础知识
(1)_fpgatestbe...
define 标识符 字符串 //注意句末无分号对于上述led闪烁模块,需要产生一个时钟信号给它,为了方便进行全文的修改...
赞
踩
article
视觉
巡线
小车
(
STM32
+
OpenMV
)——总结_
stm32
和openmv循迹
小车
...
基于前面的系列文章,已基本介绍完了基于
STM32
+
OpenMV
的视觉
巡线
小车
,本文将以小编自己的
小车
对其进行一下总结。如...
赞
踩
article
【
DIY
STM32
离线
下载
器(仅
SWD
下载
模式)】
_
stm32
离线
下载
...
DIY
STM32
离线
下载
器(仅
SWD
下载
模式)
_
stm32
离线
下载
stm32
离线
下载
...
赞
踩
article
stm32
stlink
驱动_【C++开发
Stm32
环境搭建】
Stm32
f103c8t6
支持Ard...
这篇教程介绍了如何使用C++开发STM32F103C8T6单片机,借助
Arduino
库简化开发。内容包括硬件准备、软件安...
赞
踩
article
STM32
STM8
GD32
脱机
烧录器
,_
gd32
脱机
下载程序...
stm32 SWD模式
脱机
烧录器
,有需要的看看https://download.csdn.net/download/li...
赞
踩
article
stm32
下载方式
之串口ISP\
swd
_
esp
isp
swd
stm32
dap
...
作者:stm_小强企鹅:759040024说明:库文件版本:3.5.0_
esp
isp
swd
stm32
dap
esp
...
赞
踩
article
STM32
DAP
仿真
器下载程序_
stm32
仿真
下载器...
DAP
仿真
器的配置与使用_
stm32
仿真
下载器
stm32
仿真
下载器 DAP
仿真
器配置...
赞
踩
article
【
STM32
-
DAP
仿真器
】_
dap
仿真器
...
DAP
仿真器
可以分为有线和无线两种速度可以分为普速和高速两种结合这两个分类特点, 总共推出了三种对应的
DAP
仿真器
...
赞
踩
article
【
STM32
】
Keil
MDK 中的
Code
、
RO
-
dat
a
、
RW-
dat
、
ZI-
dat
a
是什么...
可读写数据区域,一定是未初始化或初始化为“0值”的可读写数据,应用程序同样可以修改其内容,这些数据被存储在。即可读写数据...
赞
踩
article
STM32
与
FPGA
通信 使用
FSMC
接口_
stm32
fmc
fpga
...
STM32
使用
FSMC
接口与
FPGA
建立通信_
stm32
fmc
fpga
stm32
fmc
fpga
...
赞
踩
article
FPGA
(主)与
STM32
(从)
SPI
通信
_
stm32
和
fpga
通信
...
一、概述 主要实现了
FPGA
向
STM32
快速发送数据(比较稳定),至于
STM32
发送过来的数据,大概率还是处于丢位状态。...
赞
踩
相关标签
fpga开发
嵌入式硬件
硬件工程
单片机
stm32
fpga
嵌入式
verilog
sram
学习
音频
大数据
OpenMV
视觉巡线
小车
电赛