开发板测评系列二 | NXP S32K312 RTD LLD 串口简易操作

NXP S32K312 RTD LLD串口简易操作

串口shell交互在现在程序里也扮演重要作用如无线模块的射频参数校准,本文就以UART来进行简易交互。

一、工程初始化

首先要清楚UART模块必然会有Port、DIO、UART、IntCtrl,故新建工程后逐个来配置。打开《S32K3xx Reference Manual》在左侧目录书签的附件栏可以看到很多有用Excel表格,在其中找到《S32K312_IOMUX.xlsx》,

翻看原理图可以看到PTC2是LPUART0_RX,PTC3是LPUART0_TX或者查看IOMUX表格的“S32K312 Pinout”页,切到Pins页进行方向、功能配置,也可把标签改个名字,

切到外设页,需要添加DIO、UART、IntCtrl模块即第一功能、第二复用功能、中断配置项,在外设页组件栏,配置Port的属性因为有两个引脚需要在PortContainer下PortPin依次添加两项,而关键管脚编号Mscr需要查IOMUX表格的“S32K312_IO Signal Table”页,可以查看到PTC2是SIUL_MSCR66,PTC3是SIUL_MSCR67,

故在Port组件栏也是如此配置第一功能LPUART0_TX和LPUART0_RX DIO口,

然后就是类似STM32程序一样开始配置第二复用功能UART包括波特率、校验、字长、停止位数等,

然后就是类似STM32的NVIC中断矢量配置,因为PTC2和PTC3属于LPUART0,故中断矢量类型是LPUART0_IRQ0,ISR对应也设成LPUART_UART_IP_O_IRQHandler,

做完这些就可以更新生成源码了。

二、编码测试

在工程下面生产了很多配置源码,主要用到RTD接口如下:

rtd/src:clock_ip.c:Clock_Ip_Init

rtd/src/lpuart_uart_ip.c:Lpuart_Uart_Ip_Init/Lpuart_Uart_Ip_AsyncSend/Lpuart_Uart_Ip_AsyncReceive

rtd/src/intctrl_ip.c:IntCtrl_Ip_Init

rtd/src/siul2_port_ip.c:Siul2_Port_Ip_Init

rtd/src/siul2_dio_ip.c:Siul2_Dio_Ip_TogglePins

在main.c 添加以下代码:

#include "Mcal.h"

#include "Lpuart_Uart_Ip.h"

#include "Lpuart_Uart_Ip_Irq.h"

#include "Clock_Ip.h"

#include "IntCtrl_Ip.h"

#include "Siul2_Port_Ip.h"

#include "string.h"



uint8 TX_Buffer[]="Hello S32K312!\r\n";

uint8 RX_Buffer[50];



#define UART_LPUART0_INTERNAL_CHANNEL 0

volatile int exit_code = 0;

int main(void)

{

    /* Write your code here */

    uint16 len=0;

   Clock_Ip_Init(&Clock_Ip_aClockConfig[0]);



Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS_PortContainer_0_BOARD_InitPeripherals,g_pin_mux_InitConfigArr_PortContainer_0_BOARD_InitPeripherals);



    IntCtrl_Ip_Init(&IntCtrlConfig_0);



Lpuart_Uart_Ip_Init(UART_LPUART0_INTERNAL_CHANNEL, &Lpuart_Uart_Ip_xHwConfigPB_0);



Lpuart_Uart_Ip_AsyncSend(UART_LPUART0_INTERNAL_CHANNEL,TX_Buffer, sizeof(TX_Buffer));

//Lpuart_Uart_Ip_AbortSendingData(UART_LPUART0_INTERNAL_CHANNEL);



    for(;;)

    {

    Lpuart_Uart_Ip_AsyncReceive(UART_LPUART0_INTERNAL_CHANNEL,RX_Buffer,20);



       if(strcmp((char *)RX_Buffer,"chip")==0)

       {

           len=sizeof("S32K312");

           memcpy(TX_Buffer,"S32K312",len);

       Lpuart_Uart_Ip_AsyncSend(UART_LPUART0_INTERNAL_CHANNEL,TX_Buffer, len);

       Lpuart_Uart_Ip_AbortReceivingData(UART_LPUART0_INTERNAL_CHANNEL);

           memset(RX_Buffer,0,sizeof(RX_Buffer));

       }

       if(strcmp((char *)RX_Buffer,"fac")==0)

       {

           len=sizeof("NXP");

           memcpy(TX_Buffer,"NXP",len);

       Lpuart_Uart_Ip_AsyncSend(UART_LPUART0_INTERNAL_CHANNEL,TX_Buffer, len);

       Lpuart_Uart_Ip_AbortReceivingData(UART_LPUART0_INTERNAL_CHANNEL);

           memset(RX_Buffer,0,sizeof(RX_Buffer));

       }

    }

    return exit_code;

}

然后还是按照第1篇环境搭建教程所说点击编译再仿真就能看到实际运行效果,如输入“chip”,S32K312回复“S32K312”,输入“fac”,S32K312回复“NXP”等等类似,

此文章来自“S32K312 开发板评测活动”测评者:明祥軍

欢迎在博文下方留言评论,我们会及时回复您的问题。

如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com   作者:WPIg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值