S32K3学习笔记:深入探究S32K3的MCU模块

S32K3学习笔记—S32K3之MCU模块

文章目录

  • S32K3学习笔记—S32K3之MCU模块
  • 1、前言
  • 2、模块作用
  • 3、EB配置
  • 3.1.通用配置
  • 3.2.时钟配置
  • 3.3.模式配置
  • 3.4.其他
  • 3.5 展望
  • 1、前言

    ​ 后续关于MCAL的配置都是基于EB29.0,RTD3.0的配置,MCU是基于S32K324。前期312、344也都使用过,也是第一次使用NXP的多核,后续将记录各个模块学习过程。

    环境安装及参考资料如下:

    ​ 芯片手册:S32K3XXRM.pdf

    ​ EB工具 :EB29.0安装包

    ​ RTD及demo路径:RTD3.0和Demo

    ​ EB安装步骤:该博主写的很详细,参考一下[S32K3从0入门]NXP S32K3 环境安装及配置

    2、模块作用

    ​ 对于刚开始接触MCAL来讲,MCU模块算是比较基础且重要的一个模块,因为基本上所有的外设都和MCU模块相关联。此模块很大如果不搞清楚可能导致很多问题,因此单独记录一下这个模块。MCU模块最主要的作用就是配置时钟、设置工作模式等。此模块主要是根据芯片手册来配置,一定要多看芯片手册

    3、EB配置

    ​ 关于这个模块的配置,可以按照以下顺序来进行配置。先分总的几个大类时钟源,再具体到某些特定的模块。否则要做很多无用功。

    3.1.通用配置

    ​ 对于不同模块的general都差不多是使能一些API,整个模块的通用配置啥的,如果没啥特殊需求就按照demo来配置就好

    10

    1.对于时钟源,我们不用的就需要失能,比如SXOCS如果不失能,会影响GPI功能

    2.如果我们需要对多核做些操作,需要使能Core Boot Address Control


    image-20231104122402773

    1.这个模块主要是外部晶振配置,按照实际项目修改就好了

    3.2.时钟配置

    ​ 根据芯片手册第六章Clocking得知,MCU的时钟源可由FIRC、SIRC、FXOCS、SXOCS、(锁相环)PLL生成,这些时钟都可以按照手册推荐的配置。下面是这几种时钟源的配置

    image-20231029193242381

    image-20231029004722030

    1.如果FIRC在MCU控制下,则将其设置为TRUE。如果为FALSE,则MCU驱动程序将不会写入相应的寄存器

    2、3.根据FIRC时钟分频因子,就可以得到时钟频率

    4.是否支持standby模式使用

    image-20231029005420494

    1.这个是特定的,供其他参考时钟使用,如果没用到,可以失能

    image-20231029005918330

    1.默认使能晶振功能。如果我们需要用到GPI功能的IO,一定要失能该功能,否则功能不正常

    2.指定了“计数值结束”,用于在重置后或开启时由振荡器稳定计数器进行比较。

    3、4. 晶振断电控制,使能需要外接晶振

    接下来就是PLL时钟的配置。

    image-20231105055047251
    image-20231105055144929

    image-20231105053320627
    image-20231105053600153

    1.使能PLL时钟

    3.调制类型选择-以标称频率为中心

    4.StepSize = [McuPllFdMdp * (Mfi + McuPllFdMfn / 18432) * 18432] / (100 * McuPllFmStepNo).

    5.StepNo=McuPllClockSelection)/(2McuPllFdFmodMcuPllDvRdiv)

    6、7、8.使能PHI0、PHI1,并设置分频系数

    9、2. PLL_VCO = 16M/2*120 = 960M

    ​ PLL_PHI0 = 960M / ( 5 + 1) = 160M

    ​ PLL_PHI1 = 960M / ( 5 + 1) = 160M

    ​ 接下来关于MC_CGM mux 0 clocks的时钟树,在EB里面选择时钟来源,和选择对应的分频系数得到我们所需要的频率就好。

    image-20231029194537024

    image-20231029194751575

    1.选择时钟源,按需选择,我此处选择PLL_PHI0_CLK

    2.从PLL_PHI0_CLK 给到CORE_CLK的时钟需要的分频系数

    3.默认Common trigger divider update,两种触发更新手册有详细的介绍,包括具体流程

    4.PLL_PHI0_CLK时钟/分频系数 = 你需要的频率

    其他的几个时钟也是类似,按照芯片手册设置好分频系数就行

    ​ 从McuCgm0ClockMux1 到McuCgm0ClockMux11的配置都一样,我们只需要选择对于的时钟来源,设置好分频系数得到我们想要的频率就好。

    image-20231104094807002

    image-20231104095126869

    1.选择STM0_CLK的时钟源,从芯片手册看有三个FXOSC_CLK、FIRC_CLK、AIPS_PLAT_CLK

    2.使能STM0_CLK时钟输出

    3、4.根据你需要的频率去配置分频系数

    ​ 在配置完MCU模块之后,就需要将这些时钟给到其他模块使用,EB里面是在McuClockReferencePoint里面操作,类似于索引

    image-20231030003538697

    此处的时钟参考点是和其他模块建立连接的,可以根据具体用到哪个模块来添加对应的时钟参考点。

    ​ 至此,MCU的时钟树配置基本完成,对于S32K3的时钟有个大的了解,之后在新增模块啥的,也知道怎么去配置时钟。主要是提供一种思路,具体细节还需要多看手册,具体到需求去配置。

    3.3.模式配置

    ​ S32K3模式有两种,正常模式和低功耗模式,主要看MCU休眠方案,一般MCU断电就可不考虑低功耗模式,下面介绍一种正常工作的配置,低功耗模式后续再记录

    1.选择工作模式: RUN

    2.只有在 Mode为SOC_STANDBY才可以选择主核

    3.是否使能锁步核,该配置只用古S32K39X

    image-20231104111947643

    1.使能Partition0的所有配置

    2.CM7_0默认配置,不受MCU控制

    3、4、5 :主要是从核的启动流程决定的,使能CM7_1时钟以及启动地址

    ​ 外设时钟使能,这个地方很容易遗忘,前期在刚开始配置的时候可以全部外围时钟先使能,负载率会高点而已,等后期将负载率或优化的时候把不用的外围时钟再使能。本人前期再此犯过错,最后调试的时候看寄存器发现时钟没使能,挺难查的。

    3.4.其他

    ​ 有些比较细节的东西都是犯过错才总结出来的。如果用到高速的时钟我们需要使能LMAUTOEN,不使能可能导致大量的热量积攒导致MCU烧掉,这个NXP论坛也是提出了解决方案。具体参考如下:S32K344 Last Mile Regulator

    image-20231104121008239

    image-20231104121209262

    1.RTD3.0是支持单独使能LMAUTOEN的,此处使能就好了,如果不支持就像论坛那样,不进行电源管理初始化,给到默认值就行

    3.5 展望

    ​ MCU模块很庞大,有很多的配置项启动没有用过,只能说后续有需要再继续研究。一般都是在出问题之后去查芯片手册,然后解决问题。

    ​ 后续将不会单独的以一个模块来记录,感觉这样比较空旷,不便于理解,后续将以实现某功能来记录各个模块。

    物联沃分享整理
    物联沃-IOTWORD物联网 » S32K3学习笔记:深入探究S32K3的MCU模块

    发表评论