色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

如何通過MM32F013x-UART 9bit實現UART多處理器通信

西西 ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2021-01-16 15:30 ? 次閱讀

在上一次的靈動微課堂中和大家分享過MM32F013x-UART 9bit通信實例,本次微課堂在此實例的基礎上實現UART多處理器通信。MM32F013x系列MCU支持UART多處理器通信,其工作原理是主從機設備采用復用漏極開路,主從機外部接上拉電阻,在空閑時使從機處于靜默模式,主機要控制從機執行任務時主機發送指令喚醒從機并發送數據控制從機執行相應任務。

1、UART靜默模式

MM32F013x系列MCU UART靜默模式的特點

任何接收狀態位都不會被設置

所有的接收中斷都被禁止

UART_CCR寄存器中的RWU位被置1。RWU可以被硬件自動控制或在某個條件下由軟件寫入。

根據UART_CCR寄存器中的WAKE位狀態,UART多處理器通信有二種方法進入或退出靜默模式分別是:

WAKE 位被設置0:進行空閑總線檢測。

WAKE 位被設置1:進行地址標記檢測。

空閑總線檢測

空閑幀喚醒可以同時喚醒所有從機,在從機處于靜默模式時主機發送空閑幀(即所有位均為1的數據)實現多個從機同步被喚醒。

地址標記檢測

地址標記喚醒可以喚醒單個從機,從機進入靜默模式時,主機向從機尋址發送地址幀,從機自動比對地址,地址配對正確則該從機被喚醒,否則繼續進入靜默模式。這樣只有被主機尋址的從機才被喚醒激活并接收數據,從而減少未被尋址的從機參與帶來的多余的UART服務開銷。

2、配置流程

與UART多處理器通信相關的主要寄存器有UART通用控制寄存器、UART接收地址寄存器UART_RXADDR和UART接收掩碼寄存器UART_RXMASK其描述如下寄存器表所示:


圖1

如上圖1所示為UART通用控制寄存器UART_CCR,在MM32F013x UM手冊的第489和第490頁有關于該寄存器位的詳細描述。本實例UART多處理器通信要用到的相關于UART通用控制寄存器UART_CCR位的說明如下:

Bit13

WAKE(rw,reset:0x00)喚醒方法,該位決定UART多機通信從機喚醒的方法。

1:地址標記喚醒。
庫函數設置:
UART_WakeUpConfig(UART1,UART_WakeUp_AddressMark);

0:空閑總線喚醒。
庫函數設置:
UART_WakeUpConfig(UART1, UART_WakeUp_IdleLine);

Bit12

RWU(rw, reset:0x00)接收喚醒,該位用來決定是否把UART置于靜默模式。該位可以由軟件設置或清除。當喚醒序列到來時,硬件也會自動將其清零。

1:接收器處于靜默模式。
庫函數設置:
UART_ReceiverWakeUpCmd(UART1, ENABLE);

0:接收器處于正常工作模式。
庫函數設置:
UART_ReceiverWakeUpCmd(UART1, DISABLE);

注:在設置地址標記喚醒時,如果接收 buffer 非空則不能軟件修改。

Bit11

B8EN(rw, reset:0x00)UART同步幀發送第9bit使能控制位。該位使能后校驗使能PEN不起作用。

1:使能同步幀第9bit發送。
庫函數設置:
UART_Enable9bit(UART1, ENABLE);

0:禁止同步幀第9bit發送。
庫函數設置:
UART_Enable9bit(UART1, DISABLE);

Bit10

B8TOG(rw,reset:0x00)UART同步幀發送第9bit自動翻轉控制位。

1:使能第9bit自動翻轉。
庫函數設置:
UART_Set9bitAutomaticToggle(UART1, ENABLE);

0:禁止第9bit自動翻轉。
庫函數設置:

UART_Set9bitAutomaticToggle(UART1, DISABLE);
注:在 B8TXD 和 B8POL 的值相同時,在配置完寄存器后傳輸的第二個數據開始翻轉,第一個數據默認為地址位。

Bit8

B8TXD(rw,reset:0x00)UART同步幀發送數據第9bit。

1:發送同步幀第9bit為高電平。
庫函數設置:
UART_Set9bitLevel(UART1, ENABLE);

0:發送同步幀第9bit為低電平。
庫函數設置:
UART_Set9bitLevel(UART1, DISABLE)

o4YBAF_8APWAKuXTAAEDMipZaKs533.png


圖2

如上圖2所示為UART接收地址寄存器UART_RXADDR,在MM32F013x UM手冊的第491頁有關于該寄存器位的詳細描述。本實例UART多處理器通信要用到的相關于UART_RXADDR接收地址寄存器位的說明如下:

Bit31:8:

Reserved,始終讀為0x00

Bit7:0:

RXADDR(rw,reset:0x00)UART 同步幀數據本機匹配地址。

庫函數設置:
UART_SetRXAddress(UART1, SLAVEADDR);

其中地址參數SLAVEADDR可以設置為宏定義形式。

如果 RXMASK =0xFF時接收到的同步幀數據與本機匹配地址相同時,產生RXB8_INTF。地址 0是廣播地址,收到后都會響應。

pIYBAF_8AQaAI-4jAAEtJk6g1WI355.png


圖3

如上圖3所示為UART接收掩碼寄存器UART_RXMASK,在MM32F013x UM手冊的第492頁有關于該寄存器位的詳細描述。本實例UART多處理器通信要用到的相關于UART_RXMSK接收掩碼寄存器位的說明如下:

Bit31:8:

Reserved,始終讀為0x00

Bit7:0:

RXMASK(rw,reset:0xFF)UART數據位全為“0”時,接收到任何數據都產生同步幀中斷請求。如果數據位為“1”,RDR和RXADDR的相應位匹配時,產生同步幀中斷請求。

庫函數設置:

UART_SetRXMASK(UART1,SLAVEADDR); 其中地址參數SLAVEADDR可以設置為宏定義形式。

根據上文與UART 9bit多處理器通信相關的寄存器位的描述,本實例從機喚醒模式使用標記從機地址方式,在MM32F013x-UART 9bit通信實例的基礎上增加從機UART 9bit多處理器通信相關的寄存器位的初始化,這里以庫函數方式給出,增加的4行代碼如下所示:

//Wake up method
UART_WakeUpConfig(UART1, UART_WakeUp_AddressMark);
//Synchronous frame match address
UART_SetRXAddress(UART1, SLAVEADDR);
//Synchronous frame match address mask
UART_SetRXMASK(UART1,SLAVEADDR);
//Receive wake up method
UART_ReceiverWakeUpCmd(UART1, ENABLE);

3、程序配置

01、初始化主機MM32F013x UART1 9bit通信

本實例使用MM32F0133C7P核心板作為UART多處理器通信,主機初始化代碼如下所示:

bsp_UART1_Master_irq_9Bit_Init(u32 baudrate)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    UART_InitTypeDef UART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE);

    GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

    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);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    UART_StructInit(&UART_InitStructure);
    UART_InitStructure.BaudRate = baudrate;
    UART_InitStructure.WordLength = UART_WordLength_8b;
    UART_InitStructure.StopBits = UART_StopBits_1;
    UART_InitStructure.Parity = UART_Parity_No;
    UART_InitStructure.HWFlowControl = UART_HWFlowControl_None;
    UART_InitStructure.Mode = UART_Mode_Rx | UART_Mode_Tx;

    UART_Enable9bit(UART1, ENABLE);
    UART_Set9bitLevel(UART1, DISABLE);
    UART_Set9bitAutomaticToggle(UART1, ENABLE);
    UART_Init(UART1, &UART_InitStructure);

    UART_ITConfig(UART1, UART_IT_RXIEN, ENABLE);

    NVIC_InitStructure.NVIC_IRQChannel = UART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPriority = 3;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    UART_Cmd(UART1, ENABLE);
}

02、初始化從機MM32F013x UART1 9bit通信

MM32F0133C7P UART1從機初始化代碼如下所示:

注意:多從機通信,初始化從機串口時需要修改從機地址宏為0x01、0x02等。

#define SLAVEADDR  (0x01)
void bsp_UART1_Slave_irq_9Bit_Init(u32 baudrate)
{
   GPIO_InitTypeDef GPIO_InitStructure;
   UART_InitTypeDef UART_InitStructure;
   NVIC_InitTypeDef NVIC_InitStructure;

   RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE);

   GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
   GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

   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_OD;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

   UART_StructInit(&UART_InitStructure);
   UART_InitStructure.BaudRate = baudrate;
   UART_InitStructure.WordLength = UART_WordLength_8b;
   UART_InitStructure.StopBits = UART_StopBits_1;
   UART_InitStructure.Parity = UART_Parity_No;
   UART_InitStructure.HWFlowControl = UART_HWFlowControl_None;
   UART_InitStructure.Mode = UART_Mode_Rx | UART_Mode_Tx;

   UART_WakeUpConfig(UART1, UART_WakeUp_AddressMark);
   UART_WakeUpConfig(UART1, UART_WakeUp_IdleLine);
   UART_SetRXAddress(UART1, SLAVEADDR);
   UART_SetRXMASK(UART1,0x02);
   UART_ReceiverWakeUpCmd(UART1, ENABLE);
   UART_Enable9bit(UART1, ENABLE);
   UART_Set9bitLevel(UART1, DISABLE);
   UART_Set9bitAutomaticToggle(UART1, ENABLE);
   UART_Init(UART1, &UART_InitStructure);
   UART_ITConfig(UART1, UART_IT_RXIEN, ENABLE);

   NVIC_InitStructure.NVIC_IRQChannel = UART1_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&NVIC_InitStructure); 

   UART_Cmd(UART1, ENABLE);
}

03、編寫MM32F013x UART1主機中斷服務函數

MM32F0133C7P UART1主機中斷服務函數,代碼如下所示:

#define RX_MASTER_LEN   (3)
u8 g_Rx_Master_Buf[RX_MASTER_LEN] = {0x00};
u8 g_Rx_Master_Cnt = 0;
void UART1_IRQHandler(void)
{
     u8 res;
     if(UART_GetITStatus(UART1, UART_IT_RXIEN) != RESET) 
     {
          UART_ClearITPendingBit(UART1, UART_IT_RXIEN);
          res = UART_ReceiveData(UART1);
          g_Rx_Master_Buf[g_Rx_Master_Cnt] = res;
          if(g_Rx_Master_Cnt < RX_MASTER_LEN-1)
          {
             g_Rx_Master_Cnt++;
          }
          else
          {
             g_Rx_Master_Cnt = 0;
          }
     }
}

04、編寫MM32F013x UART1從機中斷服務函數

MM32F0133C7P UART1從機中斷服務函數,代碼如下所示:

#define RX_SLAVE_LEN    (3)
u8 g_Rx_Slave_Buf[RX_SLAVE_LEN] = {0x00};
u8 g_Rx_Slave_Cnt = 0;
void UART1_IRQHandler(void)
{
     u8 res;
     if(UART_GetITStatus(UART1, UART_IT_RXIEN) != RESET) 
     {
         UART_ClearITPendingBit(UART1, UART_IT_RXIEN);
         res = UART_ReceiveData(UART1);
         g_Rx_Slave_Buf[g_Rx_Slave_Cnt] = res;
         if(g_Rx_Slave_Cnt < RX_SLAVE_LEN-1)
         {
             g_Rx_Slave_Cnt++;
         }
         else
         {
             g_Rx_Slave_Cnt = 0;
         }  
     }
}

05、編寫MM32F013x UART1主從機

通用發送數據函數

MM32F0133C7P UART1主從機通用發送函數,代碼如下所示:

u8 g_Tx_Master_Buf[2] = {0xAA,0x55};
void bsp_UART_Send_Byte_Data(UART_TypeDef* uart,u8 data)
{
    UART_SendData(uart, data);
    while(!UART_GetFlagStatus(uart, UART_FLAG_TXEPT));
}
void bsp_UART_Send_Bytes_Data(UART_TypeDef* uart, u8* buf, u16 len)
{
    while(len--)
    {
        bsp_UART_Send_Byte_Data(uart,*buf++);
    }
}

06、編寫MM32F013x UART1主機發送從機地址函數

MM32F0133C7P UART1主機發送從機地址函數,代碼如下所示:

u8 g_Tx_Master_Buf[2] = {0xAA,0x55};
#define SLAVEADDR1       (0x01)
#define SLAVEADDR2       (0x02)
void bsp_UART_Send_SlaveAddr(UART_TypeDef* uart,u8 data)
{
    UART_SendData(uart, data);
    while(!UART_GetFlagStatus(uart, UART_FLAG_TXEPT));
}

07、編寫MM32F013x UART1主機按鍵

發送從機地址和數據函數

宏定義按鍵GPIO端口和管腳,本實例只用到MM32F013x核心板的PA0作為KEY1對應核心板。

#define KEY1_GPIO_Port  GPIOA
#define KEY1_Pin         GPIO_Pin_0
#define KEY2_GPIO_Port  GPIOB
#define KEY2_Pin         GPIO_Pin_2
#define KEY3_GPIO_Port  GPIOB
#define KEY3_Pin        GPIO_Pin_10
#define KEY4_GPIO_Port  GPIOB
#define KEY4_Pin        GPIO_Pin_11
#define KEY1         GPIO_ReadInputDataBit(KEY1_GPIO_Port,KEY1_Pin)  //read key1
#define KEY2         GPIO_ReadInputDataBit(KEY2_GPIO_Port,KEY2_Pin)  //read key2
#define KEY3         GPIO_ReadInputDataBit(KEY3_GPIO_Port,KEY3_Pin)  //read key3
#define KEY4         GPIO_ReadInputDataBit(KEY4_GPIO_Port,KEY4_Pin)  //read key4
#define KEY1_DOWN_VALUE     1   //KEY1
#define KEY2_DOWN_VALUE     0   //KEY2
#define KEY3_DOWN_VALUE     0   //KEY3
#define KEY4_DOWN_VALUE     0   //KEY4
#define KEY1_PRES           1   //KEY1
#define KEY2_PRES           2   //KEY2
#define KEY3_PRES           3   //KEY3
#define KEY4_PRES           4   //KEY4
//Init Key GPIO
void bsp_Key_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB ,ENABLE);

    GPIO_StructInit(&GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin  = KEY1_Pin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin  = KEY2_Pin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(KEY2_GPIO_Port, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin  = KEY3_Pin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(KEY3_GPIO_Port, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin  = KEY4_Pin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(KEY4_GPIO_Port, &GPIO_InitStructure);    
}

u8 bsp_Key_Scan(u8 mode)
{
    static u8 key_up = 1;
    if(mode)
    {
        key_up = 1;
    }
    if(key_up && ((KEY1 == KEY1_DOWN_VALUE) || (KEY2 == KEY2_DOWN_VALUE) || \
                  (KEY3 == KEY3_DOWN_VALUE) || (KEY4 == KEY4_DOWN_VALUE))) 
    {
        DELAY_Ms(10);

        key_up = 0;

        if(KEY1 == KEY1_DOWN_VALUE)
        {
            return KEY1_PRES;
        }
        else if(KEY2 == KEY2_DOWN_VALUE)
        {
            return KEY2_PRES;
        }
        else if(KEY3 == KEY3_DOWN_VALUE)
        {
            return KEY3_PRES;
        }
        else if(KEY4 == KEY4_DOWN_VALUE)
        {
            return KEY4_PRES;
        }
    }
    else if((KEY1 != KEY1_DOWN_VALUE) && (KEY3 != KEY3_DOWN_VALUE) && \
            (KEY4 != KEY4_DOWN_VALUE) && (KEY2 != KEY2_DOWN_VALUE))
    {
        key_up = 1;
    }

    return 0;
}

u8 Key_Nnum = 0;
void bsp_Process_Key_Task(void)
{
    static u8 Key_Value = 0;
    Key_Value = bsp_Key_Scan(0);
    switch(Key_Value)
    {
        case KEY1_PRES:           
           if(Key_Nnum == 0)
           {
                Key_Nnum = 1;
                bsp_UART_Send_SlaveAddr(UART1, SLAVEADDR1); //Send SlaveAddr1
                bsp_UART_Send_Bytes_Data(UART1, g_Tx_Master_Buf, sizeof(g_Tx_Master_Buf)); //Send data           
            }
            else if(Key_Nnum == 1)
            {
                Key_Nnum = 0;                
                bsp_UART_Send_SlaveAddr(UART1, SLAVEADDR2); //Send SlaveAddr2
                bsp_UART_Send_Bytes_Data(UART1, g_Tx_Master_Buf, sizeof(g_Tx_Master_Buf)); //Send data 
            }          
            break;
        case KEY2_PRES:
            break;
        case KEY3_PRES:
            break;
        case KEY4_PRES:
            break;
        default :
            break;        
    }
}

08、編寫MM32F013x UART1主機

接收從機返回的數據函數

處理MM32F0133C7P UART1主機接收數據函數,代碼如下所示:

 void bsp_UART_Master_Rec_Task(void)
{
  if(((g_Rx_Master_Buf[0] == SLAVEADDR1 ) || (g_Rx_Master_Buf[0] == SLAVEADDR2)) && (g_Rx_Master_Buf[1] == 0xAA) && (g_Rx_Master_Buf[2] == 0x55))
   {
      LED1_TOGGLE();   
      g_Rx_Master_Cnt = 0;
       memset(g_Rx_Master_Buf,0,sizeof(g_Rx_Master_Buf));
    }
}

09、編寫MM32F013x UART1從機

接收主機發送的數據函數

處理MM32F0133C7P UART1主機接收數據函數,代碼如下所示:

注意:g_Rx_Slave_Buf[1]為主機發送給從機的地址由從機接收判斷,多從機通信需要修改從機地址宏:#define SLAVEADDR (0x02)等。

void bsp_UART_Slave_Rec_Task(void)
{
  if((g_Rx_Slave_Buf[0] == SLAVEADDR) && (g_Rx_Slave_Buf[1] == 0xAA) && (g_Rx_Slave_Buf[2] == 0x55))
  {
     LED1_TOGGLE();   
     bsp_UART_Send_Bytes_Data(UART1, g_Rx_Slave_Buf, sizeof(g_Rx_Slave_Buf));
     g_Rx_Slave_Cnt = 0;
     memset(g_Rx_Slave_Buf,0,sizeof(g_Rx_Slave_Buf));
  }
}

10、MM32F013x UART1 9bit多處理器通信功能演示

MM32F0133C7P多處理器通信功能演示:

主機main函數中調用DELAY_Init、LED_Init、bsp_Key_GPIO_Init和主機串口初始化函數bsp_UART1_Master_irq_9Bit_Init,在while(1)后臺調用按鍵發送從機地址和發送數據函數bsp_Process_Key_Task以及處理接收從機返回數據函數bsp_UART_Master_Rec_Task代碼如下所示:

s32 main(void)
{
    //SysTick init
    DELAY_Init();
    //LED Init
    LED_Init();
    //Key GPIO Init
    bsp_Key_GPIO_Init();
    //UART1 9Bit irt Init
    bsp_UART1_Master_irq_9Bit_Init(115200);
    while(1) 
    {
        //Key processing multi-processor communication
        bsp_Process_Key_Task();
        //Processing master receiving tasks
        bsp_UART_Master_Rec_Task();
    }
}

從機main函數中調用LED_Init和從機串口初始化函數bsp_UART1_Slave_irq_9Bit_Init,在while(1)后臺調用處理從機接收任務函數bsp_UART_Slave_Rec_Task代碼如下所示:

s32 main(void)
{
    //LED Init
    LED_Init();
    //UART1 9bit init
    bsp_UART1_Slave_irq_9Bit_Init(115200);
    while(1) 
    {
        //Processing slave receiving tasks
        bsp_UART_Slave_Rec_Task(); 
    }
}

分別編譯以上主機和從機工程代碼,然后燒錄軟件到MM32F0133C7P核心板上,燒錄多從機時需修改從機工程代碼的從機地址宏SLAVEADDR,編譯后再燒錄。本實例從機燒錄0x01和x02為例作為演示,即1臺主機和2臺從機作為演示。

4、接線方式

MM32F0133C7P多處理器通信UART主機和從機接線方法:

各從機TX線與連接,RX線與連接,從機線與連接的TX接到主機RX端,從機線與連接的RX接到主機的TX端,主從機分別外接5.1~10K值范圍之一的上拉電阻,本實例接5.1K上拉電阻。

MM32F0133C7P UART多處理器通信演示1臺主機和2臺從機分別發送和接收數據:

主機第1次按下MM32F0133C7P核心板上的S1按鍵,主機發送1字節從機地址0x01,接著發送2字節數據0xAA和0x55,從機1(地址0x01)在靜默模式下自動比對主機尋址從機的地址0x01比對成功從機1被喚醒繼續接收0xAA和0x55數據,收到完整的3字節數據時從機LED1狀態翻轉LED1亮并原樣返回收到的數據給主機,此時從機2仍處于靜默模式,主機完全收到從機1返回的3字節數據即0x01,0XAA,0x55時主機LED1狀態翻轉LED亮,實物現象如下圖4所示。

pIYBAF_8AUiAUl11AAU6PaZXDVw815.png


圖4(上從機1、中主機、下從機2)

主機第2次按下MM32F0133C7P核心板上的S1按鍵,主機發送1字節從機地址0x02,接著發送2字節數據0xAA和0x55,從機2(地址0x02)在靜默模式下自動比對主機尋址從機的地址0x02比對成功從機2被喚醒繼續接收0xAA和0x55數據,收到完整的3字節數據時從機LED1狀態翻轉LED1亮并原樣返回收到的數據給主機,此時從機1仍處于靜默模式其LED1維持上次點亮狀態,主機完全收到從機2返回的3字節數據時即0x02,0XAA,0x55時主機LED1狀態翻轉LED滅,實物現象如下圖5所示:

pIYBAF_8AV6AGrrJAAT6tRGDL40461.png


圖5(上從機1、中主機、下從機2)

5、波形抓取

邏輯分析儀抓取到的MM32F0133C7多處理器通信波形圖如下圖6和圖7所示:

圖6上波形紅色框注為主機發送:0x01、0xAA、0x55尋址從機1,從機(地址0x01)從靜默模式喚醒并收到主機發送的數據0xAA和0x55時原樣返回給主機如圖6下波形藍色框注:0x01、0xAA、0x55,此時從機2(地址0x02)并未作響應仍處于靜默模式。

pIYBAF_8AXOAZhqaAABew6Sa7Ms348.png


圖6

圖7上紅色框注為主機發送:0x02、0xAA、0x55尋址從機2,從機(地址0x02)從靜默模式喚醒并收到主機發送的數據0xAA和0x55時原樣返回給主機如圖7下波形藍色框注:0x02、0xAA、0x55,此時從機1(地址0x01)并未作響應仍處于靜默模式。

o4YBAF_8AYSAMHqvAABwNslyaPs362.png


圖7

編輯:hfy

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

    關注

    68

    文章

    19391

    瀏覽量

    230639
  • 寄存器
    +關注

    關注

    31

    文章

    5361

    瀏覽量

    120877
  • 自動控制
    +關注

    關注

    10

    文章

    720

    瀏覽量

    44269
  • uart
    +關注

    關注

    22

    文章

    1243

    瀏覽量

    101590
收藏 人收藏

    評論

    相關推薦

    靈動微課堂 (第145講) | MM32F013x——UART 9bit 通信

    靜默模式。在靜默模式里,任何接收狀態位都不會被設置,所有接收中斷被禁止。以MM32F013x系列MCU的UART通信為例,通過一個示例Demo介紹U
    發表于 11-27 10:03

    靈動微課堂 (第146講) | MM32F013x——UART 多處理器通信

    `在上一次的靈動微課堂中和大家分享過MM32F013x-UART 9bit通信實例,本次微課堂在此實例的基礎上實現UART
    發表于 12-04 16:52

    UART靜默模式/配置流程/程序配置

    在上一次的靈動微課堂中和大家分享過MM32F013x-UART 9bit通信實例,本次微課堂在此實例的基礎上實現UART
    發表于 01-22 06:13

    UART 9bit通信的同步幀方式

    MM32F013x——UART 9bit 通信
    發表于 01-27 07:10

    MM32F013x實現UART極性取反的功能應用

    本文是針對在MM32F013x實現UART極性取反的功能應用。
    的頭像 發表于 02-21 10:38 ?2837次閱讀
    在<b class='flag-5'>MM32F013x</b>上<b class='flag-5'>實現</b><b class='flag-5'>UART</b>極性取反的功能應用

    MM32F013x系列MCU支持UART多處理器通信

    MM32F013x系列MCU支持UART多處理器通信,其工作原理是主從機設備采用復用漏極開路,主從機外部接上拉電阻,在空閑時使從機處于靜默模式,主機要控制從機執行任務時主機發送指令喚醒
    的頭像 發表于 02-21 10:05 ?1374次閱讀
    <b class='flag-5'>MM32F013x</b>系列MCU支持<b class='flag-5'>UART</b><b class='flag-5'>多處理器</b><b class='flag-5'>通信</b>

    Demo介紹UART 9bit通信的同步幀方式

    UART 9bit通信的作用是第9bit用于標識是地址或數據,第9bit 為1標識是從機地址,為0標識是數據,此外
    的頭像 發表于 02-18 16:05 ?4985次閱讀
    Demo介紹<b class='flag-5'>UART</b> <b class='flag-5'>9bit</b><b class='flag-5'>通信</b>的同步幀方式

    MM32F013x——UART 多處理器通信

    MM32F013x系列MCU支持UART多處理器通信,其工作原理是主從機設備采用復用漏極開路,主從機外部接上拉電阻,在空閑時使從機處于靜默模式,主機要控制從機執行任務時主機發送指令喚醒
    發表于 01-22 06:33 ?6次下載
    <b class='flag-5'>MM32F013x</b>——<b class='flag-5'>UART</b> <b class='flag-5'>多處理器</b><b class='flag-5'>通信</b>

    MM32F013x——UART 9bit 通信

    UART 9bit通信的作用是第9bit用于標識是地址或數據,第9bit 為1標識是從機地址,為0標識是數據,此外
    發表于 01-26 08:35 ?10次下載
    <b class='flag-5'>MM32F013x</b>——<b class='flag-5'>UART</b> <b class='flag-5'>9bit</b> <b class='flag-5'>通信</b>

    MM32F013x——UART 極性取反通信

    本文是針對在MM32F013x實現UART極性取反的功能應用。
    發表于 01-29 09:41 ?17次下載
    <b class='flag-5'>MM32F013x</b>——<b class='flag-5'>UART</b> 極性取反<b class='flag-5'>通信</b>

    MM32F013x——UART 單線半雙工通信

    本文將介紹在MM32F013x實現UART單線半雙工的功能應用。
    發表于 03-10 06:06 ?36次下載
    <b class='flag-5'>MM32F013x</b>——<b class='flag-5'>UART</b> 單線半雙工<b class='flag-5'>通信</b>

    MM32F013x——UART 單線半雙工通信

    在上一章中和大家分享過MM32F013x實現UART極性取反的功能應用,本文再來介紹一下MM32F013x實現
    發表于 01-25 19:53 ?23次下載
    <b class='flag-5'>MM32F013x</b>——<b class='flag-5'>UART</b> 單線半雙工<b class='flag-5'>通信</b>

    MM32F013x——UART 極性取反通信

    在上一次的文章中和大家分享過UART多處理器通信,本文是針對在MM32F013x實現UART
    發表于 01-25 19:53 ?2次下載
    <b class='flag-5'>MM32F013x</b>——<b class='flag-5'>UART</b> 極性取反<b class='flag-5'>通信</b>

    MM32F013x——UART 多處理器通信

    在上一次的靈動微課堂中和大家分享過MM32F013x-UART 9bit通信實例,本次微課堂在此實例的基礎上實現UART
    發表于 01-25 19:55 ?4次下載
    <b class='flag-5'>MM32F013x</b>——<b class='flag-5'>UART</b> <b class='flag-5'>多處理器</b><b class='flag-5'>通信</b>

    MM32F013x——UART 9bit 通信

    在之前的微課堂中和大家分享過靈動MM32系列MCU的UART通信實例,在此實例的基礎上我們增加UART 9bit
    發表于 01-25 19:57 ?4次下載
    <b class='flag-5'>MM32F013x</b>——<b class='flag-5'>UART</b> <b class='flag-5'>9bit</b> <b class='flag-5'>通信</b>
    主站蜘蛛池模板: 亞洲人妻AV無碼在線視頻| 18禁无遮遮挡羞漫画免费阅读| 交换:年轻夫妇-HD中文字幕| 色老99九久精品偷偷鲁| ankha成人| 欧美成人无码A区在线观看免费 | 蜜桃成熟时2电影免费观看d| 真实国产精品视频国产网| 爆乳啪啪无码成人二区亚洲欧美| 美女脱内衣裸身尿口露出来 | 一个人在线观看免费视频| 处女座历史名人| 久久久无码精品亚洲A片猫咪| 亚洲色大成网站WWW永久麻豆| 精品亚洲麻豆1区2区3区| 一级毛片直接看| 久久亚洲伊人中字综合精品| 中文字幕精品在线观看| 年轻的的小婊孑2中文字幕| yellow免费| 午夜黄视频| 久久99精品涩AV毛片观看| 忘忧草在线影院WWW日本二| 国产成人小视频在线观看| 欧美成 人 网 站 免费| 宝贝乖女好紧好深好爽老师| 神马影院在线eecss伦理片| 国产欧美一区二区三区免费| 亚洲一区免费香蕉在线| 伦理电影2499伦理片| 阿力gv资源| 亚洲国产成人精品青青草原100 | 亚洲精品免费在线视频| 久久国产亚洲电影天堂| 92看看福利午夜影院| 日韩精品 电影一区 亚洲高清| 国产精品久久久久久久久免费下载| 亚洲精品无码国产爽快A片| 免费看黄色小说| 国产高清精品自在久久| 在线观看国产精美视频|