S32K144入门笔记(十):TRGMUX的初始化

目录

1. 概述

2. 代码配置


1. 概述

        书接上回,TRGMUX本质上是一个多路选择开关,根据用户手册中的描述,它可以实现多个输入的选择输出,本篇文章将验证如何通过配置工具来生成初始化配置代码。

2. 代码配置

        笔者通过配置TRGMUX实现当LPUART1发送数据时触发TRGMUX的输出通过out0连接PAT1进行输出,这样就可以通过示波器来观察和验证配置的正确性。

        首先配置TRGMUX的通道,如图1所示。

图1 TRGMUX的外设配置

         由于要使用GPIO输出触发信号,接下来需要配置GPIO,如图2所示。

图2 输出GPIO的配置

        完成以上配置后,TRGMUX模块的基本信息就已经配置好了,还是比较简单,接下来只需要使用初始化函数在程序中启动GPIO和TRGMUX就可以了,GPIO初始化函数前面讲过,这里不再赘述。TRGMUX的初始化函数如下:

TRGMUX_DRV_Init(INST_TRGMUX, &trgmux1_InitConfig0);

        由于笔者对代码做了简单的封装,就当成伪代码看就好了,程序如下:

#include "sdk_project_config.h"
#include "gdrv.h"

//float test = 31.2f;

uint8_t rxdata = 0;
int main(void)
{
	McuInit();		// 芯片基础初始化:时钟、GPIO、中断使能
	SysTickBegin();	//	SysTick定时器计时初始化
	Lpuart1Init();	//LPUART的初始化
	TRGMUXInit();    //TRGMUX通道配置初始化

	while (1)
	{
		printf("0\r\n");    //随便发一个字符
		PINS_DRV_TogglePins(LED_BLUE_PORT, 1 << LED_BLUE_PIN);//闪烁LED,
		DelayMsFromSysTick(80);//延时80毫秒
	}
}

        当程序运行时,每隔80毫秒,可以通过示波器看到PAT1上由波形输出,这次笔者比较懒就不贴测试图片了。

<think>好的,用户之前问过关于S32K外部晶振和时钟源的问题,现在他们又问了系统时钟,需要进一步深入。首先,我得确认用户的需求是什么,他们可能是在开发中使用S32K微控制器,遇到了时钟配置的问题,或者想优化系统性能。 首先回顾之前的回答,已经介绍了外部晶振和内部时钟的区别,以及时钟源的关系。现在用户问的是系统时钟,可能需要更详细的结构,比如时钟树、配置步骤、各部分的作用。 用户可能是嵌入式开发者,尤其是汽车电子领域的,因为S32K常用于汽车应用。他们可能想知道如何配置系统时钟以达到所需的性能,或者解决时钟相关的故障。需要确保回答结构清晰,覆盖时钟源、时钟树、配置方法以及常见问题。 接下来,我需要组织信息。S32K的系统时钟涉及多个模块,如SCG(系统时钟生成器)、PLL、各个时钟源(IRC、HSE、LSE等)。要解释系统时钟如何生成,各个模块的作用,以及配置步骤。可能还需要提到时钟切换机制和低功耗模式下的时钟行为。 用户可能对具体的寄存器配置或代码示例感兴趣,所以应该包含一些代码片段,比如如何启用HSE,配置PLL等。此外,要强调不同时钟源的优缺点,帮助用户根据应用场景选择合适的配置。 还要注意潜在的问题,比如时钟配置失败的原因,比如晶振不起振,PLL配置错误等,给出一些排查建议,比如检查硬件连接,寄存器设置是否正确,时钟监控是否启用等。 最后,确保语言通俗易懂,避免过于专业的术语,但也要准确。结构上分点说明,步骤清晰,方便用户按照步骤操作。同时,结合之前的回答,保持一致性,补充系统时钟的详细信息,帮助用户全面理解。</think>以下是关于S32K微控制器系统时钟的逐步解析,涵盖其工作原理、时钟源配置及关键特性: --- ### **一、S32K系统时钟基础** #### 1. **定义与作用** - **系统时钟(System Clock)**:S32K微控制器的核心时序基准,驱动CPU、总线(如AHB、APB)及外设(如PWM、CAN)。 - **时钟源**: - **外部时钟**:晶振(HSE/LSE)或有源振荡器 - **内部时钟**:内部RC振荡器(如Fast IRC、Slow IRC) #### 2. **时钟树结构** S32K时钟系统采用多级分频/倍频架构: ```plaintext 外部晶振 (HSE) → PLL → 分频器 → 系统时钟 (SYSCLK) 内部IRC → 分频器 → 外设时钟 RTC时钟 (LSE) → 独立低功耗域 ``` --- ### **二、系统时钟生成流程** #### 1. **时钟源选择** - **主时钟源(Primary Clock)**: - **HSE**(8-40MHz):高精度,用于高性能模式 - **Fast IRC**(48MHz或72MHz):快速启动,低精度 - **备用时钟源(Secondary Clock)**: - **Slow IRC**(8MHz):低功耗模式备用 - **LSE**(32.768kHz):RTC专用 #### 2. **PLL倍频机制** - PLL将低频输入(如8MHz晶振)倍频至更高频率: $$ f_{\text{PLL输出}} = f_{\text{输入}} \times \frac{\text{DIV}}{\text{MULT}} $$ *(具体参数需参考芯片手册)* - 示例:8MHz晶振 → PLL倍频10倍 → 80MHz系统时钟。 #### 3. **分频器配置** - 系统时钟通过分频器生成不同外设时钟: - **Core Clock**:CPU内核时钟(最高频率) - **Bus Clock**:AHB/APB总线时钟(通常为Core Clock的1/2) - **Flash Clock**:需限制频率以保证稳定性(如≤25MHz) --- ### **三、系统时钟配置步骤** #### 1. **硬件准备** - 确认外部晶振电路(XTAL引脚+负载电容,匹配频率) - 检查电源稳定性(避免时钟抖动) #### 2. **寄存器配置(以S32K144为例)** ```c // 1. 使能外部晶振(HSE) SCG->SOSCCSR |= SCG_SOSCCSR_SOSCEN_MASK; // 启用HSE while (!(SCG->SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK)); // 等待晶振稳定 // 2. 配置PLL SCG->SPLLCSR &= ~SCG_SPLLCSR_SPLLEN_MASK; // 关闭PLL SCG->SPLLDIV = 0x01; // 分频设置 SCG->SPLLCFG = SCG_SPLLCFG_MULT(40) | SCG_SPLLCFG_PREDIV(1); // 倍频参数 SCG->SPLLCSR |= SCG_SPLLCSR_SPLLEN_MASK; // 启用PLL while (!(SCG->SPLLCSR & SCG_SPLLCSR_SPLLVLD_MASK)); // 等待PLL锁定 // 3. 切换系统时钟源至PLL输出 SCG->RCCR = SCG_RCCR_SCS(6) | SCG_RCCR_DIVCORE(1); // 选择PLL,分频系数1 ``` #### 3. **时钟监控与容错** - 启用SCG的时钟丢失检测(CLKOUT引脚或中断) - 配置备用时钟自动切换(Failover机制) --- ### **四、外部时钟 vs 内部时钟性能对比** | **场景** | **外部时钟(HSE)** | **内部时钟(IRC)** | |------------------|--------------------------|--------------------------| | **启动时间** | 1-10ms(晶振起振) | <1μs | | **精度** | ±10ppm(工业级) | ±2% | | **温度稳定性** | <±0.1%/℃ | >±0.5%/℃ | | **功耗** | 较高(需驱动晶振) | 低(无外部元件) | | **适用场景** | CAN通信、高速PWM | 低功耗模式、应急时钟 | --- ### **五、常见问题与调试建议** 1. **晶振不起振** - 检查负载电容(通常15-22pF) - 降低晶振驱动强度(SCG_SOSCCFG[EREFS]寄存器) 2. **PLL锁定失败** - 确认输入频率在PLL允许范围内(参考芯片手册) - 增加PLL锁定等待时间 3. **时钟切换异常** - 确保目标时钟源已稳定(通过VLD状态位检测) - 避免在运行中直接关闭当前时钟源 --- ### **六、应用场景优化** - **汽车ECU**:HSE+PLL提供高精度时序,支持CAN FD和电机控制 - **电池供电设备**:休眠时切换至Slow IRC,降低功耗 - **实时控制**:使用时钟同步功能(TRGMUX)协调外设时序 通过合理配置S32K系统时钟,可平衡性能、功耗与可靠性,满足复杂嵌入式系统的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值