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

2023-09-18 13:10:11

SPI相关基础知识

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

master模式下要关注的地方

接线一一对应

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

从设备的时序图

在这里插入图片描述

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

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

初始化参数

STM32CubeMX是一个比较好用的可视化工具,具体使用方法参考官方文档,这里看重点:
在这里插入图片描述

这是连接上面那个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芯片,所以直接用查询方式就够了,函数定义:

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

QT实现qq登录

1、登录界面头文件#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include<QMessageBox>#include<QDebug>#include"second.h"//第二个界面头文件#include"third.h"//注册界面头文件#

go语言常用标准库(Time)

go语言常用标准库(Time)1、Time时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法。1.1.1.time包time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。1.1.2.时间类型time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对

stable diffusion的微调和lora微调代码版本

目前业界主流的sd训练基本都是基于diffusers和ldm的,这是huggingface的训练库,后者是stabilityai在compvis等机构的基础上完善的,我目前工作上推理一般采用webui架构,训练采用diffusers,因此需要把webui的ckpt或者safetensors转成huggingface形式

RabbitMQ消息可靠性(二)-- 消费者消息确认

一、消费者消息确认是什么?在这种机制下,消费者在接收到消息后,需要向RabbitMQ发送确认信息,告知RabbitMQ已经接收到该消息,并已经处理完毕。如果RabbitMQ没有接收到确认信息,则会将该消息重新加入队列,等待其他消费者继续处理。消费者消息确认机制能够保证消息不会因为消费者宕机或其他原因而丢失,从而保证了消

Polygon ID架构

1.引言身份分类:1)物理身份:如驾照、身份证等。2)数字身份:又分为:2.1)中心化数字身份:如传统的中心化web2网站账号密码登录。2.2)联邦身份:如通过facebook或谷歌账号授权登录不同网站或应用。2.3)去中心化自治身份:自己持有并管理数据。可有选择的公开或证明,具备隐私属性。PolygonID架构中主要

大模型应用发展的方向|代理 Agent 的兴起及其未来(上)

“介绍了人工智能代理的历史渊源与演进,接着探讨了大型语言模型(LLMs)的发展,以及它们在知识获取、指令理解、泛化、规划和推理等方面所展现出的强大潜力。在此基础上,提出了一个以大型语言模型为核心的智能代理概念框架,该框架包括大脑、感知和行动这三个主要组成部分。”01—长期以来人工智能领域一直追求与人类水平相当甚至超越人

视频画面噪点太多难处理?AI工具一键消除

很多时候我们下载或者录制的视频画面都会有带噪点的问题,噪点就像密密麻麻的小颗粒,这样非常影响观看,这个时候我们需要使用视频降噪功能,视频降噪可以提升视频内容的保真。那么视频画面噪点如何处理呢?视频噪点,也称为视频噪声,是指由于各种原因导致的视频图像中出现的不规则的杂点、花点或小斑点。这些噪点会严重影响视频的观感和质量,

Java基于SpringBoot的校园博客系统

第一章:简介本系统主要根据博主的需求做出分析,让博主更好的在线查看校园博客系统信息等,管理员后台管理系统数据等功能。从这个系统的操作来说,能够有效的进行信息的添加、修改、查询、删除一些校园博客系统信息,在一定的程序上能够实现了自动化。设计该系统的主要目的是为实现通过网络来减少人力和财力的投入,不断提高工作效率。文章首发

强化学习从基础到进阶--案例与实践[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现专栏详细介绍:【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现对于深度强化学习这块规划为:基础单智能算法教学(g

27、Flink 的SQL之SELECT (SQL Hints 和 Joins)介绍及详细示例(2-2)

Flink系列文章1、Flink部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接13、Flink的tableapi与sql的基本概念、通用api介绍及入门示例14、Flink的tableapi与sql之数据类型:内置数据类型以及它们的属性15、Flink

安防视频/视频汇聚平台EasyCVR使用onvif探测添加设备通道详细步骤来啦!

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.2

热文推荐