S32K项目开发

项目流程心得:
重点内容本次项目是在整车控制器上面的一些看法与感受:其中包括以下几点归纳:
-对产品来说明确需求的归纳和总结非常总要。对应电动车的功能需求举几个例子:

1》联合制定关于各模块之间的通讯协议“CAN协议”,“SPI通信协议”,“USART串口通讯协议”,对于制定通讯协议来说需要具备以下特点:结构:简单整洁,数据内容:无冗余,同时保证状态反馈。
2》前期对硬件或软件的辅助文档不能少,同时必须要求多人评审,已减少后续修改。
3》使用的开发平台是“S32 Design Studio for ARM v2.0”说实话这个平台的工程移植,和调试还是很方便的,但是因为使用的人不多,所以网上的资料很少,有时平台出了问题也不知道是什么问题,我一般碰到这种问题,最简单的方法就是重启一下电脑。
S32K项目开发_第1张图片
-对S32K系列单片机使用:使用文档是S32K-RM
S32K项目开发_第2张图片
关于S32K的介绍我这里就介绍一下我使用的功能:
1》PORT引脚功能定义复用功能参考数据手册:“S32K144 IO_Signal_Description_Input_Multiplexing”对应的是S32K144的每个引脚的复用功能。同时对照这个你就知道怎么初始化配置引脚了。
S32K项目开发_第3张图片
软件例程参考“hello_interrupts”这个官方例程里面只有对PORT最基本的操作,如果你需要使用中断,就需要配置这个寄存器,同时还有相关的时钟,中断优先级的问题。
S32K项目开发_第4张图片
在中断函数里面:需要对这个寄存器置一,注意:不是清零,不是清零,不是清零重要的东西说三遍,当初在这个上面搞得头都大了。相当于是对中断标志位清零。
S32K项目开发_第5张图片
2》ADC模块的配置对引脚的配置与PORT不一样,每一个ADCx&&CHx都对应着一个不同的引脚,可以通过查找“S32K144 IO_Signal_Description_Input_Multiplexing”知道每个管脚对应哪个ADC模块的通道。
在S32K官方给出的ADC模块的例子上,它是用其他的模块通道映射到ADC0&&CH0这个固定通道采集的数据,如果你要同时采集几个引脚的数据,我不建议使用例程上面的方法。有一种使用PDB模块的方法可以同时采集几路ADC通道数据,但是我没有时间去验证了。现在就将就用吧。
S32K项目开发_第6张图片
关于PDB模块的结构框图:
S32K项目开发_第7张图片
3》FTM高级定时器:对于FTM模块的功能我所使用的是“pwm改变占空比改变频率”,其他的主要功能还有:输入捕捉,输出比较。这两个高级大佬我暂时还搞不清楚怎么用。对于PWM波的控制:在官方给的FTM例程里面有主要是配置FTM的通道号和占空比值。

void FTM0_CH1_PWM_init(void) {
  FTM0->CONTROLS[1].CnSC = 0x00000028;  /* FTM0 ch1: edge-aligned PWM, low true pulses */
                                        /* CHIE (Chan Interrupt Ena) = 0 (default) */
                                        /* MSB:MSA (chan Mode Select)=0b10, Edge Align PWM*/
                                        /* ELSB:ELSA (chan Edge/Level Select)=0b10, low true */
  FTM0->CONTROLS[1].CnV =  46875;       /* FTM0 ch1 compare value (~75% duty cycle) */
}

4》低功耗:对于S32K的低功耗要求我是直接睡眠软件实现是通过:

/*
 * 睡眠模式
 */
void sleep(void)
{
    /*
     * enabled sleep bit in the core
     * allow deep sleep modes
     */
    S32_SCB ->SCR|=S32_SCB_SCR_SLEEPDEEP_MASK;
    /*
     * select stop mode
     */
    SMC->PMCTRL=SMC_PMCTRL_STOPM(0b00);
    /*
     * allow VLPR or VLPS
     */
    //SMC->PMPROT=SMC_PMPROT_AVLP(0b01);

    /*
     * select which STOP mode (stop1 or stop2)
     * is desired (stop1-0b01,stop2-0b10)
     */
    SMC->STOPCTRL=SMC_STOPCTRL_STOPO(0b01);
    /*
     * check if current mode is RUN mode
     */
    if(SMC -> PMSTAT ==0X01)
    {
        /*
         * GO to deep sleep mode
         */
        asm("WFI");
    }
}

对于S32K144的模式有五种分别是:正常运行(RUN),超频运行(HSRUN),停止模式(STOP),低功耗模式(VLPR),睡眠模式(VLPS)各个状态之间的跳转框图:
S32K项目开发_第8张图片

5》对于S32K系列的LPSPI,LPUSART,LPI2C,FLEXCAN.这几个通信模块真TM的烦搞得人想去炸五角大楼。其实难不是很难,就是很难找到问题原因,对这几个模块给出的建议是:首先分别测试单个模块,用示波器捕捉时序波形。有波形才是跨过沟壑的第一步。
具体实现的话在以后有时间具体说明。

今天第一次写博客,心情是非常的٩(๑>◡<๑)۶,厉害了我的锅。大家有钱的捧个钱场,没钱的捧个人场。本人小白,如果以上内容有不正确的地方,希望大家指出来,共同学习。

你可能感兴趣的:(项目经验)