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

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

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

3天內(nèi)不再提示

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

電子設(shè)計 ? 來源:電子設(shè)計 ? 作者:電子設(shè)計 ? 2022-02-21 10:05 ? 次閱讀

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

1、UART靜默模式

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

任何接收狀態(tài)位都不會被設(shè)置

所有的接收中斷都被禁止

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

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

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

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

空閑總線檢測

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

地址標記檢測

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

2、配置流程

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

圖1

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

Bit13

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

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

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

Bit12

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

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

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

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

Bit11

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

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

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

Bit10

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

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

0:禁止第9bit自動翻轉(zhuǎn)。
庫函數(shù)設(shè)置:

UART_Set9bitAutomaticToggle(UART1, DISABLE);
注:在 B8TXD 和 B8POL 的值相同時,在配置完寄存器后傳輸?shù)牡诙€數(shù)據(jù)開始翻轉(zhuǎn),第一個數(shù)據(jù)默認為地址位。

Bit8

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

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

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

pIYBAGAH1mOAVOvLAAD3DpyZWu4298.png

圖2

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

Bit31:8:

Reserved,始終讀為0x00

Bit7:0:

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

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

其中地址參數(shù)SLAVEADDR可以設(shè)置為宏定義形式。

如果 RXMASK =0xFF時接收到的同步幀數(shù)據(jù)與本機匹配地址相同時,產(chǎn)生RXB8_INTF。地址 0是廣播地址,收到后都會響應(yīng)。

pIYBAGAH1rGAc7YRAAD7Dsbs9aQ839.png

圖3

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

Bit31:8:

Reserved,始終讀為0x00

Bit7:0:

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

庫函數(shù)設(shè)置:

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

根據(jù)上文與UART 9bit多處理器通信相關(guān)的寄存器位的描述,本實例從機喚醒模式使用標記從機地址方式,在MM32F013x-UART 9bit通信實例的基礎(chǔ)上增加從機UART 9bit多處理器通信相關(guān)的寄存器位的初始化,這里以庫函數(shù)方式給出,增加的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主機中斷服務(wù)函數(shù)

MM32F0133C7P UART1主機中斷服務(wù)函數(shù),代碼如下所示:

#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從機中斷服務(wù)函數(shù)

MM32F0133C7P UART1從機中斷服務(wù)函數(shù),代碼如下所示:

#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主從機

通用發(fā)送數(shù)據(jù)函數(shù)

MM32F0133C7P UART1主從機通用發(fā)送函數(shù),代碼如下所示:

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主機發(fā)送從機地址函數(shù)

MM32F0133C7P UART1主機發(fā)送從機地址函數(shù),代碼如下所示:

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主機按鍵

發(fā)送從機地址和數(shù)據(jù)函數(shù)

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

#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主機

接收從機返回的數(shù)據(jù)函數(shù)

處理MM32F0133C7P UART1主機接收數(shù)據(jù)函數(shù),代碼如下所示:

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從機

接收主機發(fā)送的數(shù)據(jù)函數(shù)

處理MM32F0133C7P UART1主機接收數(shù)據(jù)函數(shù),代碼如下所示:

注意:g_Rx_Slave_Buf[1]為主機發(fā)送給從機的地址由從機接收判斷,多從機通信需要修改從機地址宏:#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函數(shù)中調(diào)用DELAY_Init、LED_Init、bsp_Key_GPIO_Init和主機串口初始化函數(shù)bsp_UART1_Master_irq_9Bit_Init,在while(1)后臺調(diào)用按鍵發(fā)送從機地址和發(fā)送數(shù)據(jù)函數(shù)bsp_Process_Key_Task以及處理接收從機返回數(shù)據(jù)函數(shù)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函數(shù)中調(diào)用LED_Init和從機串口初始化函數(shù)bsp_UART1_Slave_irq_9Bit_Init,在while(1)后臺調(diào)用處理從機接收任務(wù)函數(shù)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臺從機分別發(fā)送和接收數(shù)據(jù):

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

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

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

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

5、波形抓取

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

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

pIYBAGAH16mAf3HGAAAPfYOo3bU827.png

圖6

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

pIYBAGAH1-iAPi-WAAAP7QvzbD8223.png

圖7

轉(zhuǎn)自:靈動MM32MCU
審核編輯:何安

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6184

    瀏覽量

    137466
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1270

    瀏覽量

    103421
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    16 位 ADC 的 汽車類與非汽車類C2000? 32 位 MCU(TMS320F28377DPTPS TMS320F28377SPTPQ)微控制

    的 MotorControl 軟件開發(fā)套件 (SDK)。F2837xD 支持新型雙核 C28x 架構(gòu),顯著提升了系統(tǒng)性能。此外,集成式模擬和控制外設(shè)還允許設(shè)計人員整合控制架構(gòu),并消除了高端系統(tǒng)對
    發(fā)表于 04-30 14:11

    靈動微電子推出全新超值型MM32F0050系列MCU

    靈動微電子推出全新超值型MM32F0050系列MCU。2018年,靈動首次上市了其主打性價比的超值型MM32F00系列,目前已陸續(xù)推出了
    的頭像 發(fā)表于 04-01 09:36 ?653次閱讀
    靈動微電子推出全新超值型<b class='flag-5'>MM32F</b>0050<b class='flag-5'>系列</b><b class='flag-5'>MCU</b>

    EE-167:使用VisualDSP的TigerSHARC多處理器系統(tǒng)簡介

    電子發(fā)燒友網(wǎng)站提供《EE-167:使用VisualDSP的TigerSHARC多處理器系統(tǒng)簡介.pdf》資料免費下載
    發(fā)表于 01-14 15:12 ?0次下載
    EE-167:使用VisualDSP的TigerSHARC<b class='flag-5'>多處理器</b>系統(tǒng)簡介

    EE-148:使用VisualDSP的SHARC多處理器系統(tǒng)簡介

    電子發(fā)燒友網(wǎng)站提供《EE-148:使用VisualDSP的SHARC多處理器系統(tǒng)簡介.pdf》資料免費下載
    發(fā)表于 01-07 14:37 ?0次下載
    EE-148:使用VisualDSP的SHARC<b class='flag-5'>多處理器</b>系統(tǒng)簡介

    EE-202:將專家鏈接器用于多處理器LDFs

    電子發(fā)燒友網(wǎng)站提供《EE-202:將專家鏈接器用于多處理器LDFs.pdf》資料免費下載
    發(fā)表于 01-06 14:33 ?0次下載
    EE-202:將專家鏈接器用于<b class='flag-5'>多處理器</b>LDFs

    EE-354:ADSP-BF60x Blackfin處理器UART增強功能

    電子發(fā)燒友網(wǎng)站提供《EE-354:ADSP-BF60x Blackfin處理器UART增強功能.pdf》資料免費下載
    發(fā)表于 01-05 09:21 ?0次下載
    EE-354:ADSP-BF60<b class='flag-5'>x</b> Blackfin<b class='flag-5'>處理器</b>的<b class='flag-5'>UART</b>增強功能

    AD14060/AD14060L:四通道SHARC DSP多處理器系列數(shù)據(jù)資料

    電子發(fā)燒友網(wǎng)站提供《AD14060/AD14060L:四通道SHARC DSP多處理器系列數(shù)據(jù)資料.pdf》資料免費下載
    發(fā)表于 01-03 15:57 ?0次下載
    AD14060/AD14060L:四通道SHARC DSP<b class='flag-5'>多處理器</b><b class='flag-5'>系列</b>數(shù)據(jù)資料

    對稱多處理器的特點是什么

    對稱多處理器(Symmetric Multi-Processing,簡稱SMP)是一種多處理器系統(tǒng),其中多個處理器共享相同的物理內(nèi)存和其他資源,并且操作系統(tǒng)將它們視為單一的邏輯處理器
    的頭像 發(fā)表于 10-10 16:36 ?869次閱讀

    對稱多處理器系統(tǒng)中的進程分配包括

    在現(xiàn)代計算機系統(tǒng)中,對稱多處理器(SMP)架構(gòu)已經(jīng)成為主流。這種架構(gòu)允許多個處理器共享相同的內(nèi)存地址空間和系統(tǒng)資源,從而提高了系統(tǒng)的處理能力和吞吐量。然而,為了充分利用SMP系統(tǒng)的性能,操作系統(tǒng)
    的頭像 發(fā)表于 10-10 16:34 ?602次閱讀

    對稱多處理器和非對稱多處理器的區(qū)別

    隨著計算需求的日益增長,單處理器系統(tǒng)已經(jīng)無法滿足高性能計算的需求。多處理器系統(tǒng)應(yīng)運而生,它們通過將多個處理器集成到一個系統(tǒng)中來提高計算能力。在多處理器系統(tǒng)中,有兩種主要的架構(gòu):對稱
    的頭像 發(fā)表于 10-10 15:58 ?2073次閱讀

    為Xilinx? Zynq?UltraScale?系列多處理器中的VCCINT_VCU軌供電

    電子發(fā)燒友網(wǎng)站提供《為Xilinx? Zynq?UltraScale?系列多處理器中的VCCINT_VCU軌供電.pdf》資料免費下載
    發(fā)表于 09-25 10:54 ?0次下載
    為Xilinx? Zynq?UltraScale?<b class='flag-5'>系列</b><b class='flag-5'>多處理器</b>中的VCCINT_VCU軌供電

    Sitara?處理器MCU支持的工業(yè)通信協(xié)議

    電子發(fā)燒友網(wǎng)站提供《Sitara?處理器MCU支持的工業(yè)通信協(xié)議.pdf》資料免費下載
    發(fā)表于 09-21 10:23 ?0次下載
    Sitara?<b class='flag-5'>處理器</b>和<b class='flag-5'>MCU</b>上<b class='flag-5'>支持</b>的工業(yè)<b class='flag-5'>通信</b>協(xié)議

    【GD32 MCU 移植教程】9、從 STM32F10x 系列移植到 GD32F30x 系列

    GD32F30x 系列 MCU 是基于 Arm? Cortex?-M4 處理器的 32 位通用微控制,與 STM32
    的頭像 發(fā)表于 09-07 09:57 ?1797次閱讀
    【GD32 <b class='flag-5'>MCU</b> 移植教程】9、從 STM32<b class='flag-5'>F10x</b> <b class='flag-5'>系列</b>移植到 GD32<b class='flag-5'>F30x</b> <b class='flag-5'>系列</b>

    TMS320F280x、TMS320C280x、TMS320F2801x數(shù)字信號處理器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TMS320F280x、TMS320C280x、TMS320F2801x數(shù)字信號處理器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 08-03 09:28 ?0次下載
    TMS320<b class='flag-5'>F280x</b>、TMS320C280<b class='flag-5'>x</b>、TMS320<b class='flag-5'>F2801x</b>數(shù)字信號<b class='flag-5'>處理器</b>數(shù)據(jù)表

    請問SCB的CYW20829 \"UART \"是否支持CAN接口?

    )、紅外接口 (IrDA) 和智能卡 (ISO 7816) 協(xié)議,所有這些協(xié)議都是基本 UART 協(xié)議的小型 變體。 此外,它還支持 9 位多處理器模式,可以 尋址通過共用 Rx 和 Tx 線路連接的外設(shè)
    發(fā)表于 07-24 06:55
    主站蜘蛛池模板: 日日噜噜爽爽狠狠视频 | 5g影院欧美成人免费 | 国产激烈床戏无遮挡观看 | 久久综合九色综合欧美狠狠 | 天天摸天天澡天天碰天天弄 | 久操视频免费观看 | 亚洲va久久久噜噜噜久久 | 亚洲国产网址 | 欧美αv日韩αv另类综合 | 国产亚洲自在精品久久 | 明日花在线观看 | 无人码一区二区三区视频 | 波多野结衣在线观看一区二区 | 天堂网在线.www天堂在线资源 | 国产亚洲精品aa在线观看 | 色香五月 | 精品伊人久久大线蕉地址 | 久久综合九色综合欧美狠狠 | 狠狠去| 丰满寡妇一级毛片 | aa亚洲| 亚洲一区欧美一区 | 一区二区三区国模大胆 | 中文字幕一区二区三区精彩视频 | 福利99| 在线亚洲一区二区 | 中文字幕一二三四区2021 | 国产女人在线视频 | 色宅男看片午夜大片免费看 | free性日本| 丁香花的视频免费观看 | 欧美污视频网站 | 国产在线精彩视频二区 | jk黑色丝袜美腿老师啪啪 | 在线国产高清 | 黄视频网站免费 | 男人午夜禁片在线观看 | xxxx日本在线播放免费不卡 | 1024手机看片你懂得的 日韩欧美 | 亚洲1314 | 亚洲福利一区福利三区 |