细说STM32F407单片机SPI基础知识

目录

一、 SPI接口和通信协议

1、 SPI硬件接口

(1)MOSI(Master Output Slave Input)

(2)MISO(Master Input Slave Output)

(3)SCK

2、SPI传输协议

(1)CPHA=0时的数据传输时序

(2)CPHA=1时的数据传输时序

3、STM32F407的SPI接口

二、SPI的HAL驱动程序

1、SPI寄存器操作的宏函数

2、SPI初始化和阻塞式数据传输

(1)SPI接口初始化

(2)阻塞式数据发送和接收

3、阻塞式同时发送与接收数据 

4、中断方式数据传输

5、 DMA方式数据传输


        串行外设接口(Serial Peripheral Interface,SPI)是一种传输速率比较高的串行接口,一些ADC芯片、Flash存储器芯片采用SPI接口,MCU通过SPI接口与这些外围器件通信。

        以STM32F407ZGT6为例,细说其SPI基础知识。 

一、 SPI接口和通信协议

1、 SPI硬件接口

        SPI接口的设备分为主设备(Master)和从设备(Slave),一个主设备可以连接一个或多个从设备。SPI的主设备可称为主机,从设备也可称为从机。

        SPI接口有3个基本信号,功能描述如下。

(1)MOSI(Master Output Slave Input)

        主设备输出/从设备输入信号,从设备上该信号一般简写为SI。MOSI主设备的串行数据输出,SI是从设备的串行数据输入,主设备和从设备的这两个信号连接。

(2)MISO(Master Input Slave Output)

        主设备输入/从设备输出信号,从设备上该信号一般简写为SO。MISO主设备的串行数据输入,SO是从设备的串行数据输出,主设备和从设备的这两个信号连接。

(3)SCK

        串行时钟信号。时钟信号总是由主设备产生。

        除了这3个必需的信号,从设备还有一个从设备选择信号SS(Slave Select),这个就是从备的片选信号,低电平有效,所以一般写为NSS。当一个SPI通信网络里有多个SPI从设备时主设备通过控制各个从设备的NSS信号来保证同一时刻只有一个SPI从设备在线通言,未被选中的SPI从设备的接口引脚是高阻状态。SPI主设备可以使用普通的GPIO输出引脚接从设备的NSS引脚,控制从设备的片选信号。

2、SPI传输协议

        SPI数据传输是在时钟信号SCK驱动下的串行数据传输,SPI的传输协议定义了SPI通信起始信号、结束信号、数据有效性、时钟同步等环节。SPI每次传输的数据帧长度是8位或16位,一般是最高有效位(Most Significant Bit,MSB)先行。

        SPI通信有4种时序模式,由SPI控制寄存器SPI_CR1中的CPOL位和CPHA位控制。

SPI时序模式

CPOL时钟极性

CPHA时钟相位

空闲时SCK电平

采样时刻

模式0

0

0

低电平

第1跳变沿

模式1

0

1

低电平

第2跳变沿

模式2

1

0

高电平

第1跳变沿

模式3

1

1

高电平

第2跳变沿

  • CPOL(Clock Polarity)时钟极性,控制SCK引脚在空闲状态时的电平。如果CPOL=0,则空闲时SCK为低电平;如果CPOL=1,则空闲时SCK为高电平。
  • CPHA(Clock Phase)时钟相位。如果CPHA=0,则在SCK的第1个边沿对数据采样;如果CPHA=1,则在SCK的第2个边沿对数据采样。

(1)CPHA=0时的数据传输时序

        NSS从高变低是数据传输的起始信号,NSS从低变高是数据传输的结束信号,图中是MSB先行的方式。

​​​​​​​

        CPHA=0表示在SCK的第1个边沿读取数据,读取数据的时刻(捕获选通时刻)就是图中虚线表示的时刻。根据CPOL的取值不同,读取数据的时刻发生在SCK的下跳沿(CPOL=1)时刻或上跳沿(CPOL=0)时刻。MISO、MOSI上的数据是在读取数据的SCK前一个跳变沿时刻发生变化的

(2)CPHA=1时的数据传输时序

        CPHA=1表示在SCK的第2个边沿读取数据,也就是图中的虚线表示的时刻。根据CPOL的取值不同,读取数据的时刻发生在SCK上跳沿(CPOL=1)时刻或下跳沿(CPOL=0)时刻。MISO、MOSI上的数据是在读取数据的SCK前一个跳变沿时刻发生变化的。 

        在使用SPI接口通信时,主设备和从设备的SPI时序一定要一致,否则无法正常通信。由CPOL和CPHA的不同组合构成了4种SPI时序模式,如果使用硬件SPI接口,只需设置正确的SPI时序模式,底层的通信时序由SPI硬件处理。有时候需要用普通GPIO引脚模拟SPI接口,这称为软件模拟SPI接口。软件模拟SPI接口需要控制GPIO引脚的输入和输出来模拟SPI的通信时序。

3、STM32F407的SPI接口

        STM32F407ZGT6芯片上有3个硬件SPI接口,其中SPI2和SPI3还可工作于I2S模式。

  • 数据帧长度可选择8位或16位。
  • 可设置为主模式或从模式。
  • 可设置8种预分频器值用于产生通信波特率,波特率最高为f_{PCLK}^{}/2,其中f_{PCLK}^{}是SPI所在APB总线的频率。SPI1在APB2总线上,SPI2和SPI3在APB1总线上。
  • 可设置时钟极性(CPOL)和时钟相位(CPHA),也就是4种SPI时序模式都支持。
  • 可设置MSB先行或LSB先行。
  • 可以使用硬件CRC校验。
  • 可触发中断的主模式故障、上溢和CRC错误标志。
  • 发送和接收具有独立的DMA请求,DMA传输具有1字节发送和接收缓冲区。MCU的SPI接口实现了SPI硬件层通信协议,也就是保证数据帧的正确接收和发送,如同UART接口实现底层数据帧的收发一样。SPI主设备和从设备之间具体的通信内容则需要两者之间规定通信协议,如同串口设备之间的通信协议一样。

二、SPI的HAL驱动程序

1、SPI寄存器操作的宏函数

        SPI的驱动程序头文件是stm32f4xx_hal_spi.h。SPI寄存器操作的宏函数如表所示。宏函数中的参数__HANDLE__是具体某个SPI接口的对象指针,参数__INTERRUPT__是SPI的中断事件类型,参数__FLAG__是事件中断标志。

宏函数

功能描述

__HAL_SPI_DISABLE(__HANDLE__)

禁用某个SPI接口

__HAL_SPI_ENABLE(__HANDLE__)

启用某个SPI接口

__HAL_SPI_DISABLE_IT(__HANDLE__,__INTERRUPT__)

禁止某个中断事件源,不允许事件产生硬件中断

__HAL_SPI_ENABLE_IT(__HANDLE__,__INTERRUPT__)

开启某个中断事件源,允许事件产生硬件中断

__HAL_SPI_GET_IT_SOURCE(__HANDLE__,__INTERRUPT__)

检查某个中断事件源是否被允许产生硬件中断

__HAL_SPI_GET_FLAG(__HANDLE__,__FLAG__)

获取某个事件的中断标志,检查事件是否发生

__HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__)

清除CRC校验错误中断标志

__HAL_SPI_CLEAR_FREFLAG(__HANDLE__)

清除TI帧格式错误中断标志

__HAL_SPI_CLEAR_MODFFLAG(__HANDLE__)

清除主模式故障中断标志

__HAL_SPI_CLEAR_OVRFLAG(__HANDLE__)

清除溢出错误中断标志

        STM32 CubeIDE自动生成的文件spi.c会定义表示具体SPI接口的外设对象变量。例如,使用SPI1时,会定义如下的外设对象变量hspi1,宏函数中的参数__HANDLE__就可以使用&hspi1。 

SPI_HandleTypeDef hspil;	//表示SPI1的外设对象变量

        一个SPI接口只有1个中断号,有6个中断事件,但是只有3个中断使能控制位。SPI状态寄存器SPI_SR中有6个事件的中断标志位,SPI控制寄存器SPI_CR2中有3个中断事件使能控制位,其中1个错误事件中断使能控制位ERRIE控制了4种错误中断事件的使能。SPI的中断事件和宏定义如表。这是比较特殊的一种情况,对于一般的外设,1个中断事件就有1个使能控制位和1个中断标志位。

        在SPI的HAL驱动程序中,定义了6个表示事件中断标志位的宏,可作为宏函数中参数__FLAG__的取值;定义了3个表示中断事件类型的宏,可作为宏函数中参数__INTERRUPT__的取值。

中断事件

SPI状态寄存器
SPI_SR中的中
断标志位

表示事件中断
标志位的宏

SPI控制寄存器
SPI_CR2中的中断
事件使能控制位

表示中断事件使
能位的宏(用于表
示中断事件类型)

发送缓冲区为空

TXE

SPI_FLAG_TXE

TXEIE

SPI_IT_TXE

接收缓冲区非空

RXNE

SPI_FLAG_RXNE

EXNEIE

SPI_IT_RXNE

主模式故障

MODF

SPI_FLAG_MODF

ERRIE

SPI_IT_ERR

溢出错误

OVR

SPI_FLAG_OVR

CRC校验错误

CRCERR

SPI_FLAG_CRCERR

TI帧格式错误

FRE

SPI_FLAG_FRE

2、SPI初始化和阻塞式数据传输

        SPI接口初始化、状态查询和阻塞式数据传输的函数。

函数名

功能描述

HAL_SPI_Init()

SPI初始化,配置SPI接口参数

HAL_SPI_MspInit()

SPI的MSP初始化函数,重新实现时一般用于SPI接口引脚GPIO
初始化和中断设置

HAL_SPI_GetState()

返回SPI接口当前状态,返回值是枚举类型HAL_SPI_StateTypeDef

HAL_SPI_GetError()

返回SPI接口最后的错误码,错误码有一组宏定义

HAL_SPI_Transmit()

塞式发送一个缓冲区的数据

HAL_SPI_Receive()

阻塞式接收指定长度的数据保存到缓冲区

HAL_SPI_TransmitReceive()

阻塞式同时发送和接收一定长度的数据

(1)SPI接口初始化

        函数HAL_SPI_Init()用于具体某个SPI接口的初始化,其原型定义如下:

HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi)

        其中,参数hspi是SPI外设对象指针。hspi->Init是SPIInitTypeDef结构体类型,存储了SPI接口的通信参数。这两个结构体主要成员变量的意义在示例里结合代码具体解释。

(2)阻塞式数据发送和接收

        SPI是一种主/从通信方式,通信完全由SPI主机控制,因为SPI主机控制了时钟信号SCK。SPI主机和从机之间一般是应答式通信,主机先用函数HAL_SPI_Transmit()在MOSI线上发送指令或数据,忽略MISO线上传入的数据;从机接收指令或数据后会返回响应数据,主机通过函数HAL_SPI_Receive()在MISO线上接收响应数据,接收时不会在MOSI线上发送有效数据。函数HAL_SPI_Transmit()用于发送数据,其原型定义如下:

HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi,uint8_t *pData,uint16_t Size,uint32_t Timeout);

        其中,参数hspi是SPI外设对象指针;pData是输出数据缓冲区指针;Size是缓冲区数据的字节数;Timeout是超时等待时间,单位是系统嘀嗒信号节拍数,默认情况下就是ms。

        函数HAL_SPI_Transmit()是阻塞式执行的,也就直到数据发送完成或超过等待时间后才返回。函数返回HAL_OK表示发送成功,返回HAL_TIMEOUT表示发送超时。

        函数HAL_SPI_Receive()用于从SPI接口接收数据,其原型定义如下:

HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi,uint8_t *pData,uint16_t Size,uint32_t Timeout);

        其中,参数pData是接收数据缓冲区,Size是要接收的数据字节数,Timeout是超时等待时间。

3、阻塞式同时发送与接收数据 

        虽然SPI通信一般采用应答式,MISO和MOSI两根线不同时传输有效数据,但是在原理上,它们是可以在SCK时钟信号作用下同时传输有效数据的。函数HAL_SPI_TransmitReceive()就实现了接收和发送同时操作的功能,其原型定义如下:

HALStatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi,uint8_t *pTxData,uint8_t *pRxData,uint16_t Size,uint32_t Timeout)

        其中,pTxData是发送数据缓冲区,pRxData是接收数据缓冲区,Size是数据字节数,Timeout是超时等待时间。这种情况下,发送和接收到的数据字节数是相同的。

4、中断方式数据传输

        SPI接口能以中断方式传输数据,是非阻塞式数据传输。中断方式数据传输的相关函数、产生的中断事件类型、对应的回调函数等如表所示。中断事件类型用中断事件使能控制位的宏定义表示。

函数名

函数功能

产生的中断
事件类型

对应的回调函数

HAL_SPI_Transmit_IT()

中断方式发送一个缓冲区的数据

SPI_IT_TXE

HAL_SPI_TxCpltCallback()

HAL_SPI_Receive_IT()

中断方式接收指定长度的数据保存到缓冲区

SPI_IT_RXNE

HAL_SPI_RxCpltCallback()

HAL_SPI_TransmitReceive_IT()

中断方式发送和接收一定长度的数据

SPI_IT_TXE和
SPI_IT_RXNE

HAL_SPI_TxRxCpltCallback()

前3个中断方式传输函数

前3个中断模式传输函数都可能产生SPI_IT_ERR中断事件

SPI_IT_ERR

HAL_SPI_ErrorCallback()

HAL_SPI_IRQHandler()

SPI中断ISR里调用的通用处理函数

——

——

HAL_SPI_Abort()

取消非阻塞式数据传输,本函数以阻塞模式运行

——

——

HAL_SPI_Abort_IT()

取消非阻塞式数据传输,本函数以中断模式运行

——

HAL_SPI_AbortCpltCallback()

        函数HAL_SPI_Transmit_IT()用于发送一个缓冲区的数据,发送完成后,会产生发送完成中断事件(SPI_IT_TXE),对应的回调函数是HAL_SPI_TxCpltCallback()。

        函数HAL_SPI_Receive_IT()用于接收指定长度的数据保存到缓冲区,接收完成后,会产生接收完成中断事件(SPI_IT_RXNE),对应的回调函数是HAL_SPI_RxCpltCallback()。

        函数HAL_SPI_TransmitReceive_IT()是发送和接收同时进行,由它启动的数据传输会产生SPI_IT_TXE和SPI_IT_RXNE中断事件,但是有专门的回调函数HAL_SPI_TxRxCpltCallback()。

        上述3个函数的原型定义如下:

HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi,uint8_t *pData,uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi,uint8_t *pData,uint16_t Size);
HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi,uint8_t *pTxData,uint8_t *pRxData,uint16_t Size);

        这3个函数都是非阻塞式的,函数返回HAL_OK只是表示函数操作成功,并不表示数据传输完成,只有相应的回调函数被调用才表明数据传输完成。

        函数HAL_SPI_IRQHandler()是SPI中断ISR里调用的通用处理函数,它会根据中断事件类型调用相应的回调函数。在SPI的HAL驱动程序中,回调函数是用SPI外设对象变量的函数指针重定向的,在启动传输的函数里,为回调函数指针赋值,用户使用时只需知道表中的对应关系即可。

        函数HAL_SPI_Abort()用于取消非阻塞式数据传输过程,包括中断方式和DMA方式,这个函数自身以阻塞模式运行。

        函数HAL_SPI_Abort_IT()用于取消非阻塞式数据传输过程,包括中断方式和DMA方式,这个函数自身以中断模式运行,所以有回调函数HAL_SPI_AbortCpltCallback()。

5、 DMA方式数据传输

        SPI的发送和接收有各自的DMA请求,能以DMA方式进行数据发送和接收。DMA方式传输时触发DMA流的中断事件,主要是DMA传输完成中断事件。SPI的DMA方式数据传输的相关函数如表所示。

DMA方式功能函数

函数功能

DMA流中断事件

 对应的回调函数

HAL_SPI_Transmit_DMA()

DMA方式发送数据

DMA传输完成

HAL_SPI_TxCpltCallback()

DMA传输半完成

HAL_SPI_TxHalfCpltCallback()

HAL_SPI_Receive_DMA()

DMA方式接收数据

DMA传输完成

HAI_SPI_RxCpltCallback()

DMA传输半完成

HAL_SPI_RxHalfCpltCallback()

HAL_SPI_TransmitReceive_DMA()

DMA方式发送/接收数据

DMA传输完成

HAL_SPI_TxRxCpltCallback()

DMA传输半完成

HAL_SPI_ TxRxHalfCpltCallback()

前3个DMA方式传输函数

DMA传输错误中断事件

DMA传输错误

HAL_SPI_ErrorCallback()

HAL_SPI_DMAPause()

暂停DMA传输

——

——

HAL_SPI_DMAResume()

继续DMA传输

——

——

HAL_SPI_DMAStop()

DMA传输

——

——

        启动DMA方式发送和接收数据的两个函数的原型分别定义如下:

HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi,uint8_t *pData,uint16_t Size);
HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi,uint8_t *pData,uint16_t Size);

        其中,hspi是SPI外设对象指针,pData是用于DMA数据发送或接收的数据缓冲区指针,Size是缓冲区的大小。因为SPI接口传输的基本数据单位是字节,所以缓冲区元素类型是uint8_t,缓冲区大小的单位是字节。另一个同时接收和发送数据的函数的原型定义如下:

HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi,uint8_t *pTxData,uint8_t *pRxData,uint16_t Size);

        其中,pTxData是发送数据的缓冲区指针,pRxData是接收数据的缓冲区指针,两个缓冲区大小相同,长度都是Size。

        DMA传输是非阻塞式传输,函数返回HAL_OK只表示操作成功,需要触发相应的回调函数才表示数据传输完成。另外,还有3个控制DMA传输过程暂停、继续、停止的函数,其原型定义如下:

HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi);
HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi);

        其中,参数hspi是SPI外设对象指针。这3个函数都是阻塞式运行的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【图像处理】利用numpy、opencv、python实现车牌检测

| 利用opencv实现车牌检测 整体流程涉及5个部分 图像通道转换对比度增强边缘连接二值化边界区域裁剪 图像通道转换 将RGB图像转换为HSV图像,仅保留V通道。V通道表示颜色的明暗,常用于图像对比度拉伸、直方图均衡化等流程。 原图像: V通…

结构变量的占用多少个字节

1、在linux中,这种写法比较清晰 struct gpio_led_data { u8 can_sleep; //如果定义了结构变量,则该成员占用1个字节 u8 blinking; //如果定义了结构变量,则该成员占用1个字节 }; struct gpio_leds_priv { int num_leds; //如…

[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners

本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);作者来自高校、微软研究院和 Goo…

uni-app Android平台上架要求的隐私政策提示配置方法【跨端开发系列】

文章目录 前言📖一、前言二、DCloud 数据采集说明三、配置方式3.1 HBuilderX3.2.1及以上版本配置方式3.2 HBuilderX3.2.0及以下版本配置方法3.3 模板提示框3.4 无提示框 四、离线打包配置方式五、模板提示框六、二次确认提示框七、国际化八、隐私协议内容需要注意的…

Xcode

info.plist Appearance Light 关闭黑暗模式 Bundle display name 设置app名称,默认为工程名 Location When In Use Usage Description 定位权限一共有3个key 1.Privacy - Location When In Use Usage Description 2.Privacy - Location Always and When In U…

auto-gptq安装以及不适配软硬件环境可能出现的问题及解决方式

目录 1、auto-gptq是什么?2、auto-gptq安装3、auto-gptq不正确安装可能会出现的问题(1)爆出:CUDA extension not installed.(2)没有报错但是推理速度超级慢 1、auto-gptq是什么? Auto-GPTQ 是一…

惠普Laser Jet MFP M437nda复印机成像装置严重不足及更换传输卷故障解决方法

惠普Laser Jet MFP M437nda复印机成像装置严重不足及更换传输卷故障解决方法,记录维修那点事儿,普通维修工的日常维修点滴; 惠普Laser Jet MFP M437nda复印机成像装置严重不足维修方法 如果复印及打印的效果没有问题的情况下我们也可以不更换套鼓及显影剂,那么不更换套鼓及…

【2025最新版】Stable diffusion汉化版安装教程(附SD安装包),一键激活,永久免费!

如何安装并学习使用Stable Diffusion呢? 其实,安装SD的过程并不复杂,只需按照简单的步骤操作,几分钟内就能完成安装,不论是Windows系统还是Mac系统,都能轻松应对。

【Python网络爬虫笔记】11- Xpath精准定位元素

目录 一、Xpath 在 Python 网络爬虫中的作用(一)精准定位元素(二)应对动态网页(三)数据结构化提取 二、Xpath 的常用方法(一)节点选取(二)谓词筛选&#xff0…

RabbitMQ个人理解与基本使用

目录 一. 作用: 二. RabbitMQ的5中队列模式: 1. 简单模式 2. Work模式 3. 发布/订阅模式 4. 路由模式 5. 主题模式 三. 消息持久化: 消息过期时间 ACK应答 四. 同步接收和异步接收: 应用场景 五. 基本使用 &#xff…

网络工程师常用软件之配置对比软件

老王说网络:网络资源共享汇总 https://docs.qq.com/sheet/DWXZiSGxiaVhxYU1F ☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝ 我们经常在项目或者运维中对设备的config进行变更&am…

嵌入式驱动开发详解15(电容触摸屏gt9147)

文章目录 前言电容触摸屏特点MT触摸消息电容触摸屏协议电容屏触摸时序Type A 触摸点信息上报时序Type B 触摸点信息上报时序 多点触摸所使用到的API函数 驱动部分驱动框图设备树节点修改设备树引脚配置设备节点配置 具体驱动开发I2C驱动框架I2C框架内部实现 参考文献 前言 随着…

antdv-<a-button>中属性的使用

UI组件库(User Interface Component Library)是一种预先构建好的、可重用的用户界面元素集合,旨在帮助开发者更快速、更简便地构建用户界面。这些组件通常包括按钮、表单、导航栏、模态框等,能够提供一致的外观和交互风格&#xf…

win服务器的架设、windows server 2012 R2 系统的下载与安装使用

文章目录 windows server 2012 R2 系统的下载与安装使用1 windows server 2012 的下载2 打开 VMware 虚拟机软件(1)新建虚拟机(2)设置虚拟机(3)打开虚拟机 windows server 2012(4)进…

【ArcGIS微课1000例】0135:自动生成标识码(长度不变,前面自动加0)

文章目录 一、加载实验数据二、BSM计算方法一、加载实验数据 加载专栏《ArcGIS微课实验1000例(附数据)》配套数据中0135.rar中的建筑物数据,如下图所示: 打开属性表,BSM为数据库中要求的字段:以TD_T 1066-2021《不动产登记数据库标准》为例: 计算出来的BSM如下图: 二、B…

康谋方案 | 多源相机数据采集与算法集成测试方案

目录 一、相机组成 二、多源相机采集与测试方案 三、应用案例分享 四、结语 在智能化技术快速发展当下,图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进…

陪玩系统小程序源码/游戏陪玩APP系统用户端有哪些功能?游戏陪玩小程序APP源码开发

多客陪玩系统-游戏陪玩线下预约上门服务等陪玩圈子陪玩社区系统源码 陪玩系统源码,高质量的陪玩系统源码,游戏陪玩APP源码开发,语音陪玩源码搭建: 线上陪玩活动组局与线下家政服务系统的部署需要综合考虑技术选型、开发流程、部署流程、功能实…

运维实战:K8s 上的 Doris 高可用集群最佳实践

今天我们将深入探讨::如何在 K8s 集群上部署 Compute storage coupled(存算耦合) 模式的 Doris 高可用集群? 本文,我将为您提供一份全面的实战指南,逐步引导您完成以下关键任务: 配…

从零用java实现 小红书 springboot vue uniapp (2)主页优化

前言 移动端演示 http://8.146.211.120:8081/#/ 前面的文章我们基本完成了主页的布局 今天我们具体的去进行实现 并且分享我开发时遇到的问题 首先先看效果 java仿小红书主页 实现效果为 1.顶端全屏切换 2.上划加载更多 3.下拉当前页整体刷新 顶端全屏切换我们选择 gui-switch…

动手学深度学习-线性神经网络-7softmax回归的简洁实现

目录 初始化模型参数 重新审视Softmax的实现 优化算法 训练 小结 在 线性回归的实现中, 我们发现通过深度学习框架的高级API能够使实现 线性回归变得更加容易。 同样,通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在上一节…