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