上篇【S32K 進(jìn)階之旅】系列博文介紹了 S32K 中的 LPUART 模塊,并以 S32DS 開發(fā)環(huán)境中自帶的例程 LPUART_s32k144 為例,使用 S32K144-EVB 評估板燒錄進(jìn)行了演示。為了幫助新手快速的入門 LPUART 模塊,本文將逐句解析例程 LPUART_s32k144
一、 串口初始化:void LPUART_init(void)
1. 開啟時鐘

初始化確保時鐘關(guān)閉。
查詢 S32K144 參考手冊,設(shè)置 LPUART 時鐘源為 SOSCDIV2_CLK(0b001),并使能時鐘。


2. LPUART1->BAUD:LPUART波特率寄存器
用于配置串口波特率。

下圖為 32 位寄存器 BAUD 的圖表:

LPUART BAUD寄存器
通過查詢 LPUART BAUD 寄存器位功能可知:波特率=baud clock / ((OSR+1) * SBR)。baud clock為 SOSCDIV2_CLK= 8 MHz,OSR 默認(rèn)值為F=15,則可以算出波特率為 9600 時,SBR的值約為 52,即 0x34。不使用BAUD寄存器的其他功能,則給 BAUD 寄存器賦值0x0F000034。

3. LPUART->CTRL:LPUART 控制寄存器
控制 LPUART 系統(tǒng)的多種可選特性,只有在發(fā)送器和接收器被禁止時才可以更改。

根據(jù)下圖32 位寄存器 CTRL 的圖表可知:TE=1,RE=1(0x000C0000)

LPUART CTRL寄存器
查寄存器字段知:設(shè)置收發(fā)使能,8-bit數(shù)據(jù)位,1-bit停止位,無校驗位,不使用中斷功能。

二、 功能函數(shù)
1. 發(fā)送單字符:void LPUART1_transmit_char(char send)

下圖為 32 位寄存器 STAT 的圖表:

LPUART STAT寄存器
已知:LPUART_STAT_TDRE_MASK=0x800000u,LPUART_STAT_TDRE_SHIFT=23u
函數(shù)功能:在發(fā)送器緩沖器空的時候,將 send 代表的數(shù)據(jù)放入 LPUART->DATA 中發(fā)送。

2. 字符串發(fā)送函數(shù):void LPUART1_transmit_string(char data_string[])
函數(shù)功能:通過循環(huán)調(diào)用 LPUART1_transmit_char函數(shù)發(fā)送單個字符直到檢測到字符串結(jié)尾‘\0’,來實現(xiàn)發(fā)送字符串的功能。
3. 單字符接收函數(shù):char LPUART1_receive_char(void)

已知:LPUART_STAT_RDRF_MASK=0x200000u;LPUART_STAT_RDRF_SHIFT=21u。
函數(shù)功能:等待接收器緩沖器滿的時候,讀取 LPUART->DATA 的數(shù)據(jù)賦值給 receive,并返回 receive 的值。

3. 單字符接收并回傳函數(shù):void LPUART1_receive_and_echo_char(void)

函數(shù)功能:使用 LPUART1_receive_char 函數(shù)接收 send代表的字符,并通過LPUART1_transmit_char 函數(shù)重新發(fā)送。
注: “\r”是回車,“\n”是換行, Windows 系統(tǒng)中每行結(jié)尾應(yīng)按 <回車><換行>的順序,即 “\r\n”。需要將例程中所有的“\n\r”改為“\r\n”,否則串口工具顯示輸出字符串將不會換行,出現(xiàn)錯誤格式。
三、 初始化引腳:void PORT_init (void)

函數(shù)功能:使能 PORTC 時鐘,配置引腳復(fù)用 PTC6為接收引腳,PTC7 為發(fā)送引腳。
注:各引腳功能具體查詢 S32K144 參考手冊。
ALT1 | ALT2 | ALT3 | ALT4 | ALT5 | ALT6 |
PTC7 | LPUART1_TX | CAN1_TX | FTM3_CH3 | FTM1_QD_PHA | |
PTC6 | LPUART1_RX | CAN1_RX | FTM3_CH2 | FTM1_QD_PHB |
四、 主循環(huán):

函數(shù)功能:發(fā)送一個輸入提示字符‘>’,等待主機(jī)回傳,并將收到的字符再次回傳。
五、 參考文檔
[1] S32K144 Reference Manual.pdf,NXP
[2] S32K1xx Series Cookbook.pdf,NXP
[3] S32K1xx Series Reference Manual.pdf,NXP
[4] S32K144_IO_Signal_Description_Input_Multiplexing,NXP
-
NXP
+關(guān)注
關(guān)注
61文章
1343瀏覽量
188138 -
汽車電子
+關(guān)注
關(guān)注
3037文章
8317瀏覽量
169970 -
S32k144
+關(guān)注
關(guān)注
1文章
9瀏覽量
2054
發(fā)布評論請先 登錄
免費(fèi)分享Arduino入門+進(jìn)階(全套例程+書籍)

簡述K3S和K8S的區(qū)別
為什么無法使用Lpuart_Uart_Ip_ 發(fā)送任何數(shù)據(jù)回調(diào)中的AsyncSend?
S32K148頻繁UART_FRAMING_ERROR的原因?
S32K312通過UART口打印系統(tǒng)信息,是否有使用Printf () 函數(shù)打印信息的Demo例程?
使用RTD5.0.0的s32k312,C40_Ip擦除pflash存在一些問題求解決
k32l2b31寫入LPUART1->STAT |= (1<<25)會導(dǎo)致semihost_hardfault是為什么?
使用S32K322上的LPUART進(jìn)行UART通信,接收超過14個字符時遇到問題,求解決
EB tresos導(dǎo)入S32K1 RTD中的例程,verify工程時報錯怎么解決?
S32K344將LPUART6添加到Uart_example產(chǎn)生硬故障怎么解決?
手冊描述LPUart1可以工作在APB clock domain,請問用HAL庫如何設(shè)置?
【S32K 進(jìn)階之旅】如何使用 S32K3 PIT 定時器實現(xiàn)精準(zhǔn)延時?

BOOSTXL-K350QVG-S1 QVGA顯示BoosterPack?插件模塊用戶指南

評論