YTM32的LIN通信协议引擎LinFlexD外设模块详解

本文详细介绍了YTM32微控制器的LINFlexD外设模块,该模块实现了LIN协议控制器功能,支持主机和从机模式。文中阐述了其工作机制,包括初始化、主机和从机模式的工作流程,还介绍了错误状态标志位、超时错误、ID过滤机制等内容,最后提及了相关软件和参考文献。

YTM32的LIN通信协议引擎LinFlexD外设模块详解

LINFlexD外设简介

YTM32微控制器的LINFlexD外设模块,实现了LIN协议控制器的功能,可以支持LIN总线协议的主机和从机功能。如图x所示。

在这里插入图片描述

图x LINFlexD在LIN总线系统中的位置

LINFlexD 可以实现使用较少 CPU 介入的情况下,高效管理大量的 LIN 通信帧:

  • 在主机 Master 模式下,当软件触发了通信过程(发送帧头),LINFlexD 硬件可以自行继续发送或者捕获数据流(应答数据),直至软件重新启动下一个通信过程(主机启动),或者收到一个校验和(接收模式)。
  • 在从机 Slave 模式下,LINFlexD 中设计了一组帧头过滤器(ID Filter),可以配置由硬件自动匹配从总线上捕获到的帧头,仅当识别到本机预设处理的帧头,才启动数据通信过程(从机任务)。
  • LINFlexD 内部还集成了一个8字节的缓冲区,用于存放硬件自动发送或者接收的数据段内容。
  • LINFlexD 硬件外设支持LIN v1.3、v2.0、v2.1、v2.2协议。可以在配置帧头信息的 LINFlexD_BIDR[CCS]寄存器位中指定将要发送或者接收的帧使用扩展性校验和还是经典款校验和。

LINFlexD 还支持 UART 模式,用于实现常规的 UART 通信。本文主要面向 LIN 通信引擎介绍,关于 UART 介绍,可见后续文章。

LINFlexD工作机制

初始化

手册中对 LINFlexD 的工作模式划分为:初始化模式(Initialization)、常规工作模式(Normal)和休眠模式(Sleep)。在硬件复位后,LINFlexD 处于休眠模式以节约用电。若要配置 LINFlexD 开始工作,需要先通过软件配置,切换至初始化模式,在初始化模式下进行一些专属的配置后,再切换至常规工作模式,才能顺利启动 LINFlexD 外设。这个初始化模式,相当于为配置 LINFlexD 外设设计了一个同步锁,或者说关键区,使得在初始化阶段配置 LINFlexD 外设的各项功能时都不会立刻生效,以避免产生不确定的不安全状态,最后退出初始化模式,硬件同步一并打开所有的配置功能,稳当。

  1. 初始化模式(Initializaiton,INIT)

软件配置寄存器LINFlexD_LINCR1[INIT]=1,切换至初始化模式。当然,还可以通过配置LINFlexD_LINCR1[INIT]=0,退出初始化模式(至Normal模式?)。

进入初始化模式后,LINFlexD 引擎同 LIN 总线的传输将全部停掉(木头人不许动),并且推送总线上位高电平(隐形信号)。如果在某个总线传输的过程中进入初始化模式,则该传输将被打断并退出。所以说,在切入初始化状态之前,软件一定要先查一下 LINFlexD 的状态标志位,确保不会打断正在进行的传输,再进入初始化模式。

在初始化模式下,可以对 LINFlexD 外设进行初始化配置:

  • 配置通信波特率
  • 启用 LINFlexD 模式(停用UART模式)
  • 选择主机模式或者从机模式
  • 配置校验和控制位
  • 若是从机模式,还需要预先填写好可以捕获的ID的列表
  1. 常规工作模式(Normal Mode,NM)

在初始化模式中,配置寄存器LINFlexD_LINCR1[INIT]=0,切换至常规工作模式。

在常规工作模式下,LINFlexD 可以执行正常的收发通信。

  1. 休眠模式(Sleep Mode,SM)

配置软件寄存器LINFlexD_LINCR1[SLEEP]=1,切换至休眠模式。当然,也可以通过配置LINFlexD_LINCR1[SLEEP]=0,退出休眠模式(至Normal模式)。

进入休眠模式后,LINFlexD引擎就暂停工作,等待唤醒事件到来后,自动切回正常模式响应外部的通信请求。

如果软件在 LIN 总线上检测到一个 150us 的唤醒脉冲,可以请求 LINFlexD 从休眠模式唤醒。

  1. 回环工作模式(Loop Back Mode)

通过配置寄存器LINFlexD_LINCR1[LPKM]=1启用回环模式。回环工作模式可用于自测试通信协议,当启动回环模式后,芯片内部的Tx和Rx引脚相连,通过Tx发送的信号会直接被反馈会接收通道(忽略Rx引脚的输入)。如图x所示。

在这里插入图片描述

图x LINFlexD的回环模式

主机模式

通过配置寄存器LINFlexD_LINCR1[MME]=1,设定本设备为主机模式工作。

  1. 发送帧头

根据LIN协议的描述,LIN总线的上通信,都是由主机(具体是主机节点的主机任务)发送帧头开始的。当发送帧头时,由软件先写入LINFlexD_BIDR寄存器中的字段,包括:ID(6位的帧ID,硬件自动补完校验位)、DFL(数据段长度)、DIR(帧通信的方向)及CCS(启用经典校验的控制位,后续硬件自动生成校验字节)。然后,设置寄存器LINFlexD_LINCR2[HTRQ]=1,请求发送帧头。在启动发送帧头之后,在发送完成本帧之前,不要人为修改LINFlexD_BIDR寄存器中的内容,LINFlexD 从总线上捕获到已经发送帧的ID会被自动复制到LINFlexD_BIDR寄存器中。

  1. 发送数据

当主机节点执行发布任务时(发送数据到总线),主机节点上运行的从任务(主机节点上的主任务仅发送帧头)会继续发送数据部分。因此,软件需要在发起发送帧头的请求之前,就将需要发送的数据准备好,将数据存放至消息缓冲区LINFlexD_DATA[]中,同时,需要在LINFlexD_BIDR[DFL]寄存器中指定将要发送字节数据的数量,硬件根据软件在LINFlex_BIDR[CCS]控制位的配置(这个数据位可能是总线上捕获到的帧头中的信息),自动计算经典校验和或是增强校验和。

当应答的数据发送成功后,会置位硬件标志位LINFlexD_LINSR[DTF],但如果发送过程中出现错误,标志位LINFlexD_LINSR[DTF]不会置位,

<think>好的,我需要帮助用户了解如何在YTM32B1MD1单片机中通过寄存器配置外设时钟。首先,我应该查阅YTM32B1MD1的数据手册或参考手册,找到关于时钟系统的部分。通常,时钟配置涉及系统时钟源选择、分频器设置以及外设时钟使能这几个主要步骤。 用户可能对寄存器配置不太熟悉,所以需要分步骤讲解。首先,确定时钟源,比如内部RC振荡器或外部晶振。然后配置分频器,确定外设时钟频率。接下来,找到对应外设的时钟使能寄存器,开启特定外设的时钟。 需要注意的是,直接操作寄存器时,必须确保地址正确,并且按位操作来设置或清除相应的位,避免影响其他配置。可能还需要考虑时钟门控和低功耗模式的相关设置。此外,不同外设可能有不同的时钟要求,例如USART需要精确的波特率时钟,而定时器可能需要更高的频率。 用户可能遇到的问题包括寄存器地址错误、未正确使能时钟导致外设无法工作,或者时钟频率配置不当导致外设功能异常。因此,在教程中应强调仔细检查寄存器地址,使用位掩码操作,并通过调试工具验证时钟配置是否生效。 最后,生成相关问题时,要考虑用户可能进一步想知道如何验证时钟配置、不同外设的具体配置方法,以及常见错误排查步骤。这有助于用户全面理解和应用所学内容。</think>### YTM32B1MD1单片机外设时钟配置教程 在YTM32B1MD1单片机中,外设时钟的配置主要通过对时钟控制寄存器(如`RCU_APB1EN`、`RCU_APB2EN`等)的操作实现。以下是具体步骤: #### 1. **查看时钟树结构** 首先需在数据手册中确认目标外设挂载的总线类型(APB1/APB2/AHB)。例如: - USART1属于APB2总线 - SPI1属于APB1总线[^1] #### 2. **使能外设时钟** 通过设置对应总线使能寄存器的位域,例如开启GPIOA时钟: ```c // APB2外设时钟使能寄存器地址:0x40021018 *(volatile uint32_t*)0x40021018 |= (1 << 2); // 开启GPIOA时钟 ``` #### 3. **配置时钟分频(可选)** 若需调整总线频率,需设置分频寄存器: ```c // APB1分频寄存器地址:0x4002101C *(volatile uint32_t*)0x4002101C &= ~(0x07 << 8); // 清除原有分频 *(volatile uint32_t*)0x4002101C |= (0x03 << 8); // 设置4分频 ``` #### 4. **验证配置** 可通过读取寄存器值或测量实际时钟信号验证配置是否生效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值