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

相关文章

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

一文彻底搞懂Java 中的 SPI 是什么

《一文彻底搞懂Java中的SPI是什么》:本文主要介绍Java中的SPI是什么,本篇文章将通过经典题目、实战解析和面试官视角,帮助你从容应对“SPI”相关问题,赢得技术面试的加分项,需要的朋... 目录一、面试主题概述二、高频面试题汇总三、重点题目详解✅ 面试题1:Java 的 SPI 是什么?如何实现一个

Mac备忘录怎么导出/备份和云同步? Mac备忘录使用技巧

《Mac备忘录怎么导出/备份和云同步?Mac备忘录使用技巧》备忘录作为iOS里简单而又不可或缺的一个系统应用,上手容易,可以满足我们日常生活中各种记录的需求,今天我们就来看看Mac备忘录的导出、... 「备忘录」是 MAC 上的一款常用应用,它可以帮助我们捕捉灵感、记录待办事项或保存重要信息。为了便于在不同

查看MySql主从同步的偏移量方式

《查看MySql主从同步的偏移量方式》:本文主要介绍查看MySql主从同步的偏移量方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 1.mysql的主从同步方案mysqlphp为了在实现读写分离,主库写,从库读mysql的同步方案主要是通过从库读取主库的binl

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示