一、前言

啊哈,又是我,新年快樂啊!!這一次給大家寫一下後續帖子將會一直使用到的串口的配置教程,這裡配置需要用到上次的pin配置方法,以及新的知識點IntCtrl_Ip、Siul2_Port、Lpuart_Uart以及時鐘樹的配置。話不多說直接開始。
二、配置步驟
1、配置PIN
通過原理圖可知本次拿到手的開發板上面的串口PIN為PTC2(RX)、PTC3(TX)。
根據上一次PIN配置教程直接將他們配置為串口:
最後兩個是標籤和標識符的名字,同樣和上一次一樣,建議命名為一模一樣的和功能的名稱。(因為開發板這邊引出的是uart0,所以這邊建議的話命名的話用uart0命名啊,不要像我這樣直接一個串口的單詞)
2、外設驅動添加
點擊IDE右上角
外設標誌,來進行添加相關外設的驅動庫。
點擊Driver旁邊的加號,然後添加對應的外設驅動,也就是我圖片中的Driver下面的那幾個。
3、Lpuart_Uart配置
這個名字想必一看就知是專門用來配置串口的。你在添加Driver的時候應該也能看到其他的驅動庫函數,那些函數的話我這一次沒做詳細的研究,感興趣的話可以自己去研究一下,這邊的話我們就用最容易操作的Lpuart來講解這一次。
3.1 雙擊Driver下面的Lpuart_Uart進入配置頁面。
3.2 按照下圖順序依次配置。其中步驟三中的波特率根據自己的需求更改,這邊我選擇的是115200。
3.3 這裡這個是配置uart超時間隔,us單位,用於同步傳輸的超時時間設置。
4、IntCtrl_Ip配置
這個是用來配置中斷的,本次代碼沒有使用到,但是可以先了解一下。
這裡配置的時候需要注意一下Handler欄位的命名要和圖片一致。那個零是中斷優先級數字越小優先級越高,這邊的話可以根據自己的需求進行配置。
5、Siul2_Port配置
這裡紅框裡面配置根據PTC2、PTC3的編號填入:
分別設置兩pin的配置(+是添加)
6、時鐘樹配置
將SCS_CLK的時鐘輸入源切換到FIRC,其他配置如上圖配置即可。
三、操作API介紹
1、串口發送函數
Lpuart_Uart_Ip_StatusType Lpuart_Uart_Ip_AsyncSend(const uint8 Instance,
const uint8 * TxBuff,
const uint32 TxSize)
三個參數分別為:
- const uint8 Instance, // UART 實例編號
- const uint8 * TxBuff, // 要發送的數據緩衝區
- const uint32 TxSize // 要發送的數據大小
其中Instance UART 實例編號為串口號,比如我們這一次用的是串口0所以值為0。
2、串口接收函數
Lpuart_Uart_Ip_StatusType Lpuart_Uart_Ip_AsyncReceive(const uint8 Instance,
uint8 * RxBuff,
const uint32 RxSize)
三個參數分別為:
- const uint8 Instance, // UART 實例編號
- const uint8 * RxBuff, // 數據緩衝區
- const uint32 RxSize // 數據大小
#include "Mcal.h"
#include "Siul2_Port_Ip.h"
#include "Siul2_Dio_Ip.h"
#include "Lpuart_Uart_Ip.h"
#include "Lpuart_Uart_Ip_Irq.h"
#include "Clock_Ip.h"
#include "IntCtrl_Ip.h"
#include "string.h"
#define UART_LPUART0_INTERNAL_CHANNEL 0
#define MSG "Helloworld!\r\n"
volatile int exit_code = 0;
uint8 RX_Buffer[50];
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);
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,(const uint8 *)MSG, strlen(MSG));
//Lpuart_Uart_Ip_AsyncReceive(UART_LPUART0_INTERNAL_CHANNEL,RX_Buffer,1);
for(;;)
{
}
return exit_code;
}
結果如下:
此文章來自“S32K312 開發板評測活動”測評者:付楚楚
歡迎在視頻下方留言評論,我們會及時回復您的問題。
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:WPIg
更多資訊,請掃碼關注我們!
評論