0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

stm32 HAL库spi接收的同时为什么有数据发送出去?

工程师邓生 ? 来源:未知 ? 作者:刘芹 ? 2023-10-26 17:42 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

stm32 HAL库spi接收的同时为什么有数据发送出去?

在STM32 HAL库中,SPI接口的数据收发是通过DMA传输完成的。因此,通过SPI接收数据时,同时也会有数据发送出去。

首先,让我们回顾一下SPI接口的基本工作原理。 SPI(Serial Peripheral Interface)是一种同步的全双工接口,它在主设备和从设备之间建立一条点对点的通信链路。主设备控制时序,包括时钟SCK、选中信号NSS、数据输出MOSI和数据输入MISO,从而控制从设备的数据收发。

在STM32中,SPI接口可以通过中断或DMA方式进行收发数据。通过DMA方式收发数据时,需要先配置好SPI接口相应的DMA通道和缓冲区。然后在主程序中,通过HAL库提供的接口启动SPI的DMA传输。

在DMA传输过程中,STM32的DMA控制器会控制数据的缓冲区传输,而SPI的主设备则会按照时序控制数据的传输。当SPI发送数据时,DMA控制器会将数据从缓冲区写入SPI发送寄存器,然后由SPI主设备将数据发送出去。当SPI接收数据时,DMA控制器会将数据从SPI接收寄存器读取,然后写入到缓冲区中。

因此,在SPI接收数据的同时,也会有数据发送出去。这是因为DMA传输的特性,DMA控制器会自动工作,不需要CPU的干预。而SPI的发送和接收操作都是在时序控制下进行的,因此它们的操作是同时进行的。

当SPI接收时,如果没有足够的数据需要发送,主设备会发送填充数据(通常是全0或全1),以保持时序的稳定。因此,接收和发送的数据不一定完全匹配。

需要注意的是,当使用SPI接口进行收发数据时,为了避免数据的重叠和错位,需要严格按照SPI接口的时序和DMA传输的要求配置相关的寄存器和缓冲区。

在STM32 HAL库中,可以使用HAL_SPI_TransmitReceive_DMA()函数进行SPI数据的收发。这个函数会自动启动SPI的DMA传输,并在数据传输完成后触发相应的回调函数。在回调函数中,可以对接收到的数据进行处理。

综上所述,SPI接收数据同时有数据发送出去的原因是因为使用了DMA方式进行数据传输。在掌握SPI接口的时序和DMA传输的要求后,可以通过HAL库提供的接口方便地实现SPI数据的收发操作。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2296

    文章

    11038

    浏览量

    366657
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1809

    浏览量

    96704
  • HAL库
    +关注

    关注

    1

    文章

    121

    浏览量

    7054
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SPI+DMA一直发会进入HAL_BUSY无法跳出是怎么回事?

    在while中一直使用HAL_SPI_TransmitReceive_DMA发送接收数据,循环几次后就会一直为HAL_BUSY状态,查看
    发表于 07-18 06:38

    cyw20719B2 SPI接口slave模式下,在执行wiced_hal_pspi_slave_rx_data()函数的同时SPI的FIFO还能正确接收数据吗?

    请问,cyw20719B2 SPI接口slave模式下,在执行wiced_hal_pspi_slave_rx_data()函数的同时SPI的FIFO还能正确
    发表于 07-08 07:39

    基于STM32 HAL与标准的esp8266接入机智云方案(二)

    在《基于STM32HAL与标准的esp8266接入机智云方案(一)》中,我们详细介绍了硬件连接和机智云客户端的创建。本篇将重点讲解如何下载代码、分析下载的代码,并直接使用这些代码连接机智云。
    的头像 发表于 05-28 18:02 ?630次阅读
    基于<b class='flag-5'>STM32</b> <b class='flag-5'>HAL</b><b class='flag-5'>库</b>与标准<b class='flag-5'>库</b>的esp8266接入机智云方案(二)

    DMA缓冲区设置为48K,如果没有写满48K,数据会自动被发送出去吗?

    请问我的DMA缓冲区设置为48K,如果没有写满48K,数据会自动被发送出去吗。2.有没有清空DMA缓冲区的函数,我直接调用CyU3PUsbFlushEp()不起作用。
    发表于 05-09 06:21

    请问K230D怎么将摄像头采集的视频数据通过串口输出?

    我连了个WiFi模块,想要将摄像头采集的视频数据通过串口发送出去。之前都是用的STM32,不太会MicroPython,搞不懂对象的数据结构,求教。
    发表于 04-28 06:16

    STM32开发入门进阶必备!《STM32嵌入式系统开发—基于STM32CubeMX和HAL》新书发布!

    近日,由华清远见教育科技集团精心编撰的教育部高等学校电子信息类专业教学指导委员会规划教材、普通高等教育电子信息类专业系列教材——《STM32嵌入式系统开发—基于STM32CubeMX和HAL
    的头像 发表于 04-03 14:54 ?858次阅读
    <b class='flag-5'>STM32</b>开发入门进阶必备!《<b class='flag-5'>STM32</b>嵌入式系统开发—基于<b class='flag-5'>STM32</b>CubeMX和<b class='flag-5'>HAL</b><b class='flag-5'>库</b>》新书发布!

    SN65HVS880是不是在CLK的上升沿发送数据出去的?

    1)上面SN65HVS880 时序图,有点不太明白,为什么SOP的第一位IP7在使能信号CE变为低电平时就被传送出去了,而且下面写着inhibit,是不是说IP7是被抑制 掉了,因为我在用
    发表于 01-24 06:40

    初始化时通过SPI读取ADS1291的寄存器的值,DOUT一直没有数据出来会是什么原因呢?

    刚拿到的板子,初始化时通过SPI读取 ADS1291的寄存器的值,用示波器看,命令成功发送出去了,但是DOUT一直没有数据出来。 会是什么原因呢?
    发表于 01-02 07:42

    HALSTM32开发中的重要性

    HAL(Hardware Abstraction Layer Library,硬件抽象层)在STM32开发中扮演着至关重要的角色。以下是HAL
    的头像 发表于 12-02 13:35 ?1471次阅读

    如何快速入门HAL编程 HAL与裸机编程的比较

    如何快速入门HAL编程 要快速入门HAL编程,可以遵循以下步骤: 了解基础知识 : 掌握C语言编程基础,包括变量、数据类型、函数、指针等
    的头像 发表于 12-02 11:39 ?1296次阅读

    ADS1299与STM32f407通过SPI进行数据传输的时候,可以直接使用HAL中的HAL_SPI_Receive函数进行数据传输吗?

    在与STM32f407通过SPI进行数据传输的时候,可以在使能SPI之后,直接使用HAL中的
    发表于 11-13 08:29

    L138初始化DAC3120后,怎样将ADC采集的数据发送出去,速率应该怎么定呀?

    广播。现在的问题是,L138初始化DAC3120后,怎样将ADC采集的数据发送出去,速率应该怎么定呀?是不是和ADC的采样频率有关?在配置McASP的时候,有什么注意事项。我是不是应该把DAC3120配置成slave模式?
    发表于 11-06 08:06

    STM32F405使用LL与ADC芯片通过SPI方式通讯,总是报数据溢出且接收数据不对

    调试了2周,尝试各种办法,修改参数,修改速度,重新建立工程,尝试查询、中断、DAM方式接收SPI数据均提示数据溢出,并且接收
    发表于 10-24 14:26

    TLV320aic3106需要将音频文件从音频I2S接口发送出去,从LEFT_LOP/M输出,这个过程需要配置那些寄存器?

    我只需要将音频文件从音频I2S接口发送出去,从LEFT_LOP/M输出,这个过程需要配置那些寄存器,自己对应的寄存器值,没法发图片,我配置了一部分,但是好像没输出! 我采用的是SPI控制接口,各位谁弄过,我是基于STM32
    发表于 10-21 06:05

    第12章-ADC采集电压和显示 基于STM32的ADC—电压采集(详细讲解+HAL

    第12章-ADC采集电压和显示 基于STM32的ADC—电压采集(详细讲解+HAL
    的头像 发表于 08-21 16:31 ?5559次阅读
    第12章-ADC采集电压和显示 基于<b class='flag-5'>STM32</b>的ADC—电压采集(详细讲解+<b class='flag-5'>HAL</b><b class='flag-5'>库</b>)