一、新建工程
可參考往期推文:S32K344 VCU實(shí)戰(zhàn)項(xiàng)目之帶你入門篇
二、引腳配置
此實(shí)例選擇串口13進(jìn)行配置:
三、外設(shè)配置
添加外設(shè):
配置串口信息1:
配置串口信息2(回調(diào)函數(shù)):
中斷外設(shè)配置:
配置完畢后更新代碼。
四、部分代碼展示
/**
* @brief UART_13回調(diào)函數(shù)
*
* 該函數(shù)作為L(zhǎng)PUART_13的中斷服務(wù)程序使用,根據(jù)接收到的事件類型執(zhí)行相應(yīng)的處理邏輯。
* 主要功能包括處理接收緩沖區(qū)滿和發(fā)送緩沖區(qū)空的事件,以及相應(yīng)的數(shù)據(jù)傳輸邏輯。
*
* @param HwInstance 硬件實(shí)例標(biāo)識(shí),此處忽略
* @param Event 事件類型,指示當(dāng)前中斷的原因
* @param UserData 用戶數(shù)據(jù),此處忽略
*/
void UART_13_Callback(const uint8 HwInstance, const Lpuart_Uart_Ip_EventType Event, void *UserData)
{
(void)HwInstance; // 避免未使用參數(shù)編譯警告
(void)UserData; // 避免未使用參數(shù)編譯警告
switch(Event)
{
case LPUART_UART_IP_EVENT_RX_FULL: // 接收緩沖區(qū)滿事件
{
// 檢查是否收到換行符或接收緩沖區(qū)即將溢出
if ((rxBuffer[rxBufferIdx] != 'n') && (rxBufferIdx != (BUFFER_SIZE - 2U)))
{
// 繼續(xù)接收下一個(gè)字符
rxBufferIdx++;
Lpuart_Uart_Ip_SetRxBuffer(LPUART_UART_IP_INSTANCE_USING_13,&rxBuffer[rxBufferIdx],1U);
}
else
{
// 將接收緩沖區(qū)的數(shù)據(jù)復(fù)制到發(fā)送緩沖區(qū),并初始化接收緩沖區(qū)
memcpy(txBuffer,rxBuffer,rxBufferIdx+1);
Lpuart_Uart_Ip_AsyncSend(LPUART_UART_IP_INSTANCE_USING_13,txBuffer,1);
txBufferIdx++;
memset(rxBuffer,0,rxBufferIdx+1);
test = rxBufferIdx + 1;
rxBufferIdx = 0;
Lpuart_Uart_Ip_SetRxBuffer(LPUART_UART_IP_INSTANCE_USING_13,&rxBuffer[rxBufferIdx],1U);
};
}break;
case LPUART_UART_IP_EVENT_TX_EMPTY: // 發(fā)送緩沖區(qū)空事件
{
// 檢查是否所有數(shù)據(jù)都已發(fā)送
if(txBufferIdx > test - 1)
{
// 重置發(fā)送緩沖區(qū)索引
txBufferIdx = 0;
}
else
{
// 繼續(xù)發(fā)送下一個(gè)字符
Lpuart_Uart_Ip_SetTxBuffer(LPUART_UART_IP_INSTANCE_USING_13,&txBuffer[txBufferIdx++],1U);
}
}break;
case LPUART_UART_IP_EVENT_END_TRANSFER: // 傳輸結(jié)束事件
{
// 此處可添加傳輸結(jié)束后的處理邏輯
}break;
case LPUART_UART_IP_EVENT_ERROR: // 錯(cuò)誤事件
{
// 此處可添加錯(cuò)誤處理邏輯
}break;
default:
{
// 處理未知事件
}break;
}
}
五、注意事項(xiàng)
此處注意前文提到的一個(gè)回調(diào)的配置,應(yīng)調(diào)用此處的回調(diào)函數(shù)。
歡迎轉(zhuǎn)發(fā)分享給需要的好友!
微信號(hào):zls_it