久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4185|回復: 1
打印 上一主題 下一主題
收起左側

基于CH32V103的多串口通訊及驗證

[復制鏈接]
跳轉到指定樓層
樓主
H32V103配置有3個串口,適用于需要同時使用多個串口工作的環境,例如用在一個采用串口屏來顯示工作界面并繪制數據波形曲線、一個串口用來控制數據記錄儀來存儲原始數據、一個串口來控制MP3音頻播放模塊來播報數據或發出語音提示等。
那么這3個串行通訊口都使用哪些引腳呢?
其使用的引腳情況如表1所示:

  
串口序號
  
TX
RX
USART1
A.9
A.10
USART2
A.2
A.3
USART3
B.10
B.11

其中,USART1主要供打印輸出之用,其接口電路如圖1所示。

1 串口1接口電路


那么我們如何才能在使用器件少的情況下,來完成同時測試3路串口通信的任務呢?
這里介紹的方法是,讓2路串口進行收發通信,讓另一路串口來輸出信息。
具體的任務分配是:
USART1執行老本行,來完成信息輸出的工作;而將USART2USART3組成一個模擬雙方收發數據的終端。
那完成這一任務都需要哪些器件呢?
一條杜邦線,一個USBTTL通信串口模塊及導線,具體的連接形式如圖2所示。
杜邦線的作用是將USART2TX連接到USART3RX,這樣就用一條杜邦線連接起了模擬通信的收發雙發。
USBTTL通信串口模塊大的作用,則是將USART1的輸出信息傳輸到電腦,并通過串口助手等工具軟件來顯示信息。
當然了,如果你要想令USART2USART3的地位平等,那也很容易,無非是再添加一條杜邦線,將空置的2個通訊引腳連接起來便是了!

2 多串口通信線路連接

那在程序設計上該如何設計呢?
為了便于測試,這里將待發送的信息存入數組中:
u8 TxBuffer[] = "Buffer Send fromUSART2 to USART3 by polling!";
然后通過USARTx_CFG函數對USART2USART3進行初始化,其內容如下:
  1. void USARTx_CFG(void)
  2. {
  3. GPIO_InitTypeDef GPIO_InitStructure;
  4. USART_InitTypeDef USART_InitStructure;
  5. RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2|RCC_APB1Periph_USART3, ENABLE);     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB , ENABLE);
  6. /* USART2 TX-->A.2   RX-->A.3 */
  7. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  8. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
  10. GPIO_Init(GPIOA, &GPIO_InitStructure);
  11. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  12. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  13. GPIO_Init(GPIOA, &GPIO_InitStructure);
  14. /* USART3 TX-->B.10  RX-->B.11 */
  15. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  16. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  17. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
  18. GPIO_Init(GPIOB, &GPIO_InitStructure);
  19. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  20. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  21. GPIO_Init(GPIOB, &GPIO_InitStructure);   
  22. USART_InitStructure.USART_BaudRate = 115200;
  23. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  24. USART_InitStructure.USART_StopBits = USART_StopBits_1;
  25. USART_InitStructure.USART_Parity = USART_Parity_No;
  26. USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  27. USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
  28. USART_Init(USART2, &USART_InitStructure);
  29. USART_Cmd(USART2, ENABLE);
  30. USART_Init(USART3, &USART_InitStructure);
  31. USART_Cmd(USART3, ENABLE);
  32. }
復制代碼

實現多串口通信測試的主程序如下:
  1. int main(void)
  2. {
  3. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  4. Delay_Init();
  5. USART_Printf_Init(115200);
  6. printf("SystemClk:%d\r\n",SystemCoreClock);
  7. printf("USART Polling TEST\r\n");
  8. USARTx_CFG();
  9. while(TxCnt<TxSize)
  10. {
  11. USART_SendData(USART2, TxBuffer[TxCnt++]);
  12. while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
  13. while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET);
  14. RxBuffer[RxCnt++] = (USART_ReceiveData(USART3));
  15. }
  16. TransferStatus=Buffercmp(TxBuffer,RxBuffer,TxSize);
  17. if(TransferStatus)
  18. {
  19. printf("send success!\r\n");
  20. printf("TXBuffer: %s \r\n",TxBuffer);
  21. printf("RxBuffer: %s \r\n",RxBuffer);
  22. }
  23. else
  24. {
  25. printf("send fail!\r\n");
  26. printf("TXBuffer: %s \r\n",TxBuffer);
  27. printf("RxBuffer: %s \r\n",RxBuffer);
  28. }
  29. while(1);
  30. }
復制代碼

其中關鍵的程序段是:
while(TxCnt<TxSize)
{
    USART_SendData(USART2,TxBuffer[TxCnt++]);
    while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
    while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET);
    RxBuffer[RxCnt++] = (USART_ReceiveData(USART3));
}
它通過定義循環的次數,由USART2把信息發送出去,而與此同時又通過USART3將信息接收回來,最終由。
USART1把接收的信息原樣顯示出來以供比對判別。
經編譯下載后,其運行效果如圖3所示,說明多串口通信是正確的。
若感興趣的話,在此基礎上可以拓展出許多有應用價值的功能。


3 多串口通信測試

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:337139 發表于 2020-11-26 09:45 | 只看該作者
很詳細的,可以做到分時選通。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩视频精品 | 一区二区三区视频在线 | 久久精品亚洲欧美日韩精品中文字幕 | 久久一区二区三区四区五区 | 精品二区视频 | 天天综合干 | 欧美精品在线免费 | 久久综合一区二区 | 国产91亚洲精品一区二区三区 | 男人的天堂中文字幕 | 久久久久91 | 天天澡天天狠天天天做 | 中文字幕在线第一页 | 91国在线高清视频 | 亚洲国产日韩欧美 | 亚洲视频a| 国产麻豆一区二区三区 | 二区中文字幕 | 一二三在线视频 | 男女羞羞视频在线免费观看 | 91精品一区二区三区久久久久久 | 视频在线观看一区 | 国产成人在线观看免费 | 国产精品久久久久久久久久久免费看 | 日日操操 | 81精品国产乱码久久久久久 | 一区二区在线 | 亚洲欧美日韩久久 | 欧美精品video| 国产精品一二三区 | 国产精品自产av一区二区三区 | 在线看中文字幕 | 91九色在线观看 | 日本高清视频在线播放 | 中文字幕一区二区三区在线观看 | 久久极品| 欧美激情免费在线 | 四虎影视免费观看 | 精品欧美 | 日日夜夜天天 | av国产精品毛片一区二区小说 |