嵌入式实验 之 SPI通信实验

版权归如下公司,禁止非授权转载:

  • 北京西普阳光教育科技股份有限公司(https://www.simpleware.com.cn)
  • 维周机器人科技有限公司(http://www.vejoe.com)


【实验目的】

1、通过实验了解SPI的通信模式及配置过程。
2、通过使用SPI与蓝牙模块NRF2401进行通信,送内部数据到蓝牙模块并读取从蓝牙主机上发送的控制信息,了解蓝牙模块的配置和通信过程。

【实验原理】

SPI 协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线,它由摩托罗拉公司提出,当前最新的为 V04.01-2004 版。它被广泛地使用在 ADC、 LCD 等设备与 MCU 间通讯的场合。SPI通讯设备之间常用连接方式如图1所示。
在这里插入图片描述
图1 常见的SPI通讯系统

一、SPI原理

SPI 接口一般使用 4 条线: MISO 主设备数据输入,从设备数据输出。 MOSI 主设备数据输出,从设备数据输入SCLK 时钟信号,由主设备产生。CS 从设备片选信号,由主设备控制。根据 SPI 时钟极性(CPOL)和时钟相位(CPHA) 配置的不同,分为四种 SPI 模式。时钟极性是指 SPI 通讯设备处于空闲状态时SCK 信号线的电平信号。时钟相位是指数据的采样的时刻。

二、SPI特性

SPI 主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作; 提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。
SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果 CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI 主模块和与之通信的外设备时钟相位和极性应该一致。

三、SPI库函数分析

跟其他外设一样,STM32标准库提供了SPI初始化结构体及初始化函数来配置SPI外设。初始化结构体及函数定义在库文件“stm32f4xx_spi.h”和“stm32f4xx_spi.c”中。
SPI初始化结构体为SPI_InitTypeDef,其中包含:
在这里插入图片描述
表1 SPI_InitTypeDef配置

配置完这些结构体成员后,我们要调用库函数:
SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct)
把这些参数写入到寄存器中,实现 SPI 的初始化,然后调用库函数:SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState) 来使能 SPI 外设。

在进行SPI发送数据时我们需要用到库函数:SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG)
来判断指定的SPI的标志位,在本实验中,检查指定的SPI标志位设置与否:发送缓存空标志位。
SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data)来发送指定的数据。

在进行SPI接受数据时我们需要用到库函数:
SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG)
来判断指定的SPI的标志位,在本实验中,检查指定的SPI标志位设置与否:接受缓存非空标志位。
SPI_I2S_ReceiveData(SPI_TypeDef* SPIx)通过SPIx最近接受的数据。

四、蓝牙模块NRF2401

nRF24L01是一款工作在2.4~2.5GHz世界通用ISM频段的单片无线收发器芯片。无线收发器包括:频率发生器、增强型SchockBurst模式控制器、功率放大器、晶体振荡器、调制器、解调器、输出功率、频道选择和协议的设置可以通过SPI接口进行设置。极低的电流消耗:当工作在发射模式下发射功率为-6dBm时电流消耗为9.0mA,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。

五、软件流程图

在这里插入图片描述
图2 程序流程图

【实验环境】

操作系统

Windows7/8/10,32bit/64bit

硬件设备

小车所搭载的电路板主控芯片留有蓝牙调试端口,可以通过SPI连接蓝牙设备发送数据进行调试。

软件

Keil 5,串口助手软件

【实验步骤】

一、配置工程环境

1.1 在操作之前需要把关于GPIO,SPI,USART等的库文件添加到工程模板之中。在添加这些库文件之前需要把与stm32f10x_xxx.c 文件对应的一个 stm32f10x_xxx.h 头文也包含进我们的工程中才能够使用这些外设库。如图3所示。
在这里插入图片描述
图3 所需的头文件

二、开启时钟,完成端口初始化

2.1 打开程序中的spi.c文件,对SPI1_init函数进行编写和修改。在这个函数中我们调用了库函数 RCC_APB2PeriphClockCmd()初始化SPI1 和 GPIOC 的时钟。
2.2 GPIO端口时钟初始化

	/*对GPIOC端口进行初始化设置*/
GPIO_InitTypeDef GPIO_InitStructure;   
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );	//初始化时钟

2.3 GPIO 端口模式设置

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;             //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;            //GPIO速率
GPIO_Init(GPIOA, &GPIO_InitStructure);                        //GPIO初始化
GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);

2.4 对SPI进行初始化配置,使用SPI初始化结构体。

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; 
    //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工	      
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
//设置SPI工作模式:设置为主SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
//设置SPI的数据大小:SPI发送接收8位帧结构
SPI_InitStructure.SPI_CPOL 
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32串口通信实验是基于STM32F103C8T6芯片进行的。该实验使用嵌入式软件开发,利用UART串口通信实现上位机与下位机之间的信息交互。具体实验功能是通过串口输入数字1、2或3,下位机将会输出相应的内容。这个实验可以帮助学习UART串口通信的原理和程序源码。 串口通信是一种通过数据信号线、地线和控制线等按位传输数据的通讯方式,包括SPI通信、USART通信、EEPROM通信等。在本实验中,我们使用的是USART通信。USART是一种全双工通信方式,同时支持发送和接收数据。 在进行STM32串口通信实验时,需要按照以下步骤进行设置: 1. 使能串口时钟和GPIO时钟 2. 复位串口 3. 设置GPIO端口模式 4. 初始化串口参数,包括波特率、数据位、停止位和校验位等 5. 开启中断并初始化NVIC中断 6. 使能串口 7. 编写中断处理函数,用于接收和发送数据 通过完成以上步骤,就可以进行STM32串口通信实验,并实现上位机与下位机之间的数据传输和交互。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STM32F103标准库开发-Uart串口通信实验](https://download.csdn.net/download/MQ0522/85391400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [STM32之USART-串口通信(含串口实验详细解析)](https://blog.csdn.net/AriesPIG/article/details/119840979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

放羊郎

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

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

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

打赏作者

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

抵扣说明:

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

余额充值