Tomato学习笔记-STM32之SPI简介和TIM同步

2023-11-04 23:30

本文主要是介绍Tomato学习笔记-STM32之SPI简介和TIM同步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 目录

        1.前言

        2.SPI学习

        3.TIM同步

        4.总结


 前言

        最近又从语音转向硬件方向,不过由于初入硬件,感觉如坠泥潭。主要是各个外设的功能太复杂了,引用我老师的一句话。做硬件就是要又硬又软。而今天写这篇文章主要是因为解决了一些小问题,所以记录一下,以防以后碰见。

        感谢下文(内容关于TIM同步)的作者,通过参考下文解决了我一些问题

(29条消息) STM32定时器同步模式 四种_学海无涯-CSDN博客_stm32 定时器同步icon-default.png?t=M1L8https://blog.csdn.net/qq_30567891/article/details/78988828

SPI学习

        SPI(Serial Peripheral Interface)串行外设接口,能够进行全双工的数据传输,本次项目中主要使用进行语音数据的传输,SPI的引脚定义可以参照参考手册。

  • NSS:SPI的开关,可以配置为内部开关或外部的硬件开关,通常打开是置0
  • MISO:主机输入,从机输出(传输数据),每次传输大小可以指定
  • MOSI:主机输出,从机输入(传输数据)
  • SCK:SPI的时钟,相当于SPI的驱动能力

        时序图随便从网上找的,可以看到SPI的数据传输是有两个步骤的,一是数据的改变,二是数据的采样,采样的值就是实际的传输值。两个步骤都是在SCK的边沿进行,至于到底是上升沿还是下降沿可以自己通过CPOL和CPHA进行设置。下图即展示了相关边沿及时序

        值得注意的是,我的项目中NSS设置成了硬件启动,然后在STM32中引一个引脚接到NSS引脚上,通过改变引脚电平启动SPI,这样相当于软件方式的硬件启动,虽然我感觉不如直接设置成软件启动。不知道为什么要这么设计[迷惑]

TIM同步

        简单总结一下,TIM内部具有ITR的触发功能,比如TIM1可以因为ENABLE、UPDATE、COMPARE事件发出TRO(触发器输出),然后由于内部连接,可以在TIM2中接受这个信号成为TRI,接受后也可以触发一些事件,例如Gated门控、Trigger开启等。

        TIM可以配置成PWM模式,输出方波,这个输出方波是根据CRR的值和COUNT值进行方波输出,当CRR<COUNT输出0,当CRR>COUNT输出1。而且,PWM模式属于基础功能,不影响触发器模式,所以也可以使用TIM同步来进行PWM同步方波输出。

        坑1:HAL库中,如果配置成了从机Trigger同步模式,一定要注意从机计时器也需要使用HAL_TIM_PWM_Start()。不用担心使用这个会直接开始计时器输出PWM方波,因为在HAL库中,有这么一段话(下面代码贴出来了)/* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */在Trigger模式中,不会开启,因为它是自动触发开启的。

HAL_TIM_PWM_Start(&htimn, TIM_CHANNEL_n);	HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{uint32_t tmpsmcr;/* Check the parameters */assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));/* Check the TIM channel state */if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY){return HAL_ERROR;}/* Set the TIM channel state */TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);/* Enable the Capture compare channel */TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET){/* Enable the main output */__HAL_TIM_MOE_ENABLE(htim);}/* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)){__HAL_TIM_ENABLE(htim);}/* Return function status */return HAL_OK;
}

        坑2:主机计时器要在从机计时器前初始化。如果从计时器先初始化,那么可以就可以接受触发信号,这会导致在主计时器初始化时,按照HAL库逻辑会这么进入MX_TIMn_Init->HAL_TIM_Base_Init->TIM_Base_SetConfig(),在TIM_Base_SetConfig函数中有这么一段话

/* Generate an update event to reload the Prescalerand the repetition counter (only for advanced timer) value immediately */TIMx->EGR = TIM_EGR_UG;

所以很明显,这会直接导致从计时器在主计时器初始化时开启,这跟我们想象的不一样啊,大哥。这些坑真让我头疼,发出来大家注意一下,也让我以后注意别再踩这些坑了[哭哭]

总结

        一定要参考那3300多页的STM32参考手册,虽然很多很杂,不过确实是最为准确的手册了。哭着看吧

这篇关于Tomato学习笔记-STM32之SPI简介和TIM同步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/345908

相关文章

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

Nacos集群数据同步方式

《Nacos集群数据同步方式》文章主要介绍了Nacos集群中服务注册信息的同步机制,涉及到负责节点和非负责节点之间的数据同步过程,以及DistroProtocol协议在同步中的应用... 目录引言负责节点(发起同步)DistroProtocolDistroSyncChangeTask获取同步数据getDis

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;