NXP S32K344 FlexIO 模擬 UART 應用講解

1.  簡介

        S32k344 具有一個 FlexIO 模塊可以模擬成 SPI、I2C、UART 等通訊協議功能,本文將從時鐘配置、FlexIO 配置、FlexIO UART 配置、主函數編寫與模擬調試等方面講解 S32K344 FlexIO 模擬 UART 功能。

2.  時鐘配置

        FlexIO 模塊時鐘被鎖定於 AIPS_PLAT_CLK 時鐘源並不可分頻,AIPS_PLAT_CLK 時鐘由 PLL PHI0 時鐘或 FIRC 時鐘經過 1-8 次分頻產生,使用工程默認時鐘分配 FlexIO 模塊時鐘為 AIPS_PLAT_CLK 時鐘經過 2 次分頻產生為 80MHz。也可以根據實際需求通過圖形化更改時鐘源與分頻係數使用其他頻率時鐘。


圖2-1 FlexIO 時鐘圖

3.  FlexIO 配置

3.1  簡介

        FlexIO 模塊在 S32DS RTD 內分為多個組件 Flexio_Uart、Flexio_Spi、Flexio_Pwm、Flexio_I2c、Lin 等組件為 FlexIO 模塊可模擬的功能,其中 Flexio_Mcl_Ip 是 FlexIO 模塊的微控制器組件,該組件是使用 FlexIO 模塊的基礎使用 FlexIO 模塊時需要將添加該組件並配置相關引腳。


圖3.1-1 FlexIO 模塊組件配置圖

3.2  引腳配置

使用 FlexIO 模塊模擬 UART 功能時需要將要使用的引腳配置成相應的 FlexIO 引腳功能。


圖3.2-1 FlexIO 模擬 UART 引腳配置圖

       以上配置將在工程內 board 文件夾下生成 Siul2_Port_Ip_Cfg.c、Siul2_Port_Ip_Cfg.h、Tspc_Port_Ip_Cfg.c 和 Tspc_Port_Ip_Cfg.h 文件。Port 模塊初始化所需要代碼生成在 Siul2_Port_Ip_Cfg.c 與 Siul2_Port_Ip_Cfg.h 文件內,其中 g_pin_mux_InitConfigArr0[NUM_OF_CONFIGURED_PINS0] 結構體為 Port 模塊初始化函數所需要變量,結構體內定義配置引腳的所有信息具體內容可在 Siul2_Port_Ip_Cfg.c 內查看。


圖3.2-2 Siul2_Port_Ip_Cfg.h



圖3.2-3 Siul2_Port_Ip_Cfg.c

3.3  Flexio_Mcl_Ip 組件配置

       添加 Flexio_Mcl_Ip 組件進行配置後需要注意在 General 配置欄內將 Enable Flexio Common Support 功能勾選,不勾選該選項 FlexIO 模塊的通用配置將無法作用於其它模擬功能組件使功能無法正常工作。


圖3.3-1 Flexio_Mcl_Ip 組件 General 配置

        FlexIO 模塊組件下 Specific Configuration 下 FlexioCommon 配置 FlexIO 模擬功能需要使用的引腳 Flexio Pin 即對應引腳配置中的 FlexIO 的通道,如不在此配置功能運行時將不會在配置的引腳產生輸出。


圖3.3-2 Flexio 引腳通道配置


圖3.3-3 Flexio 引腳通道配置

        以上配置將會在工程內的 generate 內生成相應帶有 Flexio_Mcl 名稱的頭文件與源文件,其中 Flexio_Ip_xFlexioInit 為 Mcl 模塊初始化所需要的結構體文件與 Port 模塊相似結構體具體內容可在相應的源文件內查看。

 

圖3.3-4 Flexio_Mcl_Ip_Cfg.h

3.4  Flexio_Uart 組件配置

        Flexio_Uart 組件配置中重要的為 GeneralConfiguration 和 UartGlobalConfig 配置,其中 GeneralConfiguration 配置串口超時、是否使用 DMA 功能、中斷回調函數等功能;UartGlobalConfig 配置串口波特率、鏈接配置引腳、引腳功能、發送方式等 UART 協議功能。


圖3.4-1 GeneralConfiguration 配置


圖3.4-2 UartGlobalConfig 配置


圖3.4-3 UartGlobalConfig 配置


圖3.4-4 更新生成代碼

        以上配置將會在工程內 generate 文件夾中生成帶有 Flexio_Uart 名稱的頭文件與源文件其中 Flexio 模擬 YART 初始化函數與發送數據函數所需要的結構體在 Flexio_ Uart _Ip_Sa_BOARO_InitPeripherals_PBcfg.h 內結構體相應的具體內容在相對應的源文件內查看。


圖3.4-4 Flexio_Uart_Ip_Sa_BOARO_InitPeripherals_PBcfg.h

4.  主函數編寫

        各模塊初始化與功能函數在工程內 RTD 文件夾下相對應模塊名稱的頭文件與源文件內,若使用其他版本 RTD 組件則各函數名稱會有所區別調用函數需要到相應模塊文件內查找。

#include "Mcal.h"

 

volatile int exit_code = 0;

/* User includes */

 

#include "Clock_Ip.h"

#include "Siul2_Port_Ip.h"

#include "IntCtrl_Ip.h"

#include "Flexio_Mcl_Ip.h"

#include "Flexio_Uart_Ip.h"

//包含外部頭文件

 

ISR(MCL_FLEXIO_ISR);//FlexIO 中斷函數

 

#define flexiouarttx 0

#define flexiouartrx 1//定義 FlexIO 模擬 UART 接口,需與 MCL 模塊定義通道一致

 

#define timeout 0xFFFFFFFF//定義超時計數

 

char flexiouarttxbuffer[]="hello world\n";//FlexIO 模擬 UART 發送數據緩衝區

uint8 flexiouartrxbuffer[4];//FlexIO 模擬 UART 接收數據緩衝區

uint32_t remainingByte=0;

 

int main(void)

{

    /* Write your code here */

   Clock_Ip_Init(&Clock_Ip_aClockConfig[0]);//時鐘初始化函數

 

Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS0,&g_pin_mux_InitConfigArr0[NUM_OF_CONFIGURED_PINS0]);//引腳初始化函數

 

   IntCtrl_Ip_Init(&IntCtrlConfig_0);//中斷初始化函數

   IntCtrl_Ip_ConfigIrqRouting(&intRouteConfig);//中斷配置函數

 

Flexio_Mcl_Ip_InitDevice(&Flexio_Ip_xFlexioInit);//FlexIO 模塊 MCL 組件初始化函數

 

Flexio_Uart_Ip_Init(flexiouarttx,&Flexio_Uart_Ip_xHwConfigPB_0_BOARD_INITPERIPHERALS);//FlexIO 模擬 UART TX 初始化函數

Flexio_Uart_Ip_Init(flexiouartrx,&Flexio_Uart_Ip_xHwConfigPB_1_BOARD_INITPERIPHERALS);//FlexIO 模塊 UART RX 初始化函數

 

Flexio_Uart_Ip_SyncSend(flexiouarttx,(uint8*)&flexiouarttxbuffer,11,timeout);//FlexIO 同步發送數據函數

while(FLEXIO_UART_IP_STATUS_BUSY==Flexio_Uart_Ip_GetStatus(flexiouarttx,&remainingByte)){};//等待發送完成

 

    for(;;)

    {

    Flexio_Uart_Ip_AsyncReceive(flexiouartrx,flexiouartrxbuffer,4);//FlexIO 異步接收數據函數接收數據長度為 4

    while(FLEXIO_UART_IP_STATUS_BUSY==Flexio_Uart_Ip_GetStatus(flexiouartrx,&remainingByte)){};//等待接收完成

 

    Flexio_Uart_Ip_SyncSend(flexiouarttx,(uint8*)&flexiouartrxbuffer,4,timeout);//FlexIO 同步發送數據函數

  while(FLEXIO_UART_IP_STATUS_BUSY==Flexio_Uart_Ip_GetStatus(flexiouarttx,&remainingByte)){};//等待發送完成

 

        if(exit_code != 0)

        {

            break;

        }

    }

    return exit_code;

}

5.  調試測試

       將上文主函數進行編譯生成 .elf 文件並調試下載進入 S32K344EVB 內部進行調試測試並使用串口調試助手連接相應引腳接收 MCU 發送數據。

圖5-1 串口調試助手接收數據

        由於篇幅所限本文僅介紹 S32K344 FlexIO 模塊部分內容,如想了解更多資料與設計,請聯繫我們 atu.sh@wpi-group.com

6.  參考文獻

[1] S32K3XX Reference Manual.pdf,NXP

[2] S32K3XX Data Sheet.pdf,NXP

 

 歡迎在博文下方留言評論,我們會及時回復您的問題。

如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com   
作者:Hobo


更多資訊,請掃碼關注我們!


★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論