上篇【S32K 進階之旅】系列博文介紹了 S32K 中的 LPUART 模塊,并以 S32DS 開發(fā)環(huán)境中自帶的例程 LPUART_s32k144 為例,使用 S32K144-EVB 評估板燒錄進行了演示。為了幫助新手快速的入門 LPUART 模塊,本文將逐句解析例程 LPUART_s32k144
一、 串口初始化:void LPUART_init(void)
1. 開啟時鐘
![](https://file.elecfans.com/web2/M00/9D/7D/pYYBAGQucQuAFyg1AADpoPQ-aMQ962.jpg)
初始化確保時鐘關閉。
查詢 S32K144 參考手冊,設置 LPUART 時鐘源為 SOSCDIV2_CLK(0b001),并使能時鐘。
![](https://file.elecfans.com/web2/M00/9C/FA/poYBAGQucQuAFiKrAAF2ZRFUNC8145.jpg)
![](https://file.elecfans.com/web2/M00/9C/FB/poYBAGQucQyAbAulAAFl5cCtr60090.jpg)
2. LPUART1->BAUD:LPUART波特率寄存器
用于配置串口波特率。
![](https://file.elecfans.com/web2/M00/9D/7D/pYYBAGQucQyAGIomAAHFW-fWpmc579.jpg)
下圖為 32 位寄存器 BAUD 的圖表:
![](https://file.elecfans.com/web2/M00/9D/7D/pYYBAGQucQuAa4X_AABObb-j0Xc696.png)
LPUART BAUD寄存器
通過查詢 LPUART BAUD 寄存器位功能可知:波特率=baud clock / ((OSR+1) * SBR)。baud clock為 SOSCDIV2_CLK= 8 MHz,OSR 默認值為F=15,則可以算出波特率為 9600 時,SBR的值約為 52,即 0x34。不使用BAUD寄存器的其他功能,則給 BAUD 寄存器賦值0x0F000034。
![](https://file.elecfans.com/web2/M00/9C/FB/poYBAGQucQyAVkjHAAJvXdJ920c169.jpg)
3. LPUART->CTRL:LPUART 控制寄存器
控制 LPUART 系統(tǒng)的多種可選特性,只有在發(fā)送器和接收器被禁止時才可以更改。
![](https://file.elecfans.com/web2/M00/9C/FB/poYBAGQucQyAVkjHAAJvXdJ920c169.jpg)
根據(jù)下圖32 位寄存器 CTRL 的圖表可知:TE=1,RE=1(0x000C0000)
![](https://file.elecfans.com/web2/M00/9C/FA/poYBAGQucQuAYnylAABULPWbnMk259.png)
LPUART CTRL寄存器
查寄存器字段知:設置收發(fā)使能,8-bit數(shù)據(jù)位,1-bit停止位,無校驗位,不使用中斷功能。
![](https://file.elecfans.com/web2/M00/9D/7D/pYYBAGQucQ6AQBjaAARAYMc2iFk621.jpg)
二、 功能函數(shù)
1. 發(fā)送單字符:void LPUART1_transmit_char(char send)
![](https://file.elecfans.com/web2/M00/9D/7D/pYYBAGQucQ6Acro3AADylKxb92c047.jpg)
下圖為 32 位寄存器 STAT 的圖表:
![](https://file.elecfans.com/web2/M00/9D/7D/pYYBAGQucQ6AEKhgAAGZF1W0jNs325.jpg)
LPUART STAT寄存器
已知:LPUART_STAT_TDRE_MASK=0x800000u,LPUART_STAT_TDRE_SHIFT=23u
函數(shù)功能:在發(fā)送器緩沖器空的時候,將 send 代表的數(shù)據(jù)放入 LPUART->DATA 中發(fā)送。
![](https://file.elecfans.com/web2/M00/9C/FB/poYBAGQucQ6AWly8AAJyXoKUhM0660.jpg)
2. 字符串發(fā)送函數(shù):void LPUART1_transmit_string(char data_string[])
函數(shù)功能:通過循環(huán)調用 LPUART1_transmit_char函數(shù)發(fā)送單個字符直到檢測到字符串結尾‘\0’,來實現(xiàn)發(fā)送字符串的功能。
3. 單字符接收函數(shù):char LPUART1_receive_char(void)
![](https://file.elecfans.com/web2/M00/9C/FB/poYBAGQucQ6AMduVAAEUi1CB2Fs736.jpg)
已知:LPUART_STAT_RDRF_MASK=0x200000u;LPUART_STAT_RDRF_SHIFT=21u。
函數(shù)功能:等待接收器緩沖器滿的時候,讀取 LPUART->DATA 的數(shù)據(jù)賦值給 receive,并返回 receive 的值。
![](https://file.elecfans.com/web2/M00/9D/7D/pYYBAGQucQ-ATrKyAAKBf7V0x74089.jpg)
3. 單字符接收并回傳函數(shù):void LPUART1_receive_and_echo_char(void)
![](https://file.elecfans.com/web2/M00/9C/FB/poYBAGQucQ-AftpJAADubHulSqY453.jpg)
函數(shù)功能:使用 LPUART1_receive_char 函數(shù)接收 send代表的字符,并通過LPUART1_transmit_char 函數(shù)重新發(fā)送。
注: “\r”是回車,“\n”是換行, Windows 系統(tǒng)中每行結尾應按 <回車><換行>的順序,即 “\r\n”。需要將例程中所有的“\n\r”改為“\r\n”,否則串口工具顯示輸出字符串將不會換行,出現(xiàn)錯誤格式。
三、 初始化引腳:void PORT_init (void)
![](https://file.elecfans.com/web2/M00/9C/FB/poYBAGQucQ-AUkkrAADyPr_Q9rA512.jpg)
函數(shù)功能:使能 PORTC 時鐘,配置引腳復用 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):
![](https://file.elecfans.com/web2/M00/9D/7D/pYYBAGQucQ6AFr2tAACYC8QfmbA485.jpg)
函數(shù)功能:發(fā)送一個輸入提示字符‘>’,等待主機回傳,并將收到的字符再次回傳。
五、 參考文檔
[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
+關注
關注
60文章
1290瀏覽量
185498 -
汽車電子
+關注
關注
3029文章
8023瀏覽量
167818 -
S32k144
+關注
關注
1文章
9瀏覽量
1933
發(fā)布評論請先 登錄
相關推薦
BOOSTXL-K350QVG-S1 QVGA顯示BoosterPack?插件模塊用戶指南
![BOOSTXL-<b class='flag-5'>K350QVG-S</b>1 QVGA顯示BoosterPack?插件<b class='flag-5'>模塊</b>用戶指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
智能家居之旅(15):HA傳感器采集主板低功耗設計的遭遇
![智能家居<b class='flag-5'>之旅</b>(15):HA傳感器采集主板低功耗設計的遭遇](https://file1.elecfans.com//web2/M00/05/54/wKgZombZFxKAI7_sAABnhaoHtUw37.jpeg)
快來圍觀:S32K344 VCU項目開發(fā)隨筆~
![快來圍觀:<b class='flag-5'>S32K</b>344 VCU項目開發(fā)隨筆~](https://file.elecfans.com/web2/M00/20/B3/pYYBAGGfNNmAK-PZAAJsGM5Cgk0227.jpg)
基于S32K3的ECU參考設計集成電池管理方案
STM32G031J6的LPUART發(fā)送導致系統(tǒng)復位怎么解決?
stm32L072芯片LPUART1接收發(fā)送失敗的原因?怎么解決?
關于STM32L051C8T6芯片LPUART+DMA接收問題求解
基于 NXP S32K311 評估板的方案
![基于 NXP <b class='flag-5'>S32K</b>311 評估板的方案](https://file.elecfans.com/web2/M00/65/09/pYYBAGMHLo-AXhv6AABF60N1Sbg429.png)
評論