一起学nRF51xx 6 - uart
前言
通用異步接收器/發(fā)送器提供快速,全雙工,內(nèi)置流量控制的異步串行通信(CTS,RTS),在硬件方面支持高達(dá)1Mbps波特率。支持奇偶校驗(yàn)和第9位數(shù)據(jù)生成。
用于每個(gè)UART接口線的GPIO可從芯片上的GPIO中任選,而且可獨(dú)立配置。這使得芯片引線十分靈活,有效利用印制電路板空和信號(hào)通路。
從上圖可知,UART發(fā)送寄存器TXD有一個(gè),當(dāng)要發(fā)送數(shù)據(jù)的時(shí)候把數(shù)據(jù)放入TXD,然后啟動(dòng)發(fā)送TASK就可以發(fā)送了。接收寄存器RXD帶FIFO,總共有6級(jí),在數(shù)據(jù)被覆蓋前可以接收6個(gè)字節(jié)。
?
UART的任務(wù):
STARTRX:使能這個(gè)TASK以后,UART將會(huì)接收RXD引腳發(fā)送過(guò)來(lái)的數(shù)據(jù),并且將數(shù)據(jù)移入接收FIFO中。
STOPRX:使能這個(gè)TASK以后,接收將會(huì)被停止。
STARTTX:使能這個(gè)TASK以后,TXD寄存器里面的數(shù)據(jù)將通過(guò)TXD引腳被發(fā)送出去。
STOPTX:使能這個(gè)TASK,UART將停止發(fā)送數(shù)據(jù)。
?
UART的事件:
RXDRDY:UART每接收完一個(gè)字節(jié)的數(shù)據(jù),將會(huì)產(chǎn)生RXDRDY事件。
TXDRDY:當(dāng)TXD寄存器中的數(shù)據(jù)被發(fā)送完,將會(huì)產(chǎn)生這個(gè)事件,這時(shí)候我們可以往TXD寄存器放新的數(shù)據(jù)。
EEROR:當(dāng)UART檢測(cè)到有錯(cuò)誤發(fā)生會(huì)產(chǎn)生這個(gè)事件。
?
UART的引腳配置:
nRF51系列SOC設(shè)計(jì)得比較有特色,以下引腳可以為任意的一個(gè)GPIO。
PSELRXD:配置將用作為RX引腳的GPIO。
PSELCTS:配置將用作為CTS引腳的GPIO。
CTS只用在有硬件流控的場(chǎng)合,這個(gè)信號(hào)是來(lái)自于數(shù)據(jù)接收端,用來(lái)通知發(fā)送端可以發(fā)送數(shù)據(jù)了。當(dāng)這個(gè)信號(hào)有效(一般為低電平),說(shuō)明接收端已經(jīng)準(zhǔn)備就緒,比如說(shuō)接收緩沖區(qū)已經(jīng)清空,可以正常接收數(shù)據(jù)。這個(gè)時(shí)候我們可以啟動(dòng)發(fā)送。每發(fā)送完一個(gè)字節(jié),再發(fā)送下一個(gè)字節(jié)之前我們都要檢測(cè)CTS這個(gè)信號(hào)。當(dāng)CTS信號(hào)無(wú)效,數(shù)據(jù)發(fā)送將會(huì)被暫停。
PSELRTS:配置將用作為RTS引腳的GPIO。
RTS只用在有硬件流控的場(chǎng)合,這個(gè)信號(hào)是發(fā)送自數(shù)據(jù)發(fā)送端,用來(lái)通知數(shù)據(jù)接收端,準(zhǔn)備完畢,可以發(fā)送數(shù)據(jù)。
PSELTXD:配置將用作為引腳的GPIO。
?
本節(jié)將在NRF51822芯片是使用UART模塊實(shí)現(xiàn)串口收發(fā)操作。
?
示例詳解
基于硬件平臺(tái):nrf51822ek_tm開(kāi)發(fā)板。
?
?
本示例所用的最小系統(tǒng)板原理圖:
?
?
工程名為nrfxx-uart確認(rèn)后按下圖選擇芯片為nrf51822_xxAA->ok
在彈出的對(duì)話框中勾選CMSIS中的CORE;Device中的Startup(后面有nrf51Series字樣的);在nrf_device中勾選nrf_gpio,nrf_gpiote,nrf_delay,nrf_ppi,nrf_error,nrf_uart并在nrf_Libraries中勾選app_error,nrf_assert模塊。
?
OK之后工程自動(dòng)生成如下代碼:
新建一個(gè)空白文檔,保存為main.c,并加入工程中:
配置工程,選擇使用MicroLIB庫(kù),可以減小程序體積:
加入NRF51定義,并選擇化等級(jí)3,可以減小程序體積,但仿真運(yùn)行時(shí)可能會(huì)出現(xiàn)與代碼順序不一致現(xiàn)象:
?
調(diào)試工具選擇J-LINK,并將接口設(shè)置為SW口勾選下載程序后自動(dòng)復(fù)位及運(yùn)行:
?
?
?
上圖中代碼的基本功能是在主函數(shù)中實(shí)現(xiàn)LED燈500ms亮500ms滅循環(huán)控制,同時(shí)LED第翻轉(zhuǎn)一次串口打印輸出一次信息“hello zhangshisan this is nrf51822 uart Demo…”,同時(shí)如果串口接收到數(shù)據(jù)則直接通過(guò)串口回發(fā)回去,實(shí)現(xiàn)輸入數(shù)據(jù)回顯功能,串口引腳TX是P0_9,Rx是P0_11,波特率是115200,無(wú)校驗(yàn),使能接收和發(fā)送,使能數(shù)據(jù)接收中斷。關(guān)于串口的更多接口函數(shù)可以在nrf_uart.h中查看,或去網(wǎng)官https://infocenter.nordicsemi.com/index.jsp 查看相應(yīng)的接口說(shuō)明文檔。
?
在串口調(diào)試助手中的發(fā)送窗口輸入一些內(nèi)容,按發(fā)送后可以看到在接口窗口也可接口到串口回發(fā)的內(nèi)容,說(shuō)明串的接收功能正常,中斷功能正常。
本示串口示例程序基于nrf官方庫(kù)編寫(xiě)實(shí)現(xiàn),如果需要寄存器實(shí)現(xiàn)版本的,在本示例源碼中也有相應(yīng)的參考實(shí)現(xiàn)給出。
OK,本期實(shí)驗(yàn)完成!下期見(jiàn)!同時(shí)如果大家有什么疑問(wèn)或是有想了解的其它內(nèi)容,也歡迎大家留言!!最后喜歡這個(gè)公眾號(hào)的同學(xué)們記得加關(guān)注了,會(huì)有不定期技術(shù)干貨推出!!
文中源碼資料下載,在公眾號(hào)里給十三發(fā)消息:
下載|一起學(xué)nRF51xx 6
?
關(guān)注十三公眾號(hào)
?
總結(jié)
以上是生活随笔為你收集整理的一起学nRF51xx 6 - uart的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一起学nRF51xx 5 - ppi
- 下一篇: 一起学nRF51xx 7 - spi