首页 > 其他分享 >stm32芯片的SPI接口调试总结之轮询模式

stm32芯片的SPI接口调试总结之轮询模式

时间:2024-02-18 12:11:36浏览次数:28  
标签:引脚 轮询 MX stm32 SPI Init Data void

一 概念

1 组成

SPI系统可直接与各个厂家生产的多种标准外围器件接口,它只需4条线:串行时钟线(SCK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)和低电平有效的从机选择线(NSS)。 (1)MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。 (2)MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。 (3)SCK:串口时钟,作为主设备的输出,从设备的输入。 (4)NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为片选引脚,让主设备可以单独地与特定从设备通信,避免数据线上的冲突。   2 工作模式   SPI有主从两种工作方式。在主模式下,SPI为其他节点的SPICLK引脚提供串行时钟,数据从SPISIMO引脚输出,从SPISOMI引脚输入。 在从动方式下,数据从SPISOMI引脚移出并由SPISIMO引脚移入。SPICLK引脚作为串行移位时钟的输入。   二 源码解析   master端的源码:
#include "main.h"

SPI_HandleTypeDef hspi1;

  #define DATA_SIZE 64   uint8_t TX_Data[DATA_SIZE];
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);

int main(void)
{

    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_SPI1_Init();


    HAL_SPI_Transmit(&hspi1, TX_Data, sizeof(TX_Data), 5000);

    while (1)
    {

    }
}

2 slave源码解析

#include "main.h"

SPI_HandleTypeDef hspi1;

UART_HandleTypeDef huart2;
uint8_t RX_Data[70] = {0};

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);
static void MX_USART2_UART_Init(void);

int main(void)
{
HAL_Init();
SystemClock_Config();

MX_GPIO_Init();
MX_SPI1_Init();
MX_USART2_UART_Init();

HAL_SPI_Receive(&hspi1, RX_Data, sizeof(RX_Data), 5000);
HAL_UART_Transmit(&huart2, RX_Data, sizeof(RX_Data), 5000);

while (1)
{

}

}


三 调试总结

1 硬件接口

硬件接口一定要确认是通的,可以先用软件来驱动GPIO来测试一下。

2 工作方式

轮询的工作方式最简单,它作master发送端没啥问题,可作为接收端,就有诸多不方便了。

 

三 调试总结

1 硬件接口

硬件接口一定要确认是通的,可以先用软件来驱动GPIO来测试一下。

2 工作方式

轮询的工作方式最简单,它作master发送端没啥问题,可作为接收端,就有诸多不方便了。

标签:引脚,轮询,MX,stm32,SPI,Init,Data,void
From: https://www.cnblogs.com/dylancao/p/18019066

相关文章

  • STM32之红外遥控信号自学习实现
    一、序言很早前就想实现这个红外遥控自学习的这个实验,用于来自己控制房子里如空调等红外遥控设备的自动化,NEC的标准到具体的产品上可能就被厂家定义为不一样了,所以自学习就应该是接收到什么就发送什么,不用管内容是什么!二、硬件实现原理由上述原理图可知,当IE为高电平时发送红外......
  • 【STM32】成功创建Keil MDK工程的条件(可对照查缺补漏)
    文中所有文件夹数量和名称没有限制,按自己理解建也OK。首先:确保编码格式正确(UTF-8),可在小扳手那里更改。安装对应芯片器件支持包。建启动文件夹Start(记得在Keil项目界面添加同名分组导入文件),启动文件的最后字母为型号缩写。STM32F1系列的具体芯片型号缩写参照下表:建......
  • STM32系统开发--基于LL库的多串口Printf使用
    MDK:Keilv5.38/STM32CubeMXMCU:STM32G431CBUx外设:串口USART1、2使用多串口Printf,基于C语言中的函数可变参数,首先要包含头文件"stdarg.h"。基于LL库,编写多串口打印函数:/************************************************函数名称:USART_Printf功能:多串口Printf函数......
  • stm32 esp8266测试问题原因记录
    现象:连上WIFI但发送数据失败 原因:WIFI网络延时过大,或者程序设置的等待超时时间过小解法:换个网络延时小的WIFI连,或者增加程序等待超时的时间 现象:连不上WIFI 原因:esp8266_mqtt_init()中的的延迟过长,测试4S不行,要2S解法:将4秒延时改回2S1int32_tesp8266_mqtt_init(v......
  • STM32超声波模块问题
    先写没问题用法,有问题的语法就不示范voidSr04_Init(void){GPIO_InitTypeDefGPIO_InitStruct;TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStruct;//打开GPIO组时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);RCC_AHB1PeriphClockCm......
  • 【译】发布 .NET Aspire 预览版 2(二)
    原文|DamianEdwards翻译|郑子铭组件更新组件包现在有单独的图标大多数Aspire组件的NuGet包现在都具有代表性图标,以便在NuGet包管理器对话框中更轻松地识别它们,并给体验带来一些视觉差异:MySqlConnector的组件和托管支持感谢社区成员BradleyGrainger(流行的MyS......
  • STM32打印掺杂乱码
    问题:STM32打印掺杂乱码 原因:时钟太快了(不要以为是电磁干扰,接触不良,硬件出问题,多想想在发现这种情况之前做了什么操作)问题:为什么之前好好的,现在不行了原因:安装CubeMX导致的,具体原因不清楚解法:根据外部晶振调对时钟频率 效果: ......
  • ADI CCES ADSPI2156X UART DMA模式中,获取当前存到第几个数CurrXCount, 重新从头开始接
    关键的一些寄存器关键的寄存器pUARTDstDMARegstypedefstruct{uint32_tnTmrDevNum;/*TimerassosiatedtotheselectedUARTforAutobaud*/ADI_UART_TypeDef*constpUARTRegs;/*Pointertobaseadd......
  • 【译】发布 .NET Aspire 预览版 2(一)
    原文|DamianEdwards翻译|郑子铭自上个月宣布并推出.NETAspire以来,我们收到的反馈非常惊人!通过问题和拉取请求对回购协议的参与一直激励着团队。我们正在深入了解开发人员在分布式云应用程序开发中如何使用(以及希望使用).NETAspire或其他组件。社区已经做出了一些很棒的......
  • java的SPI机制
    参考https://blog.csdn.net/qq_52423918/article/details/1309683071概念JavaSPI(ServiceProviderInterface)是Java官方提供的一种服务发现机制,它允许在运行时动态地加载实现特定接口的类,而不需要在代码中显式地指定该类,从而实现解耦和灵活性。2实现原理JavaSPI的实现原......