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

電子發燒友App

硬聲App

掃碼添加小助手

加入工程師交流群

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

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

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>MM32F013x——UART 單線半雙工通信

MM32F013x——UART 單線半雙工通信

2021-03-10 | pdf | 249.91KB | 次下載 | 5積分

資料介紹

本文將介紹在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 靈動微電子
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1冷柜-電氣控制系統講解
  2. 13.68 MB  |  4次下載  |  10 積分
  3. 2安川A1000變頻器中文版說明書
  4. 20.16 MB  |  3次下載  |  3 積分
  5. 3直流電路的組成和基本定律
  6. 1.67 MB   |  2次下載  |  免費
  7. 4丹佛斯2800系列變頻器說明書
  8. 8.00 MB  |  1次下載  |  5 積分
  9. 5PC8011同步開關型降壓3.5A單節鋰電池充電管理電路技術手冊
  10. 0.74 MB   |  1次下載  |  免費
  11. 6ES7243E+ES8311音頻錄制與播放電路資料
  12. 0.06 MB   |  1次下載  |  5 積分
  13. 7SDM02 激光測距模塊產品手冊
  14. 0.43 MB   |  1次下載  |  免費
  15. 8SDFM 激光測距模塊模組手冊
  16. 0.54 MB   |  1次下載  |  免費

本月

  1. 1CH341編程器軟件NeoProgrammer_2.2.0.10
  2. 20.47 MB   |  170次下載  |  1 積分
  3. 22025智能家居傳感器市場分析及創新應用
  4. 3.11 MB  |  43次下載  |  免費
  5. 3RV1126B系列開發板產品資料
  6. 4.19 MB  |  18次下載  |  免費
  7. 4CH341編程軟件下載
  8. 2.50 MB   |  16次下載  |  5 積分
  9. 5全志系列-米爾基于T153核心板開發板 四核異構、3路千兆網,賦能多元化工業場景
  10. 3.05 MB  |  12次下載  |  免費
  11. 6【開源】60余套STM32單片機、嵌入式Linux、物聯網、人工智能項目案例及入門學習資源包
  12. 10.55 MB  |  8次下載  |  免費
  13. 7冷柜-電氣控制系統講解
  14. 13.68 MB  |  4次下載  |  10 積分
  15. 8特斯拉MODEL S車載充電機主電路回路原理圖
  16. 0.81 MB   |  4次下載  |  3 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935137次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233094次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191448次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183356次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81604次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73824次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65991次下載  |  10 積分