在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    1251

    瀏覽量

    102877
  • 靈動微電子
    +關注

    關注

    7

    文章

    124

    瀏覽量

    19898
收藏 人收藏

    評論

    相關推薦

    SN65HVD3083EDGSR半雙工時怎么接線?

    請問ti工程師SN65HVD3083EDGSR 這顆芯片半雙工時怎么接線?
    發表于 01-01 08:12

    【RA-Eco-RA4E2-64PIN-V1.0開發板試用】UART串口通信-收發回顯

    一.串口介紹 USART是全雙工通用同步/異步收發器,是一種串行的設備。嵌入式開發設計中經常被使用到,廣泛的被應用于主機與外圍設備的通信交互中,應用相當的廣泛。 UART和 USART有
    發表于 12-15 17:32

    NXP源碼基礎如何適配ELF 1開發板的UART功能

    UART即通用異步收發器,是一種支持全雙工串行通信協議的接口。i.MX6ULL處理器平臺上,該處理器原生支持多達8路的UART接口,提供了豐富的串行通信能力。 針對ELF 1開發板,
    的頭像 發表于 09-29 11:49 ?562次閱讀
    <b class='flag-5'>在</b>NXP源碼基礎<b class='flag-5'>上</b>如何適配ELF 1開發板的<b class='flag-5'>UART</b><b class='flag-5'>功能</b>

    ElfBoard技術貼|如何在NXP源碼基礎適配ELF 1開發板的UART功能

    UART即通用異步收發器,是一種支持全雙工串行通信協議的接口。i.MX6ULL處理器平臺上,該處理器原生支持多達8路的UART接口,提供了豐富的串行通信能力。 針對ELF 1開發
    的頭像 發表于 09-25 13:56 ?2628次閱讀
    ElfBoard技術貼|如何在NXP源碼基礎<b class='flag-5'>上</b>適配ELF 1開發板的<b class='flag-5'>UART</b><b class='flag-5'>功能</b>

    使用TM4C129x 微控制器為 TMP1826實現單線枚舉功能應用說明

    電子發燒友網站提供《使用TM4C129x 微控制器為 TMP1826實現單線枚舉功能應用說明.pdf》資料免費下載
    發表于 09-12 11:10 ?0次下載
    使用TM4C129<b class='flag-5'>x</b> 微控制器為 TMP1826<b class='flag-5'>實現</b><b class='flag-5'>單線</b>枚舉<b class='flag-5'>功能</b>應用說明

    ISOx5隔離式3.3V半雙工和全雙工RS-485收發器數據表

    電子發燒友網站提供《ISOx5隔離式3.3V半雙工和全雙工RS-485收發器數據表.pdf》資料免費下載
    發表于 08-16 11:29 ?1次下載
    ISOx5隔離式3.3V<b class='flag-5'>半雙工</b>和全<b class='flag-5'>雙工</b>RS-485收發器數據表

    ISO308x隔離式5V全雙工半雙工RS-485收發器數據表

    電子發燒友網站提供《ISO308x隔離式5V全雙工半雙工RS-485收發器數據表.pdf》資料免費下載
    發表于 08-15 09:38 ?0次下載
    ISO308<b class='flag-5'>x</b>隔離式5V全<b class='flag-5'>雙工</b>和<b class='flag-5'>半雙工</b>RS-485收發器數據表

    單工、半雙工和全雙工傳輸模式的區別

    傳輸模式主要分為單工(Simplex)、半雙工(Half-Duplex)和全雙工(Full-Duplex)。這三種模式在數據傳輸能力、通信效率和應用場景等方面存在顯著差異。
    的頭像 發表于 08-07 14:32 ?2013次閱讀

    SN65HVD485E 半雙工 RS-485 收發器數據表

    電子發燒友網站提供《SN65HVD485E 半雙工 RS-485 收發器數據表.pdf》資料免費下載
    發表于 06-27 11:17 ?0次下載
    SN65HVD485E <b class='flag-5'>半雙工</b> RS-485 收發器數據表

    esp32 wroom 32d是半雙工還是全雙工的?

    我的疑問有幾個: 1. esp32 wroom 32d是半雙工還是全雙工的? 2. 鏈路層狀態機切換的時候,比如在廣播態發廣播包的時候,一個廣播事件還沒結束,狀態機能切換到掃描態嗎? 3. 一個
    發表于 06-18 06:15

    雙工半雙工技術解析

    隨著信息技術的迅猛發展,通信系統的性能要求日益提高。在數據傳輸中,雙工模式的選擇對于提高系統效率、降低通信延遲具有重要意義。 一、全雙工模式 全雙工模式允許數據通信鏈路的兩個方向上同
    的頭像 發表于 06-16 10:18 ?1058次閱讀

    請問如何取消UART的GPIO映射?

    我想實現單線半雙工的串口,收發時需要切換收和發的GPIO,涉及到esp_rom_gpio_connect_in_signal和esp_rom_gpio_connect_out_sig
    發表于 06-07 06:08

    PSoC5 UART半雙工模式UART_LoadTxConfig() 之后傳輸數據時的疑問求解

    我目前正在嘗試使用內置的 UART 組件傳輸數據 CY8C5888LTI-LP097。UART配置為半雙工模式,速率為 9600 Bd,數據位為 8,偶校驗。我的代碼如下所示
    發表于 05-31 10:13

    當XMC1400配置為半雙工SPI主站時,SPI_MASTER_Receive功能能否正常工作?

    由所有的 1 組成。 作為臨時解決辦法,我將 XMC1400 配置為全雙工,并將 MOSI 和 MISO 引腳連接在一起。 現在的問題是,當 XMC1400 配置為半雙工 SPI 主站時,SPI_MASTER_Receive功能
    發表于 05-23 06:44

    雙工半雙工技術解析及其應用場景

    隨著信息技術的迅猛發展,通信系統的性能要求日益提高。在數據傳輸中,雙工模式的選擇對于提高系統效率、降低通信延遲具有重要意義。本文將對全雙工半雙工兩種雙工模式進行詳細解析,并探討它們各
    的頭像 發表于 05-11 15:29 ?1844次閱讀
    主站蜘蛛池模板: h国产在线观看 | 成人理论片 | 老司机成人精品视频lsj | 99热.com| 亚洲欧美成人综合久久久 | 亚洲怡红院在线 | 婷婷综合激情 | 狠狠色丁香婷婷综合视频 | 免费观看四虎精品国产永久 | 亚洲欧美在线精品一区二区 | 久久久久久久成人午夜精品福利 | 日本一本一道久久香蕉免费 | 日本片免费观看一区二区 | 午夜视频在线观看一区 | 正在播放91 | 国产精品久久久久久久9999 | 国内久久精品 | 视频一二三区 | 黄色午夜网站 | 特一级黄色片 | 日韩毛片大全免费高清 | 成 人 黄 色视频免费播放 | 国产精品伦理久久久久 | 午夜精品久久久久久久 | xxxx性bbbb| 国产免费私拍一区二区三区 | 一级看片免费视频囗交 | 永久免费影视在线观看 | 天堂色 | 免费网站看av片 | 中文字幕在线看视频一区二区三区 | 国产香港三级理论在线 | 5060精品国产福利午夜 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 欧美人与禽 | 色天使亚洲综合在线观看 | 伊人网站在线 | 婷婷综合 在线 | 小雪被老外黑人撑破了 | 美国一级毛片片aa久久综合 | 手机在线精品视频 |