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