STM32-HAL库11-SPI通讯(F103C6T6做主机,F103C8T6做从机)

STM32-HAL库11-SPI通讯(F103C6T6做主机,F103C8T6做从机)

一、所用材料

STM32F103C6T6最小系统板-主机
STM32F103C8T6最小系统板-从机
串口调试助手X-COM

二、所学内容

主要为实现SPI的轮询发送功能,在DSP280049C初学(2)-关于DSP280049C与STM32F103C8T6之间的SPI通讯记录中,已经详细介绍了STM32F103C8T6作为从机接收相关的配置,所以本文主要讲解SPI作为主机发送相关的配置。

三、HAL库配置

第一步:三件套SYS,RCC以及时钟配置

在这里插入图片描述

第二步:SPI主机配置

在这里插入图片描述

四、MDK5配置

第一步:spi.h

申明一个发送两个uint16字节数据的发送函数

void SendTwoData (uint16_t txdata1,uint16_t txdata2);

第二步:spi.c

void SendTwoData (uint16_t txdata1,uint16_t txdata2)
{
    uint8_t data[6];
    data[0] = 1;
    data[5] = 255;
    data[1] = txdata1/256;
    data[2] = txdata1%256;
    data[3] = txdata2/256;
    data[4] = txdata2%256;	
	HAL_SPI_Transmit(&hspi1, data, 6, 10000);
}

第三步:main.c

在main函数的while循环中轮询发送两个固定数据。

  while (1)
  {
//	 HAL_SPI_Transmit(&hspi1, tx_data, 4, 10000);
	 SendTwoData (1234,4321);
	 HAL_Delay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

第四步:结果展示

硬件连线上SPI很简单,各自将CS,CLK,MISO,MOSI四根线一一对应这连接起来就可以了。
在从机STM32F103C8T6上,将发送的数据串口打印出来如下图所示。
在这里插入图片描述

五、附录

在这里将免费提供该文章对应的STM32F103C6T6的SPI发送源代码,和STM32F103C8T6的SPI接收源代码

  1. STM32F103C6T6的SPI发送源代码
  2. STM32F103C8T6的SPI接收源代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,关于使用HAL库实现STM32作为从机SPI通讯,可以参考以下步骤: 1. 配置SPI从机模式 在HAL库中,可以使用`HAL_SPI_Init()`函数来初始化SPI外设,并设置从机模式。可以在SPI初始化结构体中设置以下参数: - SPI_Mode:设置为SPI_MODE_SLAVE。 - SPI_NSS:设置为SPI_NSS_HARD_INPUT,表示使用外部片选信号。 - SPI_FirstBit:设置为SPI_FIRSTBIT_MSB,表示数据传输时先发送高位。 2. 配置SPI从机时钟极性和相位 在从机模式下,需要根据主机的时钟极性和相位来设置从机的时钟极性和相位。可以使用`HAL_SPI_ConfigPhaseClkPolarity()`函数来设置。 例如,如果主机的时钟极性为1,时钟相位为1,则从机的时钟极性应为0,时钟相位应为1,可以使用以下代码进行设置: ``` SPI_HandleTypeDef hspi; hspi.Init.CLKPolarity = SPI_POLARITY_LOW; // 时钟极性为0 hspi.Init.CLKPhase = SPI_PHASE_2EDGE; // 时钟相位为1 HAL_SPI_Init(&hspi); ``` 3. 实现从机接收数据的回调函数 在从机模式下,当主机发送数据时,从机会触发接收数据的回调函数。可以使用`HAL_SPI_RxCpltCallback()`函数来实现回调函数。 在回调函数中,可以通过`HAL_SPI_Receive()`函数来接收主机发送的数据。 例如,以下代码实现了一个简单的从机回调函数,每当接收到一位数据时,就会在LED上闪烁一次: ``` void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) { uint8_t data; HAL_SPI_Receive(hspi, &data, 1, HAL_MAX_DELAY); HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); } ``` 4. 启动SPI从机模式 在完成以上步骤后,可以使用`HAL_SPI_Start_IT()`函数来启动SPI从机模式,等待主机发送数据。 完整的代码示例可以参考以下链接:https://github.com/STMicroelectronics/STM32CubeF4/blob/master/Projects/STM32F4-Discovery/Examples/SPI/SPI_FullDuplex_ComDMA/Src/main.c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tony0925

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值