S32K144解锁后不能用

S32K144解锁成功后,还是无法连接,无法进行擦除,有没有兄弟知道怎么处理的

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 请看👉 :S32K144异常处理代码的编译问题分析
  • 除此之外, 这篇博客: S32K144之寄存器工程LED_S32K144中的 S32K144之寄存器工程LED_S32K144 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    S32K144 NXP原厂提供了很完善的SDK包,几乎涵盖了客户所能用到的全部底层驱动,基于Processer Expert代码生成组件,可以通过GUI配置之后很方便的生成代码。
    但是撸寄存器一直是弱项,也一直想找个机会进行锻炼,基于此,原厂也只提供了很少一部分寄存器的底层驱动代码,所以在此当做记录以及督促自己。
    玩板子的第一步,点亮LED灯,基于S32 Design Studio for ARM Version 2.2开发环境的工程附上:链接:https://pan.baidu.com/s/1PREbi_cfN70L6gHaDrdw-A 提取码:jw3b

    1、时钟配置代码,这个直接用的现成代码

    /*
     * clk.c
     */
    #include "CLK.h"
    #include "s32k144.h"
    
    
    
    void SOSC_init_8MHz(void) {
      SCG->SOSCDIV=0x00000101;  /* SOSCDIV1 & SOSCDIV2 =1: divide by 1 */
      SCG->SOSCCFG=0x00000024;  /* Range=2: Medium freq (SOSC betw 1MHz-8MHz)*/
                                /* HGO=0:   Config xtal osc for low power */
                                /* EREFS=1: Input is external XTAL */
      while(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK); /* Ensure SOSCCSR unlocked */
      SCG->SOSCCSR=0x00000001;  /* LK=0:          SOSCCSR can be written */
                                /* SOSCCMRE=0:    OSC CLK monitor IRQ if enabled */
                                /* SOSCCM=0:      OSC CLK monitor disabled */
                                /* SOSCERCLKEN=0: Sys OSC 3V ERCLK output clk disabled */
                                /* SOSCLPEN=0:    Sys OSC disabled in VLP modes */
                                /* SOSCSTEN=0:    Sys OSC disabled in Stop modes */
                                /* SOSCEN=1:      Enable oscillator */
      while(!(SCG->SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK)); /* Wait for sys OSC clk valid */
    }
    
    void SPLL_init_160MHz(void) {
      while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); /* Ensure SPLLCSR unlocked */
      SCG->SPLLCSR = 0x00000000;  /* SPLLEN=0: SPLL is disabled (default) */
      SCG->SPLLDIV = 0x00000302;  /* SPLLDIV1 divide by 2; SPLLDIV2 divide by 4 */
      SCG->SPLLCFG = 0x00180000;  /* PREDIV=0: Divide SOSC_CLK by 0+1=1 */
                                  /* MULT=24:  Multiply sys pll by 4+24=40 */
                                  /* SPLL_CLK = 8MHz / 1 * 40 / 2 = 160 MHz */
      while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); /* Ensure SPLLCSR unlocked */
      SCG->SPLLCSR = 0x00000001; /* LK=0:        SPLLCSR can be written */
                                 /* SPLLCMRE=0:  SPLL CLK monitor IRQ if enabled */
                                 /* SPLLCM=0:    SPLL CLK monitor disabled */
                                 /* SPLLSTEN=0:  SPLL disabled in Stop modes */
                                 /* SPLLEN=1:    Enable SPLL */
      while(!(SCG->SPLLCSR & SCG_SPLLCSR_SPLLVLD_MASK)); /* Wait for SPLL valid */
    }
    
    
    void clk_init()
    {
    
    	SCG->RCCR=SCG_RCCR_SCS(6)      /* PLL as clock source*/
    	    |SCG_RCCR_DIVCORE(0b01)      /* DIVCORE=1, div. by 2: Core clock = 160/2 MHz = 80 MHz*/
    	    |SCG_RCCR_DIVBUS(0b01)       /* DIVBUS=1, div. by 2: bus clock = 40 MHz*/
    	    |SCG_RCCR_DIVSLOW(0b10);     /* DIVSLOW=2, div. by 2: SCG slow, flash clock= 26 2/3 MHz*/
    	  while (((SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT ) != 6) {}
    	                                 /* Wait for sys clk src = SPLL */
    
    }
    
    

    2、gpio初始化

    /*
     * gpio.c
     *
     *  Created on: 2020年6月10日
     *      Author: Administrator
     */
    #include "s32k144.h"
    #include "S32K144_features.h"
    #include "gpio.h"
    
    
    void gpio_init()
    {
    
    
    	PCC->PCCn[PCC_PORTD_INDEX] |= PCC_PCCn_CGC_MASK;
    
    	  PORTD->PCR[PTD0]  =  0x00000100;  /* Port D0: MUX = GPIO */
    	  PORTD->PCR[PTD15] =  0x00000100;  /* Port D15: MUX = GPIO */
    	  PORTD->PCR[PTD16] =  0x00000100;  /* Port D16: MUX = GPIO */
    
    	  PTD->PDDR |= 1<<PTD0;       	  /* Port D0:  Data Direction= output */
    	  PTD->PDDR |= 1<<PTD15;          /* Port D15: Data Direction= output */
    	  PTD->PDDR |= 1<<PTD16;          /* Port D16: Data Direction= output */
    
    	  PTD->PSOR |= 0XFFFFFFFF;
    }
    
    

    3、main函数点灯

    /*
     * main.c              Copyright NXP 2016
     * Description:  Simple program to exercise ADC.
     * Use potentiometer on board to turn on RGB led
     * 2016 Jul 16 Osvaldo Romero: Initial version
     * 2016 Oct 31 SM: Clocks adjusted for 160 MHz SPLL
     * 2017 Jun 30 SM  Split adcResultInMv into separate global variables
     */
    
    #include "S32K144.h" /* include peripheral declarations S32K144 */
    #include "gpio.h"
    #include "CLK.h"
    
    
      uint32_t adcResultInMv_pot = 0;
      uint32_t adcResultInMv_Vrefsh = 0;
    
    void delay(uint32_t i)
    {
    	while(i--);
    }
    
    
    
    int main(void)
    {
      SOSC_init_8MHz();      /* Initialize system oscillator for 8 MHz xtal */
      SPLL_init_160MHz();    /* Initialize SPLL to 160 MHz with 8 MHz SOSC */
      clk_init();
      gpio_init();		     /* Init  port clocks and gpio outputs */
    
    
      for(;;) {
    
    	      PTD->PCOR |= 1<<PTD0;       	  /* Port D0:  blue */
    	      delay(0xfffff);
    	      PTD->PSOR |= 1<<PTD0;
    
    	      PTD->PCOR |= 1<<PTD15;       	  /* Port D15:  red */
    	      delay(0xfffff);
    	      PTD->PSOR |= 1<<PTD15;
    
    	      PTD->PCOR |= 1<<PTD16;       	  /* Port D16:  green */
    	      delay(0xfffff);
    	      PTD->PSOR |= 1<<PTD16;
    
      }
    }
    
    

    在这里需要说明一点,工程中的APP文件夹是我新添加的,如果自己新建工程需要把这个APP编译路径添加进去,不然会报错,添加操作如下:
    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^