藍橋杯----串口

(五)、串口

????? 1、串口通信簡介

???? ??制定通信的規則,通信雙方按照協議規則進行數據收發,將一個設備的數據傳送到另一個設備,擴展硬件系統,串口USART有兩根通信線Tx、Rx,可同時雙向通信,稱之為全雙工,像I2C只有一根數據線只能收或者發,之為半雙工。

? ? ? ?同步即有一根時鐘線,如SCL、SCLK時鐘線,據時鐘線指引采樣數據;異步無時鐘線,需要雙方約定采集頻率,按照約定收發數據。在藍橋杯中就需要約定運行頻率、波特率等。

? ? ? ?單端就是引腳的電平為對地的電壓差,必須共地,差分就是根據兩個線的電壓差來傳輸數據。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 九 串口簡介

?

?????? 2、串口通信結構圖

??????? 藍橋杯中可以理解設備一為電腦、設備二為單片機,Tx、Rx必須交錯連接,主機設備給串口進行供電。我們一般選用串口一以定時器二為發生器,波特率就是傳輸速度一般選用9600,在STC_ISP中串口波特率計算器中按如圖所示配置(圖 十一)生成代碼,生成后要打開總中斷與串口使能(EA = 1; ES = 1)。這樣我們就約定好了采集頻率,可以進行下一步收發。

?

? ? ? ? ? ? ? ? ? ? ? ? 圖 十 串口通信結構圖

? ? ? ? ? ? ? ? ? ? ? ? 圖 十一 串口配置

?? ????3、發送代碼展示

????? ??第一個USART1_Init就是 軟件生成的,自行添加EA = 1;ES =1,下面一個函數簡單來講就是把串口一發送映射到printf上,通過printf來發送,而printf是可以發送字符串的,借助putchar自動一個個發送,所以此時我們完善putchar函數,將發送數據ch放在SBUF中,通過檢測TI發送標志位,發送完成會變成1,所以此時通過while循環等待發送完成,在軟件中手動置0。該函數可以外部調用,但需聲明stdio.h頭文件。

??????? 通過調用printf即可完成發送,如printf(“hsj”);即可向電腦發送hsj字符串數據。在stc-isp中借助USB-CDC/串口助手可驗證。配置9600波特率、無校驗,一位停止位,選擇正確串口com再打開串口即可。

? ? ? ? ? ? ? ? ? ? 圖 十二 串口發送代碼展示

?

????? 4、接收代碼展示

???? 接收電腦傳輸數據時,可能在任何時刻,接收不及時則會導致數據流失,則我們要借助中斷暫時跳出主程序,先接收完數據再回到主程序,來完成發送功能。

? ? ?中斷標志位為4,RI為接收標志位,一旦有數據需要接收,立馬變成1。拉高Uart_Recieve_Flag標志位開始計時,在定時器一的中斷中if(Uart_Recieve_Flag==1) Uart_Recieve_Trick++;將數據儲存到數組中,并手動拉低標志位(RI = 0),如果數據過多我們就通過string.h中庫函數memset清空數組。

? ? 在Uart_Proc中檢測Uart_Recieve_Index,為0證明無數據直接跳出函數,有數據時判斷Uart_Recieve_Trick計時變量,超過10ms表示接收完成停止計時(Uart_Recieve_Flag = 0),開始解析代碼,判斷接收的數據,完成后通過memset再清空數組。

? ? ? ? ? ? ? ? ? ? ? 圖 十三 接收代碼展示1

? ? ? ? ? ? ? ? ? ? ?圖 十四 接收代碼展示2

?

????? ??5、總結

????? 第一步借助軟件配置波特率發生器

?????? 接下來完善putchar函數,借助printf發送

?????? 完成中斷處理函數

?????? 完成主程序超時解析部分

?

提供參考代碼,希望對讀者有幫助

1、串口底層代碼

#include <STC15F2K60S2.H>
#include <stdio.h>void Uart1_Init(void)	//9600bps@12.000MHz
{SCON = 0x50;		//8位數據,可變波特率AUXR |= 0x01;		//串口1選擇定時器2為波特率發生器AUXR |= 0x04;		//定時器時鐘1T模式T2L = 0xC7;			//設置定時初始值T2H = 0xFE;			//設置定時初始值AUXR |= 0x10;		//定時器2開始計時EA = 1;             //打開總中斷ES = 1;             //打開串口使能
}extern char putchar (char ch)  //將串口1映射到printf上自動發送字符串
{SBUF = ch;while(TI == 0);   //等待發送TI = 0;           //發送完成并清空標志位return ch;
}

2、處理數據函數

idata unsigned char Uart_Send[15];   //發送數據數組
idata unsigned char Uart_Recieve[10];  //接收數據數組
idata unsigned char Uart_Recieve_Index;  //接收數組指針
idata unsigned char Uart_Recieve_Flag;   //接收標志位,1表示已接收
idata unsigned char Uart_Recieve_Trick;  //計時變量,用于超時解析void Uart_Proc()
{if(Uart_Recieve_Index == 0) return;  //無數據則返回if(Uart_Recieve_Trick >=10)  //超時解析{Uart_Recieve_Flag = 0;  //停止計時Uart_Recieve_Trick = 0;//解析接收內容//解析接收內容memset(Uart_Recieve,0,10);  //清空數組Uart_Recieve_Index = 0;}
}//補充在定時器中需寫
//if(Uart_Recieve_Flag == 1) Uart_Recieve_Trick++;

3、中斷函數

void Uart_Routine() interrupt 4
{if(RI == 1)  //有數據{Uart_Recieve_Flag = 1;  //開始計時Uart_Recieve_Trick = 0;Uart_Recieve[Uart_Recieve_Index] = SBUF;  //儲存數據Uart_Recieve_Index++;RI = 0;   //復位標志位if(Uart_Recieve_Index>10)  //超載則清空數組{memset(Uart_Recieve,0,10);Uart_Recieve_Index = 0;}}}

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917392.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917392.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917392.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

錯誤: 找不到或無法加載主類 原因: java.lang.ClassNotFoundException

背景&#xff1a; 代碼沒有更改&#xff0c;主類位置也沒有移動&#xff0c;運行時突然報找不到或無法加載主類的錯誤 錯誤: 找不到或無法加載主類 原因: java.lang.ClassNotFoundException編譯器上方顯示 Java file is located outside of the module source root so it wont …

Lock 接口及實現類詳解:從 ReentrantLock 到并發場景實踐

在 Java 并發編程中&#xff0c;除了synchronized關鍵字&#xff0c;java.util.concurrent.locks.Lock接口及其實現類是另一種重要的同步機制。自 JDK 5 引入以來&#xff0c;Lock接口憑借靈活的 API 設計、可中斷的鎖獲取、公平性控制等特性&#xff0c;成為復雜并發場景的首選…

「iOS」————SideTable

iOS學習前言sideTableSlideTablesSideTableBufSideTable前言 我們在上一篇中&#xff0c;簡單的介紹了weak的實現原理。其中弱引用表就是存儲在SideTable中的&#xff0c;這里我們來學習了解一下SideTable sideTable sideTable主要用于存儲和管理對象的額外信息&#xff0c;…

【PHP】CURL請求第三方API接口

當我們需要調用第三方接口時&#xff0c;就需要使用CURL&#xff0c;通過CURL操作去請求第三方API接口&#xff0c;有的是通過POST方式&#xff0c;有的是通過GET方式&#xff0c;下面介紹一個通用的使用CURL調用API接口的方法。一、CURL操作共兩個方法&#xff0c;分別是CURL操…

對于考研數學的理解

文章目錄高等數學總結補充說明1. 微分方程與無窮級數的特殊性2. 隱藏的邏輯鏈條3. 向量代數的橋梁作用核心框架為什么這樣設計&#xff1f;結論線性代數核心邏輯框架各講之間的本質聯系1. 行列式 → 矩陣2. 矩陣 → 向量組3. 矩陣 向量組 → 線性方程組4. 矩陣 → 特征值與特征…

基于 Hadoop 生態圈的數據倉庫實踐 —— OLAP 與數據可視化(四)

目錄 四、數據可視化與 Hue 簡介 1. 數據可視化簡介 &#xff08;1&#xff09;數據可視化的重要性 &#xff08;2&#xff09;數據可視化的用途 &#xff08;3&#xff09;實施數據可視化需要考慮的問題 &#xff08;4&#xff09;幾種主要的數據可視化工具 2. Hue 簡介…

HarmonyOS 開發:基于 ArkUI 實現復雜表單驗證的最佳實踐

摘要 在現代應用開發中&#xff0c;表單是最常見的交互方式之一。不管是用戶注冊、信息錄入&#xff0c;還是登錄驗證&#xff0c;表單的可靠性直接影響用戶體驗。而在鴻蒙 ArkUI 開發中&#xff0c;雖然表單結構清晰&#xff0c;但要實現 復雜驗證&#xff08;比如&#xff1a…

高效游戲狀態管理:使用雙模式位運算與數學運算

在游戲開發中&#xff0c;狀態管理是一個核心問題。無論是任務系統、成就系統還是玩家進度跟蹤&#xff0c;我們都需要高效地存儲和查詢大量狀態。本文將深入分析一個創新的游戲狀態管理工具類 GameStateUtil&#xff0c;它巧妙結合了位運算和數學運算兩種模式&#xff0c;在存…

linux-process-control

Linux進程控制 1. 進程終止 1.1. 進程終止的本質是回收資源 1.1 釋放資源 內存資源&#xff1a; 釋放進程的地址空間&#xff08;mm_struct&#xff09;&#xff0c;包括代碼段、數據段、堆、棧等&#xff0c;通過寫時復制&#xff08;CoW&#xff09;共享的頁會減少引用計數&a…

Autoswagger:揭露隱藏 API 授權缺陷的開源工具

Autoswagger 是一款免費的開源工具&#xff0c;用于掃描 OpenAPI 文檔中列出的 API&#xff0c;查找授權漏洞。 即使在擁有成熟安全團隊的大型企業中&#xff0c;這類漏洞仍然很常見&#xff0c;而且尤其危險&#xff0c;因為即使技術水平不高的人也能利用它們。 Autoswagger…

Golang 語言 Channel 的使用方式

一、無緩存 channel無緩沖channel 可用于兩個goroutine 之間 傳遞信號&#xff0c;比如以下示例&#xff1a;順序打印1 至 100 的奇數和偶數&#xff1a;import ("fmt""time" )func main() {block : make(chan struct{})go odd(block)go even(block)time.S…

Element Plus常見基礎組件(一)

基礎組件 Button 按鈕 一、基礎用法 <el-button>默認按鈕</el-button> <el-button type"primary">主要按鈕</el-button>二、按鈕類型 (type) 類型說明示例代碼default默認按鈕<el-button>默認</el-button>primary主要按鈕&a…

sdxl量化加速筆記

文章目錄一、量化加速sdxl模型1&#xff09;涉及模型2&#xff09;環境安裝3&#xff09;轉換模型safetensor to pytorch文件4&#xff09;tensorRT的環境準備&#xff08;1&#xff09;下載tensorRT 10.10&#xff08;2&#xff09;下載cuda一、量化加速sdxl模型 1&#xff0…

西門子 G120 變頻器全解析:從認知到參數設置

在工業自動化領域&#xff0c;變頻器作為電機驅動的核心設備&#xff0c;其穩定運行與精準控制直接影響生產效率。西門子 G120 變頻器憑借可靠性能與靈活配置&#xff0c;成為眾多工業場景的優選。本文將從基礎認知、操作面板到參數設置&#xff0c;全方位帶你掌握 G120 變頻器…

【自動化運維神器Ansible】YAML支持的數據類型詳解:構建高效Playbook的基石

目錄 1 YAML數據類型概述 1.1 為什么數據類型很重要&#xff1f; 1.2 YAML數據類型分類 2 標量類型&#xff08;Scalars&#xff09; 2.1 字符串&#xff08;String&#xff09; 2.2 布爾值&#xff08;Boolean&#xff09; 2.3 數值&#xff08;Numbers&#xff09; 2…

基于崗位需求的康養休閑旅游服務實訓室建設方案

一、康養休閑旅游服務實訓室建設方案建設需求分析康養休閑旅游服務行業的快速發展對技能人才提出了精準化、場景化的能力要求&#xff0c;康養休閑旅游服務實訓室建設方案需緊密對接健康咨詢、接待服務、康樂服務等核心崗位群的實際需求。從崗位技能來看&#xff0c;健康咨詢崗…

MES 與工業物聯網(IIoT)的化學反應:為何是智能工廠的 “神經中樞”?

從“被動救火”到“主動預警”的工廠革命想象一下&#xff0c;當你正在家中熟睡時&#xff0c;智能手環突然震動&#xff0c;提醒你心率異常&#xff1b;早上出門前&#xff0c;手機 APP 告訴你愛車的某個零件即將達到磨損極限&#xff0c;建議及時更換。這些日常生活中的智能預…

工作好用小工具積累

1、內部環境太多&#xff0c;網站導航git地址&#xff1a;https://github.com/hslr-s/sun-panel/releases gitee地址&#xff1a;https://gitee.com/luofei1284999247/sun-panel

智能Agent場景實戰指南 Day 26:Agent評估與性能優化

【智能Agent場景實戰指南 Day 26】Agent評估與性能優化 開篇 歡迎來到"智能Agent場景實戰指南"系列的第26天&#xff01;今天我們將深入探討智能Agent的評估方法與性能優化技術。構建高效、可靠的智能Agent系統需要完善的評估體系和優化策略&#xff0c;本文將系統…

機器學習——下采樣(UnderSampling),解決類別不平衡問題,案例:邏輯回歸 信用卡欺詐檢測

過采樣&#xff1a; 機器學習——過采樣&#xff08;OverSampling&#xff09;&#xff0c;解決類別不平衡問題&#xff0c;案例&#xff1a;邏輯回歸 信用卡欺詐檢測-CSDN博客 &#xff08;完整代碼在底部&#xff09; 使用下采樣解決類別不平衡問題 —— 以信用卡欺詐識別為…