STM32的HAL库SPI操作(master 模式)-根据时序图配置SPI

这篇具有很好参考价值的文章主要介绍了STM32的HAL库SPI操作(master 模式)-根据时序图配置SPI。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SPI相关基础知识

SPI基本概念请自行百度,参考:百度百科SPI简介.我们讲重点和要注意的地方。

master模式下要关注的地方

接线一一对应

也就是说主控的MISO,MOSI,SCLK,[CSn]分别和设备的MISO,MOSI,SCLK,[CSn]一一对应相连,不交叉,不交叉,不交叉…(重要的事情说三遍)。

从设备的时序图

hal库 spi,STM32,stm32,嵌入式硬件,单片机

这是无线模块CC2500的SPI接口时序,这里可以看到,从设备要求,1、时钟空闲时为低电平;2、数据在时钟下降沿跳变,上升沿稳定,第1个沿为数据采样点;3、高位先发送;4、数据长度8位;
hal库 spi,STM32,stm32,嵌入式硬件,单片机

这是AD7192的SPI接口时序,这里可以看到从设备要求,1、时钟空闲时为高电平;2、数据在时钟下降沿跳变,上升沿稳定,第2个沿为数据采样点;3、高位先发送;4、数据长度8位;
我们的master模式要根据从设备的时序要求来设置参数,才能正常访问设备。

初始化参数

STM32CubeMX是一个比较好用的可视化工具,具体使用方法参考官方文档,这里看重点:
hal库 spi,STM32,stm32,嵌入式硬件,单片机

这是连接上面那个AD7192芯片的配置,生成代码后,我们看它的设置:

/* SPI2 init function */
void MX_SPI2_Init(void)
{
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;								//MASTER模式
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;							//一个数据8位
  hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH;						//时钟空闲为高电平
  hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;							//第二个跳变采样数据
  hspi2.Init.NSS = SPI_NSS_SOFT;									//软件设置CS
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;							//高位在前
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;							//禁用TI模式
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;			//禁用CRC校验
  hspi2.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    Error_Handler();
  }
}
//引脚配置,自动生成,一般不用修改
void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	if(spiHandle->Instance==SPI2)
	{
	    /* SPI2 clock enable */
	    __HAL_RCC_SPI2_CLK_ENABLE();
	  
	    __HAL_RCC_GPIOB_CLK_ENABLE();
	    /**SPI2 GPIO Configuration    
	    PB13     ------> SPI2_SCK
	    PB14     ------> SPI2_MISO
	    PB15     ------> SPI2_MOSI 
	    */
	    GPIO_InitStruct.Pin = ADC_SCLK_Pin|ADC_MOSI_Pin;
	    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
	    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
	
	    GPIO_InitStruct.Pin = ADC_MISO_Pin;
	    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
	    GPIO_InitStruct.Pull = GPIO_NOPULL;
	    HAL_GPIO_Init(ADC_MISO_GPIO_Port, &GPIO_InitStruct);
	}
}

查询、中断还是DMA?

总的来说一句话就是,根据需要来决定,因为我们是接的低速AD芯片,所以直接用查询方式就够了,函数定义:文章来源地址https://www.toymoban.com/news/detail-737607.html

//SPI2,master模式,读写一个字节操作
//TxData:要写入的字节
//返回值:读取到的字节
uint8_t SPI2_ReadWriteByte(uint8_t TxData)
{
	uint8_t Rxdata;
	HAL_SPI_TransmitReceive(&hspi2,&TxData,&Rxdata,1, 1000);       
	return Rxdata;          		    //返回收到的数据		
}

到了这里,关于STM32的HAL库SPI操作(master 模式)-根据时序图配置SPI的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 HAL库 STM32CubeMX -- SPI

    SPI (Serial Peripheral Interface)协议,即串行外围设备接口,是一种高速全双工的通信总线。 它被广泛地使用在ADC、LCD 等设备与MCU 间,要求通讯速率较高的场合。 SPI 通讯使用3 条总线及片选线, 3 条总线分别为SCK、MOSI、MISO,片选线为SS(CS) ,它们的作用介绍如下: (1) SS( Slav

    2024年02月13日
    浏览(52)
  • 【STM32】HAL库Flash读写操作及配置

    【STM32】HAL库Flash读写操作及配置 在keil里面的默认工程配置中 Flash分配地址 程序部分为0x0800 0000到0x0810 0000 总共是0x0010 0000的大小 也就是1048576Byte 1024KB 1MB 而实际上程序部分大小应该要看硬件手册来确定 可以通过配置keil工程中size的大小 来确定程序地址的范围(如果太小了

    2024年02月03日
    浏览(47)
  • 【STM32】基于HAL库建立自己的低功耗模式配置库(STM32L4系列低功耗所有配置汇总)

    【STM32】基于HAL库建立自己的低功耗模式配置库(STM32L4系列低功耗所有配置汇总) 此文章是讨论将先前所有的低功耗配置功能整合起来的一个库(适用于STM32L4系列) 目前除了普通唤醒方式外 加入了UART唤醒和RTC唤醒配置 如果后续有更多唤醒加入(如I2C等 将直接在后续的文章

    2024年02月19日
    浏览(46)
  • 【STM32 CubeMX】SPI HAL库编程

    STM32 CubeMX 是一款由 STMicroelectronics 提供的图形化配置工具,用于生成 STM32 微控制器的初始化代码和项目框架。在 STM32 开发中,使用 CubeMX 可以大大简化初始化过程,并帮助开发者快速构建应用程序。其中,SPI(串行外设接口)是一种常用的通信协议,它在连接外部设备时非常

    2024年02月19日
    浏览(36)
  • STM32 HAL库 SPI主从双机通信

    最近因为项目需求,需要在一块板子内实现一个主机和五个从机的通信; 主机平台选用的是STM32F407VGT6,从机平台选用的是STM32F103C8T6;通信总线选用的是SPI总线。在构想是觉得采用SPI进行主从通信会很简单,但在实际开发的过程中,各种坑,通信时而正常时而混乱。不过在不

    2024年01月17日
    浏览(41)
  • 7针0.96寸OLED的HAL库代码(硬件SPI/全代码/stm32f1/CubeMX配置/包含有正负浮点数/100%一次点亮)

    HC-SR04超声波模块的使用  编码电机以及双电机驱动 4针 0.96\\\'OLED的使用 更多有意思的文章点击“我的主页” --------😐 更多有意思的视频 ----- B站 @想要亿只独角兽 --------😐 之前发布了一篇硬件I2C的0.96\\\' OLED驱动代码,这次就添加一篇硬件SPI的驱动代码。 其实改动的代码不多,

    2024年02月16日
    浏览(47)
  • [HAL]STM32 SPI+DMA驱动WS2812

    该程序是纯手敲,非Cube生成!所有代码均注释。 源码在文章后面获取 Keyword: 单线通讯、归零码、Reset、RGB顺序 RGB一共有24bit位 -相当于驱动一个灯要24bit位 -驱动若干个灯要24* n bit位,通过Reset码决定数据终止(保持) 24bit位应该如何发送? 可见: 表示低电平需要 T0H和T0L的配

    2024年02月09日
    浏览(53)
  • STM32开发_利用SPI协议读写SD卡、介绍SD卡SPI时序

    目录 一、​  SD卡引脚接口功能介绍 1.1 SD卡引脚接口图 1.2 SPI方式驱动SD卡介绍 1.3 开发板接口定义 二、MMC卡、SD卡介绍 2.1 SD卡和MMC两者间区别 2.2 SD卡版本说明 2.3 SD卡常用的指令表 三、向SD卡发送命令的步骤介绍(SendSDCardCmd) 3.1 取消选中SD卡(SDCardCancelCS) 3.2 选中SD卡(SDCardSele

    2024年02月16日
    浏览(51)
  • 【STM32学习】——SPI通信协议&SPI时序&W25Q64存储芯片&软件SPI读写

    目录 前言 一、SPI通信协议 1.概述​ 2.硬件电路  3.移位示意图 二、SPI时序 1.时序基本单元 2.完整时序波形 三、W25Q64存储芯片 1.芯片简介  2.硬件电路引脚定义  3.芯片框图 4.Flash操作注意事项 四、软件SPI读写W25Q64 五、SPI通信外设 总结 声明:学习笔记来自江科大自化协B站教

    2024年02月09日
    浏览(62)
  • stm32 AD7606 芯片驱动 hal库 spi通讯

             这两天用来个ad7606 的芯片,结果硬件出来个问题,花了不少时间看这个芯片手册,干脆分享一下。         OS0 OS1 OS2         这个三个引脚用于配置芯片的采样频率,只要不设置为111即可正常采样; CONVSTA CONVSTB 这两个引脚用于启动芯片采集转换,默认高电平,

    2024年04月26日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包