www在线观看视频免费-www在线观看免费视频-www永久免费视频-www一区二区-自愉自愉自产国产91-自偷自偷自亚洲首页精品

物聯網開發

?

學會Zynq(25)UART的基本使用方法

點擊數:42019-04-01 16:59:03 來源: 深圳網站建設,微信APP開發,網店裝修,藝之都網絡公司官網

SDK程序設計
Vivado中配置Zynq時啟用開發板提供的UART接口。SDK中user_uart.h文件代碼如下:

#ifndef SRC_USER_UART_H_
#define SRC_USER_UART_H_

#include "xparameters.h"
#include "xuartps.h"
#include "xil_printf.h"
#include "sleep.h"

#define UART_DEVICE_ID                  XPAR_XUARTPS_0_DEVICE_ID

int Uart_Send(XUartPs* Uart_Ps, u8 *sendbuf, int length);
int Uart_Init(XUartPs* Uart_Ps, u16 DeviceId);

#endif /* SRC_USER_UART_H_ */

user_uart.c文件的代碼如下:

#include "user_uart.h"

// UART格式
XUartPsFormat uart_format =
{
9600,
//XUARTPS_DFT_BAUDRATE,   //默認波特率 115200
XUARTPS_FORMAT_8_BITS,
XUARTPS_FORMAT_NO_PARITY,
XUARTPS_FORMAT_1_STOP_BIT,
};

//--------------------------------------------------------------
//                     UART初始化函數
//--------------------------------------------------------------
int Uart_Init(XUartPs* Uart_Ps, u16 DeviceId)
{
int Status;
XUartPs_Config *Config;

/*  初始化UART設備    */
Config = XUartPs_LookupConfig(DeviceId);
if (NULL == Config) {
return XST_FAILURE;
}
Status = XUartPs_CfgInitialize(Uart_Ps, Config, Config->BaseAddress);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}

/*  UART設備自檢  */
Status = XUartPs_SelfTest(Uart_Ps);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}

/*  設置UART模式與參數   */
XUartPs_SetOperMode(Uart_Ps, XUARTPS_OPER_MODE_NORMAL); //正常模式
XUartPs_SetDataFormat(Uart_Ps, &uart_format);    //設置UART格式

return XST_SUCCESS;
}

//--------------------------------------------------------------
//                     UART數據發送函數
//--------------------------------------------------------------
int Uart_Send(XUartPs* Uart_Ps, u8 *sendbuf, int length)
{
int SentCount = 0;

while (SentCount < length) {
SentCount += XUartPs_Send(Uart_Ps, &sendbuf[SentCount], 1);
}

return SentCount;
}

main.c文件的代碼如下:

#include "user_uart.h"

XUartPs Uart_Ps; /* The instance of the UART Driver */

int main(void)
{
int Status;
u8 sendbuf[] = "Hello World! ";
/* 串口初始化 */
Status = Uart_Init(&Uart_Ps, UART_DEVICE_ID);
if (Status == XST_FAILURE) {
xil_printf("Uartps Failed ");
return XST_FAILURE;
}

while (1)
{
sleep(1);
Uart_Send(&Uart_Ps, sendbuf, 14);
}

return Status;
}

SDK Terminal中添加串口,波特率設置為程序制定的9600,運行程序,將看到每隔1s打印一次“Hello World!”。


相關API函數
1.UART初始化
對UART設備初始化操作和前面GPIO設備、中斷設備、定時器設備、XADC設備的初始化過程一樣,不再贅述。接著使用XUartPs_SelfTest函數對UART設備自檢。

s32 XUartPs_SelfTest(XUartPs *InstancePtr)
1
這個函數執行一次本地回環,驗證可以正常發送和接受數據。返回XST_UART_TEST_FAIL表示測試失敗;XST_SUCCESS表示測試成功。我們可以用這個函數檢查硬件工作是否正常。

2.模式配置
初始化函數中還用XUartPs_SetOperMode函數設置了UART的工作模式。工作模式在xuartps.h文件中宏定義。

void XUartPs_SetOperMode(XUartPs *InstancePtr, u8 OperationMode)
1
四種工作模式的作用請參考第24篇。下表給出每種模式的宏定義:

宏定義 實際值 工作模式
XUARTPS_OPER_MODE_NORMAL 0x00U 正常模式
XUARTPS_OPER_MODE_AUTO_ECHO 0x01U 自動echo模式
XUARTPS_OPER_MODE_LOCAL_LOOP 0x02U 本地回環模式
XUARTPS_OPER_MODE_REMOTE_LOOP 0x03U 遠程回環模式
3.格式配置
接下來使用XUartPs_SetDataFormat函數設置UART的數據格式,包括波特率、數據位數、停止位數和奇偶校驗。調用此函數時應確保UART沒有收發數據。

s32 XUartPs_SetDataFormat(XUartPs *InstancePtr, XUartPsFormat * FormatPtr)
1
如果設置成功則返回XST_SUCCESS;如果該波特率在當前參考時鐘頻率下無法實現,則返回XST_UART_BAUD_ERROR表示無法設置波特率;函數的任意一個輸入參數無效時返回XST_INVALI_PARAM。

我們絕大多數情況下都會使用“8位數據、1位停止、無奇偶校驗”,因此如果想進一步提高程序效率,可以僅使用XUartPs_SetBaudRate函數來設置波特率。

s32 XUartPs_SetBaudRate(XUartPs *InstancePtr, u32 BaudRate)
1
使用該函數也會檢查輸入的波特率值是否有效。檢查的依據是xuartps.c中下面這個宏定義,即最大允許的波特率錯誤率:

#define XUARTPS_MAX_BAUD_ERROR_RATE  3U /* max % error allowed */
1
其實質上是波特率生成器產生的實際波特率與設置的波特率之間的差值。如果不滿足這個條件,便會返回XST_UART_BAUD_ERROR,保持原有波特率不變。

4.數據格式
上面的函數中使用了XuartPsFormat類型的結構體來設置UART格式。該結構體原型如下:

typedef struct {
u32 BaudRate; /**< In bps, ie 1200 */
u32 DataBits; /**< Number of data bits */
u32 Parity; /**< Parity */
u8 StopBits; /**< Number of stop bits */
} XUartPsFormat;

下表總結了與數據格式相關的宏定義,使用時要將其填到結構體變量的對應位置。一般波特率可以寫成數字形式,其余三個成員都要用宏定義的形式。

宏定義 實際值 工作模式
數據位
XUARTPS_FORMAT_8_BITS 0U 8-bits數據位
XUARTPS_FORMAT_7_BITS 2U 7-bits數據位
XUARTPS_FORMAT_6_BITS 3U 6-bits數據位
奇偶校驗
XUARTPS_FORMAT_NO_PARITY 4U 無奇偶校驗
XUARTPS_FORMAT_MARK_PARITY 3U 校驗位始終為1
XUARTPS_FORMAT_SPACE_PARITY 2U 校驗位時鐘為0
XUARTPS_FORMAT_ODD_PARITY 1U 奇校驗
XUARTPS_FORMAT_EVEN_PARITY 0U 偶校驗
停止位
XUARTPS_FORMAT_2_STOP_BIT 2U 2-bits停止位
XUARTPS_FORMAT_1_5_STOP_BIT 1U 1.5-bits停止位
XUARTPS_FORMAT_1_STOP_BIT 0U 1-bit停止位
波特率
XUARTPS_MAX_RATE 921600U 最大波特率
XUARTPS_MIN_RATE 110U 最小波特率
XUARTPS_DFT_BAUDRATE 115200U 默認波特率
5.數據發送
程序中使用XUartPs_Send函數發送數據。這個函數是非阻塞的,輪詢模式和中斷驅動模式下都可以使用。它會盡可能地想TxFIFO填充數據,并返回發送的字節數;如果無法填充,會返回0表示發送了0字節,便于用戶處理。

中斷模式下,該函數會發送指定的緩沖區(Buffer)中的內容,中斷處理程序負責將所有數據全部發送完。此時會調用綁定的回調函數,標識發送完成。關于中斷的用法在后面文章中專門介紹。

u32 XUartPs_Send(XUartPs *InstancePtr, u8 *BufferPtr, u32 NumBytes)
1
第二個參數是指向要發送的數據緩沖區的指針;第三個參數是發送的字節數;返回值標識實際發送的字節數。本例程序中就是利用返回值確保所有數據都依次發送(雖然本例的數量不大,但要學習這個用法)。

這個函數還有個特殊用法,如果將第三個參數設為0,則會停止正在進行的發送操作,并將已經在TxFIFO中的所有數據都發送出去??梢杂眠@個用法實現某些特殊功能。

優勢

SUPERIORITY

為一流企業提供金牌網絡服務

我們為客戶提供一站式服務,沒有最好的方案,只有最適合每個企業的設計方案……

理念

IDEA

持續追求更高品質

藝之都團隊的十年,是一個典型的技術團隊成長的十年。一群年輕人,追著夢想,從無到有,從癡迷小組到精英團隊藝之都從成立的那一天開始永放光芒……

售前咨詢
0755-33563420
免費網絡問題咨詢
免費網絡解決方案策劃
免費網站問題診斷
免費網店問題診斷
免費網站網店推廣咨詢
服務與支持
網站建設
微信開發
APP開發
網店裝修
網站推廣
網店運營
大數據服務
營銷培訓
服務器租賃
賬號與支持
合同申請
轉賬付款
線下匯款
索取發票
快速入口
網站管理
備案管理
賬號管理
域名信息查詢
域名控制臺
服務器控制臺
其他服務
客戶案例
新品活動
海外服務
技術論壇
注冊公司
財務代理
VI設計
資源推薦
提交建議
關注藝之都網絡
企業決策者必讀
藝之都網絡APP
藝之都微信
藝之都微博
藝之都服務中心

核心產品:  營銷型網站系統  微信分銷商城系統  網店運營系統  大數據精準營銷系統  域名注冊備案  游戲開發運營

增值服務:  工商注冊  財務代理  VI設計  LOGO設計  營銷策劃  網站備案  短信服務  企業郵箱  WHOIS查詢  網站模板  服務器維護

更多推薦:  企業線上方案  品牌線上方案  線上商城方案  社交直播方案  醫療網絡方案  旅游線上方案  精準營銷方案

關于藝之都    法律聲明    廉政舉報    榮譽查詢    友情鏈接

藝之都網絡  深圳網站建設  東莞網站建設  廣州網站建設  上海網站建設  北京網站建設  南陽網站建設  【添加分公司鏈接】

2007-2019 yizhidou.com 版權所有粵ICP備:14099120號-3

深圳市藝之都網絡科技有限公司  深圳市龍崗區坂田商業廣場禾田步行街二層

主站蜘蛛池模板: 91福利视频网站 | 国产精品黑色丝袜的老师 | 狠狠操伊人 | 亚洲精品在线不卡 | 福利视频一区二区三区 | 婷婷丁香四月 | 最近更新中文字幕第一页 | 91精品啪在线观看国产日本 | 午夜视频免费在线播放 | 视色4se在线视频播放 | 成人精品一级毛片 | 亚洲一区二区在线免费观看 | 久久精品中文字幕第一页 | 免费黄色高清视频 | 久久久久综合网久久 | 日本高清中文字幕一区二区三区 | 国产麻豆福利a v在线播放 | 丁香六月综合激情 | 午夜爽爽性刺激一区二区视频 | 日本一区二区三区精品国产 | 国产一区二区在线视频播放 | 91麻豆精品国产自产在线 | 欧美人与禽交片在线观看网站 | 热久久国产欧美一区二区精品 | 大香网伊人久久综合网2020 | 欧美精品免费一区欧美久久优播 | 免费精品视频在线 | 四虎现在的网址入口2022 | 草草草视频 | 久久精品国内一区二区三区 | 久草免费在线色站 | 五月月色开心婷婷久久合 | 欧美亚洲国产日韩 | 成人观看天堂在线影片 | 91精品国产91久久久久久最新 | 黄网站色成年片大免费软件 | 97久久精品国产成人影院 | www.性视频| 四虎免费在线视频 | 91精品视频在线看 | 久青草国产手机视频免费观看 |