嵌入式軟件--stm32 DAY 5 USART串口通訊(上)

前邊我們學的都是通用的功能,例如GPIO、中斷,現在我們要學習的是某一個特定的功能。典型的就是通訊功能。其中,最簡單的通訊協議就是串口了。

一、串口_通訊基礎知識

1.1 串行與并行

按數據傳送的方式分類的。

串行通信一位一位傳輸,并行則是8位(16、32位)同行。(按位傳輸)

頻率越高,電流產生電磁場,干擾越大。

早期用的硬盤ATA,后來有了SATA硬盤(S是串行的意思)

傳輸接口基本上都是串行。

1.2 單工、半雙工、全雙工

單工傳輸:數據單向傳輸,只能A-->B

半雙工傳輸:數據雙向傳輸,但同一時刻只能傳一個方向,不可同時。如對講機!

全雙工傳輸:至少2條線,同時雙向傳輸。

1.3 同步和異步

同步和異步區別:有無時鐘!

同步至少兩根線:一個傳輸時鐘信號,一個傳輸數據信號

異步只有一根線,單工或半雙工

二、串口通訊:

兩根線實現全雙工

串口通訊協議:

波特率:

奇偶校驗位:

奇校驗:所有1加起來是一個奇數

偶校驗:所有1加起來是一個偶數

空閑位:

分數波特率的產生

小數部分:DIV_Fraction

整數部分:DIV_Mantissa

狀態寄存器SR

IDEA:0沒有檢測到空閑 ,1檢測到空閑總線

TXE:

TC:

RXNE:

控制寄存器1USART_CR1

控制寄存器2USART_CR2

三、USART外設

同步異步收發器,串行通信設備,全雙工數據交換。

UART與USART相比去掉了同步通訊功能

USART1通訊速率最高,可以達到4.5Mbps。2,3,4,5最高只有USART1的一半。

我們在stm32中,調試口用USART1.

以前臺式電腦,就是以上的Bj9接口.?

UART是異步收發器。UART,有時指設備,有時指協議。

RS485兩根線,作差分傳輸,半雙工。

四、波特率設置

分數波特率的產生

接收器和發送器的波特率在USARTDIV的整數和小數寄存器中的值應設置成相同。

fck=72MHZ

如果DIV_Mantissa=27,整數是27,DIV_Fraction=12(USART_BRR=0x1BC),小數是12.

例二是我們要常用的,可以配波特率。

五、串口所用寄存器

TDR

RDR

檢測到空閑幀,IDLE置1.

六、寄存器實現

目前很多電腦沒有串口接口,為了使用串口,我們自制的下載器STLink2.1擁有USB轉串口的功能。

所用引腳:

上位機,串口調試工具:

文末給大家分享的資料包里有。我們能通過串口工具向stm32發信息。當然stm32要想收到,必須有相應的接收程序。

2.1 創建工程

?

創建新的外設代碼文件USART

?

有了新的文件,KEIL里面必須配置上。

?

之后便是通過VSCODE打開。

2.2 代碼編寫?

將usart.c和usart.h,預處理編碼做好。聲明需要編寫的函數。

我們用的usart1在APB2系統總線上。

我們也要開啟GPIO的時鐘,因為有輸入輸出。

usart.h

#ifndef __USART_H
#define __USART_H#include "stm32f10x.h"
//初始化
void USART_Init(void);//發送一個字符
void USART_SendChar(uint8_t ch);//接收一個字符
uint8_t USART_ReceiveChar(void);#endif

usart.c?

#include "usart.h"//初始化
void USART_Init(void)
{//開啟時鐘RCC->APB2ENR |= RCC_APB2ENR_USART1EN;RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;//GPIO工作模式// PA9:TX 復用推挽輸出,CNF=10,MODE=11GPIOA->CRH |= GPIO_CRH_MODE9;GPIOA->CRH |= GPIO_CRH_CNF9_1;GPIOA->CRH &= ~GPIO_CRH_CNF9_0;// PA10:RX 浮空輸入,CNF=01,MODE=00GPIOA->CRH &= ~GPIO_CRH_MODE10;GPIOA->CRH &= ~GPIO_CRH_CNF10_1;GPIOA->CRH |= GPIO_CRH_CNF10_0;//串口模塊設置//設置波特率 115200USART1->BRR = 0x271;//使能串口和收發模塊USART1->CR1 |= USART_CR1_UE;USART1->CR1 |= (USART_CR1_TE|USART_CR1_RE);//配置數據幀格式USART1->CR1 &=~ USART_CR1_M;   //長度為8位的數據,沒有校驗位USART1->CR1 &=~ USART_CR1_PCE;  //無校驗,不使用校驗位USART1->CR2 &=~ USART_CR2_STOP;  //1位停止位}//發送一個字符
void USART_SendChar(uint8_t ch)
{//判斷TDR是否為空,必須等待TDR為空才能寫入數據,也就是繼續發送while((USART1->SR & USART_SR_TXE)==0){}//將要發送的數據寫入TDRUSART1->DR = ch;
}//接收一個字符
uint8_t USART_ReceiveChar(void)
{//判斷RDR是否非空。必須有數據才能讀取數據while((USART1->SR & USART_SR_RXNE)==0){}//讀取接收到的數據,返回return USART1->DR;
}

main.c

#include "usart.h"
#include "delay.h"int main(void)
{//1.初始化USART_Init();//發送單個字符USART_SendChar('A');USART_SendChar('B');USART_SendChar('C');USART_SendChar('\n');while(1){//不停發送字符USART_SendChar('D');USART_SendChar('\n');//延時Delay_ms(500);}}

?

還可以看看接收,接收到我們在軟件中發送的,再次發到軟件。

這樣可能不太明顯,如果我們在軟件上位機發給stm32一個小寫字母,我們32端收到后,將其轉化為大寫字母,再次發到上位機。因為小寫字母與大寫字母在ASCII值相差32,所以只要做差即可

?

七、資料

stm32開發官方版下載丨最新版下載丨綠色版下載丨APP下載-123云盤

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

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

相關文章

c++混淆工具Hikari-LLVM15-llvm-18.1.8rel編譯安裝

目錄 1. windows 編譯1. 2 編譯工具安裝1.2.1 下載w64devkit1.2.2 添加環境變量1.2.3 驗證一下 1.3 下載llvm-18.1.8rel1.4 編譯 2. Android studio增加混淆編譯2.1 替換NDK中clang2.2 配置混淆編譯項 3. Linux編譯安裝4. Linux下增加混淆編譯4.1 在CMakeLists.txt中設置clang編…

【EasyPan】loadDataList方法及checkRootFilePid方法解析

【EasyPan】項目常見問題解答(自用&持續更新中…)匯總版 一、loadDataList方法概覽 /*** 文件列表加載接口* param session HTTP會話對象* param shareId 必須參數,分享ID(使用VerifyParam進行非空校驗)* param …

Vue3渲染引擎:虛擬DOM與響應式原理

Vue3渲染引擎:虛擬DOM與響應式原理 在當今的前端開發中,Vue.js作為一種流行的JavaScript框架,經常被用來構建用戶界面。而Vue.js 3作為其最新版本,在性能和功能上進行了許多優化和改進。其中,Vue3渲染引擎的核心原理—…

【論文閱讀】Attentive Collaborative Filtering:

Attentive Collaborative Filtering: Multimedia Recommendation with Item- and Component-Level Attention Attentive Collaborative Filtering (ACF)、隱式反饋推薦、注意力機制、貝葉斯個性化排序 標題翻譯:注意力協同過濾:基于項目和組件級注意力的…

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】2.1 數據查詢基礎(SELECT/WHERE/GROUP BY/HAVING)

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 第2章 SQL語法進階:數據查詢基礎(SELECT/WHERE/GROUP BY/HAVING)2.1 數據查詢基礎2.1.1 SELECT 語句:從表中提取數據2.1.1.1 基礎語法與列選擇2.1.1.2 列別名與表達式2.1.1.3 去重與排序2.1.2 WHERE…

深度解析:基于Python的微信小程序自動化操作實現

引言 在當今數字化時代,自動化技術正在改變我們與軟件交互的方式。本文將深入解析一個使用Python實現的微信小程序自動化操作腳本,該腳本能夠自動識別屏幕上的特定圖像并執行點擊操作。這種技術在自動化測試、批量操作和效率工具開發中有著廣泛的應用前…

layui下拉框輸入關鍵字才出數據

html里這樣放 <div class"layui-form-item"><label class"layui-form-label">合同方&#xff1a;</label><div class"layui-input-block rightinline"><input type"text" name"select_text" ids…

bash和zsh的區別

Bash&#xff08;Bourne-Again SHell&#xff09;和 Zsh&#xff08;Z Shell&#xff09;都是 Unix/Linux 系統中的主流 Shell&#xff0c;但它們在功能、配置和用戶體驗上有顯著區別。以下是兩者的詳細對比&#xff1a; 1. 歷史與兼容性 特性BashZsh誕生時間1989 年&#xff…

組件通信-v-model

概述&#xff1a;實現 父?子 之間相互通信。 前序知識 —— v-model的本質 <!-- 使用v-model指令 --> <input type"text" v-model"userName"><!-- v-model的本質是下面這行代碼 --> <input type"text" :value"use…

虛擬機(Virtual Machine, VM)的簡單介紹

目錄 一、虛擬機的基本概念 二、虛擬化技術的分類 三、虛擬機的核心架構 四、虛擬機的核心應用場景 五、虛擬機的優缺點分析 六、虛擬機與容器技術的對比 七、虛擬機的未來趨勢 八、總結 一、虛擬機的基本概念 虛擬機&#xff08;VM&#xff09;是一種通過軟件模擬的完…

Xcode16提交App Store審核時提示bitcode報錯

提交AppStore時出現bitcode報錯&#xff0c;內容如下&#xff1a; Upload was cancelled. 2025-04-30 02:15:48.349 [ContentDelivery.Uploader.600000DB4380] Show Progress: Upload failed. Validation failed Invalid Executable. The executable Blockolot.app/Frameworks/…

Flutter TabBar / TabBarView 詳解

目錄 一、引言 二、基本用法 代碼解析 三、主要屬性 3.1 TabBar 3.2 TabBarView 四、進階定制&#xff1a;突破默認樣式 4.1 視覺樣式深度定制 4.2 自定義指示器與標簽 4.3 動態標簽管理 五、工程實踐關鍵技巧 5.1 性能優化方案 5.2 復雜手勢處理 5.3 響應式布局…

mathtype轉化

mathtype轉latex 點擊預置 選擇剪切和復制預置 點擊MathML 或 TeX&#xff0c;選擇 LaTeX 2.09 and later mathtype轉word自帶編碼器 與前面都相同&#xff0c;選擇 MathML2.0&#xff08;m namespace&#xff09;

AI檢測的荒謬性:當規則淪為一場概率游戲

當今高校對AI檢測工具的依賴&#xff0c;已經演變成一場標準混亂的鬧劇。有的學校指定格子達&#xff0c;有的迷信維普&#xff0c;而同一篇論文在不同的系統里竟能得出天差地別的結果——在格子達AI檢測率僅12%的文章&#xff0c;放到維普卻可能飆升到60%。這意味著&#xff0…

react-14defaultValue(僅在首次渲染時生效)和value(受 React 狀態控制)

在 React 中&#xff0c;defaultChecked/checked 和 defaultValue/value 是用于處理表單元素初始值和受控值的屬性對。區別在于表單元素是否受 React 組件狀態控制。 1. defaultValue 作用&#xff1a;設置表單元素的初始值&#xff08;僅在首次渲染時生效&#xff09;。特點…

Go語言基礎學習詳細筆記

文章目錄 初步了解Go語言Go語言誕生的主要問題和目標Go語言應用典型代表Go語言開發環境搭建經典HelloWorld 基本程序結構編寫學習變量常量數據類型運算符 條件語句if語句switch 語句 跳轉語句常用集合和字符串數組切片Map實現Set**字符串** 函數**基本使用用例驗證** 面向對象編…

wrod生成pdf。[特殊字符]改背景

import subprocess import os,time from rembg import remove, new_session from PIL import Image import io from docxtpl import DocxTemplate, InlineImage from docx.shared import Inches input_folder ‘tupian’ # 輸入文件夾 kouchu_folder ‘kouchu’ # 去背景圖像…

基于SpringBoot和PostGIS的應急運輸事件影響分析-以1.31側翻事故為例

目錄 前言 一、技術實現路徑 1、需要使用的數據 2、空間分析方法 二、相關模塊設計與實現 1、運輸路線重現開發 2、事故點影響范圍實現 3、WebGIS可視化實現 三、討論 1、界面結果展示 2、影響范圍分析 四、總結 前言 在交通運輸發達的當今社會&#xff0c;應急運輸…

NetBox:運維利器,網絡與數據中心管理平臺

NetBox 詳細介紹&#xff1a;開源 IPAM 和 DCIM 工具的全面解析 1. 引言 在現代網絡和數據中心管理中&#xff0c;基礎設施的復雜性不斷增加&#xff0c;傳統的電子表格或手動記錄方式已無法滿足高效、準確和可擴展的管理需求。NetBox 作為一個開源的 IP 地址管理&#xff08…

澳鵬干貨 | 動態判斷:如何用“群體智慧“優化AI數據標注流程?

20世紀初&#xff0c;800人集體猜測一頭公牛的重量&#xff0c;結果與真實數值誤差不足1%——這就是著名的"群體智慧"效應。如今&#xff0c;這一古老智慧正以全新形態賦能AI訓練&#xff1a;通過動態優化標注流程&#xff0c;讓AI訓練結果像人群一樣達成精準共識。 …