国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在MM32F013x上實現UART單線半雙工的功能應用

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2022-02-21 10:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文將介紹在MM32F013x上實現UART單線半雙工的功能應用。

UART單線半雙工簡介

在使用數字舵機通訊時所用到的通信方式為UART通信,但舵機只有三根接線,除去VCC和GND,只有一條通信線,也就是說要實現雙向通信,只能使用單線半雙工模式。在單線半雙工模式下,TX 和 RX 引腳在芯片內部互連。

01 配置流程

單線半雙工模式是通過設置UART_SCR寄存器的HDSEL位,在這個模式里UART_SCR 寄存器的SCEN位必須保持清零狀態。

在單線半雙工模式下,TX和RX引腳在芯片內部互聯,使用控制位”HALF DUPLEX SEL”(UART_SCR 中的 HDSEL 位) 選擇半雙工和全雙工通信。

注意

當選擇單線半雙工模式時RX 不再被使用,當有數據需要發送的時候IO才會被UART驅動,沒有數據傳輸時TX總是被釋放,所以使用單線半雙工需要外部加上拉。

除此之外通訊上和正常的UART模式類似。由于是單線半雙工同一時刻總線上只能有一個節點發送,所以需要軟件協議層去管理線上沖突防止多個設備同時發送,當 TXEN 位被設置時,只要數據一寫到數據寄存器上,發送就繼續。

02 UART_SCR寄存器描述

配置UART_SCR 的HDSEL為1

UART_SCR 寄存器的SCEN位清零

初始化UART1

從官網上下載MM32F013x例程,里面有UART普通模式的配置,在這個基礎上我們直接調用UART_HalfDuplexCmd(UART1,ENABLE);函數接口將串口配置成單線半雙工模式,然后IO口初始化只需要配置PA9 TX即可,如下:

void UART1_NVIC_Init(u32 baudrate

{

UART_InitTypeDef UART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);

//UART1 NVIC

NVIC_InitStructure.NVIC_IRQChannel = UART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

//Baud rate

UART_StructInit(&UART_InitStructure);

UART_InitStructure.BaudRate = baudrate;

//The word length is in 8-bit data format.

UART_InitStructure.WordLength = UART_WordLength_8b;

UART_InitStructure.StopBits = UART_StopBits_1;

//No even check bit.

UART_InitStructure.Parity = UART_Parity_No;

//No hardware data flow control.

UART_InitStructure.HWFlowControl = UART_HWFlowControl_None;

UART_InitStructure.Mode = UART_Mode_Rx | UART_Mode_Tx;

UART_Init(UART1, &UART_InitStructure);

UART_HalfDuplexCmd(UART1,ENABLE); //Half Duplex Enable

UART_ITConfig(UART1, UART_IT_RXIEN, ENABLE);

UART_Cmd(UART1, ENABLE);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);

//UART1_TX GPIOA.9

GPIO_StructInit(&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

功能驗證測試

UART單線半雙工功能測試我們現在拿兩個MM32F0133的板子一個做主機一個做從機進行單線收發測試,主機先發送一包數據給從節點,當從節點收到這包數據后再把這包數據發回給主機,然后主機和從機兩個板子PA9短接到一起,外部在加一個4.7K上拉電阻

主機函數處理:

uint8_t txbuff[10]= {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA};

s32 main(void)

{

CONSOLE_Init(115200);//UART2 printf打印

UART1_NVIC_Init(115200);

printf(“UART Half Duplex TX Test /r/n”);

UART1_Send_Group(txbuff,sizeof(txbuff));

printf(“TX Data: ”);

for(index=0;index

主機UART的中斷服務函數里面,將接從機發送的數據存放在Rx_buff里面,當收到一包數據后通過printf打印到串口,和原始發送的數據進行對比。

void UART1_IRQHandler(void)

{

u8 recvbyte;

// Send packet

if (UART_GetITStatus(UART1, UART_IT_TXIEN) != RESET)

{

UART_ClearITPendingBit(UART1, UART_IT_TXIEN);

}

// Recv packet

if (UART_GetITStatus(UART1, UART_ISR_RX) != RESET)

{

UART_ClearITPendingBit(UART1, UART_ISR_RX);

recvbyte = UART_ReceiveData(UART1);

Rx_buff[rx_cnt] = recvbyte;

rx_cnt++;

if(rx_cnt == 10)

{

gUartRxSta = 1;

rx_cnt = 0;

}

}

}

從機函數處理:

s32 main(void)

{

CONSOLE_Init(115200);//UART2 printf打印

UART1_NVIC_Init(115200);

printf(“UART Half Duplex RX Test/r/n”);

while(1)

{

if(gUartRxSta == 1)//收到一包數據

{

gUartRxSta = 0;

UART1_Send_Group(Rx_buff,10);

memset(Rx_buff,0x00,10);

}

}

//return 0;

}

從機UART的中斷服務函數里面,將接主機發送的數據存放在Rx_buff里面,當收到一包數據后通過單線半雙工這個串口發送回去。

void UART1_IRQHandler(void)

{

u8 recvbyte;

// Send packet

if (UART_GetITStatus(UART1, UART_IT_TXIEN) != RESET)

{

UART_ClearITPendingBit(UART1, UART_IT_TXIEN);

}

// Recv packet

if (UART_GetITStatus(UART1, UART_ISR_RX) != RESET)

{

UART_ClearITPendingBit(UART1, UART_ISR_RX);

recvbyte = UART_ReceiveData(UART1);

Rx_buff[rx_cnt] = recvbyte;

rx_cnt++;

if(rx_cnt == 10)

{

gUartRxSta = 1;

rx_cnt = 0;

}

}

}

觀察測試結果:

然后我們通過主機UART2 的printf打印可以看到主機TX Data 和從機返回的RX Data數據是一樣的。

再看看下圖邏輯分析儀抓取的邏輯波形,可以也可以看到主機發送的波形和從機返回的波形數據是一樣的。

轉自:靈動微電子

審核編輯:何安

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • uart
    +關注

    關注

    22

    文章

    1314

    瀏覽量

    106634
  • 靈動微電子
    +關注

    關注

    7

    文章

    137

    瀏覽量

    20479
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    為什么叫“全雙工”和“半雙工”?

    今天聊個通信里的基礎概念——全雙工半雙工!簡單吧,簡單到"UART、RS-232 和 RS-485 是全雙工還是半雙工?"我差點都答不上來
    的頭像 發表于 02-12 11:28 ?356次閱讀

    雙工半雙工光模塊:核心差異及應用解析

    光通信系統的構建與日常運維工作中,光模塊作為不可或缺的核心傳輸器件,其傳輸模式的合理選擇,對系統數據交互的效率以及整體運行性能起著決定性作用。全雙工光模塊與半雙工光模塊作為該領域內兩類關鍵的傳輸
    的頭像 發表于 02-10 19:14 ?144次閱讀

    雙工光模塊與半雙工光模塊的區別?

    光通信系統的構建與運維過程中,光模塊作為核心傳輸組件,其傳輸模式的選擇直接影響系統的數據交互效率與整體性能。全雙工光模塊與半雙工光模塊作為兩類關鍵的傳輸模式,二者的核心差異集中體現在數據傳輸同步性
    的頭像 發表于 02-06 18:59 ?124次閱讀

    CW32 UART單線半雙工模式

    完成后,接收完成標志位 UARTx_ISR.RC 會被硬件置 位,此時應盡快讀取 UARTx_RDR 寄存器,并清除 UARTx_ISR.RC 標志位。 UART工作單線半雙工模式時
    發表于 01-05 06:24

    SN65HVD485E半雙工RS - 485收發器:電子工程師的理想選擇

    SN65HVD485E半雙工RS - 485收發器:電子工程師的理想選擇 電子設計領域,找到一款性能優越、可靠性高的收發器至關重要。今天,我們就來深入探討德州儀器(TI)的SN65HVD485E
    的頭像 發表于 12-29 16:45 ?369次閱讀

    ISOx5隔離式3.3 - V半雙工和全雙工RS - 485收發器技術全解析

    ISOx5隔離式3.3 - V半雙工和全雙工RS - 485收發器技術全解析 工業自動化、網絡通信等眾多領域,可靠的數據傳輸是系統穩定運行的關鍵,RS - 485接口憑借其出色的電氣特性,成為
    的頭像 發表于 12-25 16:45 ?431次閱讀

    THVD1454:靈活的半雙工 RS - 485 收發器設計解析

    THVD1454:靈活的半雙工 RS - 485 收發器設計解析 工業自動化、樓宇控制等眾多領域,RS - 485 通信標準憑借其長距離傳輸、多點通信等優勢得到了廣泛應用。今天我們要深入探討
    的頭像 發表于 12-16 10:45 ?330次閱讀

    SPI 支持單線半雙工通信模式

    SPI 支持單線半雙工通信模式,該模式下,主機和從機通過一條雙向數據線進行數據通信,主機使用 MOSI,從機使用 MISO,未使用的其他 SPI 信號線可供其它功能使用。設置控制寄存
    發表于 12-12 07:52

    CW32F030 UART的主要特性

    CW32F030 內部集成 3 個通用異步收發器 (UART),支持異步全雙工、同步半雙工單線半雙工
    發表于 12-11 08:07

    CW32L010的串口輸出功能

    今天和大家分享一下CW32L010的串口輸出功能: CW32L010 內部集成2個通用異步收發器(UART),支持異步全雙工、同步半雙工單線
    發表于 11-26 06:04

    雙工跳線和雙芯跳線的區別是什么

    雙工跳線和雙芯跳線定義、傳輸模式、結構設計和應用場景存在明顯區別: 定義與核心功能雙工跳線:基于通信模式分類,強調數據傳輸的雙向性。
    的頭像 發表于 09-01 10:23 ?931次閱讀

    Texas Instruments THVD1454半雙工RS-485收發器數據手冊

    Texas Instrument THVD1454半雙工RS-485收發器是一款適用于工業應用的靈活半雙工RS-485收發器。該器件具有片120Ω 終端電阻和驅動器輸出壓擺率控制等功能
    的頭像 發表于 08-04 15:23 ?1133次閱讀
    Texas Instruments THVD1454<b class='flag-5'>半雙工</b>RS-485收發器數據手冊

    求助,關于半雙工模式下的Uart問題求解

    目標是 2 個 XMC1404 啟動套件運行半雙工通信。為此使用了DAVE? 。 通信配置為使用 p2.0 的 usic0 通道 0。為了使其工作,我必須重新編程 TX/RX 引
    發表于 07-30 07:00

    Texas Instruments THVD24x9半雙工RS-485收發器數據手冊

    Texas Instruments THVD24x9半雙工RS-485收發器通過標準8引腳SOIC和小型10引腳VSON封裝中集成瞬態電壓抑制器 (TVS) 二極管,實現了集成浪涌保
    的頭像 發表于 07-23 10:25 ?860次閱讀
    Texas Instruments THVD24<b class='flag-5'>x</b>9<b class='flag-5'>半雙工</b>RS-485收發器數據手冊

    帶耦合器的大規模物聯網半雙工前端模塊 skyworksinc

    電子發燒友網為你提供()帶耦合器的大規模物聯網半雙工前端模塊相關產品參數、數據手冊,更有帶耦合器的大規模物聯網半雙工前端模塊的引腳圖、接線圖、封裝手冊、中文資料、英文資料,帶耦合器的大規模物聯網半雙工前端模塊真值表,帶耦合器的大
    發表于 05-09 18:35
    帶耦合器的大規模物聯網<b class='flag-5'>半雙工</b>前端模塊 skyworksinc