stm32基礎001(串口)

文章目錄

      • 通信的基本概念
        • 串行通信和并行通信
        • 單工,半雙工和全雙工
          • 串口的硬件連接
      • stm32的串口
        • 原理圖
        • CPU的芯片手冊
        • stm32串口的庫函數實現
        • 通過串口實現printf函數
        • 使用中斷實現串口的接收

通信的基本概念

串行通信和并行通信

在這里插入圖片描述
串行通信一個方向只有一個數據通道,一次傳輸一位數據,適用于傳輸距離較長,速度要求不是很高場合。

并行通信一個方向有多個數據通道,一次傳輸多位數據,適用于傳輸距離較短,速度要求很高的場合。

單工,半雙工和全雙工

在這里插入圖片描述
單工:數據只能沿著一個方向傳輸

半雙工:數據可以雙向傳輸,但是不能影響同時進行

全雙工:數據可以同時雙向傳輸

通信速率:單位時間內傳輸的比特數,叫做波特率(bps)

通信協議(串口)

通信協議就是通信方事先約定好的數據格式
在這里插入圖片描述

串口的硬件連接

在這里插入圖片描述
UART—————通用異步收發器

USART————–通用同步/異步收發器

stm32的串口

原理圖

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
USB調試串口最終連接到了CPU的PA9,PA10,這兩個引腳有串口的復用功能。

CPU的芯片手冊

在這里插入圖片描述

stm32串口的庫函數實現

在項目中添加庫函數源碼
在這里插入圖片描述

  • 開啟GPIO和USART1時鐘
  • 將PA9、PA10配置成串口復用
GPPIO_PinAFConfig(...);
  • 初始化串口
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
參數:
USARTx - 哪個串口USART_InitStruct - 串口初始化結構
typedef struct{uint32_t USART_BaudRate;     //波特率     uint16_t USART_WordLength;   //數據位長度    uint16_t USART_StopBits;     //停止位長度  uint16_t USART_Parity;      //校驗方式uint16_t USART_Mode;         //發送/接收模式  uint16_t USART_HardwareFlowControl;  //硬件流控制} USART_InitTypeDef;
  • 使能串口
USART_Cmd(....);
  • 串口數據的發送和接收

發送(輪詢)

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
//傳入哪個串口發什么數據
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
參數:USARTx - 哪個串口USART_FLAG - 哪個標志 發送完成標志 - USART_FLAG_TXE
返回SET表示有該標志    
通過串口實現printf函數

stm32的項目中可以直接使用C標準庫函數,其中printf函數沒有完全實現。預留了一個后門fputc,可以通過fputc往串口打印來實現printf函數。

fputc函數格式:

int fputc(int ch,FILE* f)
{while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)!= SET);USART_SendData(USART1,ch);return ch;
}

注意:

  • stm32芯片上運行程序,如果主機運行了調試器,程序就會使用主機的輸入輸出設備,這種模式叫半主機模式,printf如果通過串口打印,必須關閉半主機模式

  • #pragma import(__use_no_semihosting)

    
    //重定義
    int fputc(int ch,FILE* f)
    {while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)!= SET);USART_SendData(USART1,ch);return ch;
    }
    
使用中斷實現串口的接收

由于串口合適發數據由自己決定,不存在無效等待的問題,無需使用中斷,但是串口何時接收數據不由自己決定,如果還使用輪詢會存在大量無效等待,此時要是使用中斷提高效率。

串口中斷和定時器中斷類似,需要配置中斷源開關和NVIC

NVIC_Init(...);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

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

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

相關文章

【驗證技能】文檔要求和好文檔注意點

項目文檔 產品場景分析; 產品規格需求:OR; 項目設計需求:DR; 業務文檔:學發材料; 計劃 項目執行計劃,設計計劃,驗證計劃,一~四級計劃; 一級計…

使用 CarrierWave 通過 AWS S3上傳文件到阿里云 OSS

雖然阿里云 OSS 與 AWS S3 兼容,但需要使用阿里云的特定端點進行配置。CarrierWave 是一個流行的 Ruby 文件上傳庫,可以方便地與 AWS S3 集成。以下是配置和使用方法: 1. 安裝必要的 gem 首先,在 Gemfile 中添加以下 gem&#x…

上位機知識篇---流水線執行

文章目錄 前言前言 本文簡單介紹了流水線. 基本概念 流水線(Pipeline) 是一種通過將任務分解為多個子任務(階段),并讓不同子任務并行執行以提高效率的技術。其靈感來源于工業流水線,每個階段專注于特定操作,多任務在不同階段重疊執行,從而提升整體吞吐率(Throughput)…

第三部分:賦予網頁靈魂 —— JavaScript(下)

目錄 7 DOM 操作:控制網頁的"智能面板7.1 小例子:點擊按鈕時改變段落文字,根據用戶輸入改變圖片7.2 練習:實現一個簡單的 Tab 切換效果 8 事件處理:響應用戶的"指令"8.1 小例子:實現點擊按鈕…

芯片軟錯誤概率探究:基于汽車芯片安全設計視角

摘要: 本文深入剖析了芯片軟錯誤概率問題,結合 AEC-Q100 與 IEC61508 標準,以 130 納米工藝 1Mbit RAM 芯片為例闡述其軟錯誤概率,探討汽車芯片安全等級劃分及軟錯誤對汽車關鍵系統的影響,分析先進工藝下軟錯誤變化趨勢…

嵌入式AI還是一片藍海

發現其實還是挺多人關注嵌入式和人工智能交叉領域的,隨便一個問題,瀏覽量就27萬了,但是這方面的內容確實少得可憐……所以干脆我自己來補點干貨。 推薦一本最近很熱門的新書——《邊緣人工智能:用嵌入式機器學習解決現實問題》。 …

Linux 怎么安裝 Oracle Java 8

在 Linux 系統上安裝 Oracle Java 8 的步驟如下: 1. 下載 Oracle Java 8 訪問 Oracle 官方網站的 Java 下載頁面: 下載鏈接:Oracle Java 8 下載頁面選擇適合 Linux x64 的安裝包(通常是 .tar.gz 格式)。需要登錄 Or…

nginx配置集群服務器中的tcp負載均衡器

文章目錄 前言1. Ubuntu下nginx安裝2. nginx的tcp負載配置 前言 假設一臺機器支持兩萬的并發量,現在我們需要保證八萬的并發量。首先想到的是升級服務器的配置,比如提高 CPU 執行頻率,加大內存等提高機器的物理性能來解決此問題。但是單臺機…

【音視頻】RTMP流媒體服務器搭建、推流拉流

服務器:SRS(Simple RTMP Server,?持RTMP、HTTP-FLV,HLS) 推流端:ffmpeg OBS 拉流端:ffplay VLC srs播放器 1 安裝和測試srs流媒體服務器 1.1 安裝srs流媒體服務器 srs官?:https://github.com/ossrs/…

數據治理與數據管理:定義之辯和責任外包的邊界

數據治理與數據管理:定義之辯和責任外包的邊界 最近,在數據領域的技術交流中,一位朋友探討了兩個很有意思的問題。這兩個問題非常典型,也反映了大家在實際工作和學習中常會遇到的困惑:一是關于“數據管理”和“數據治…

Linux 命令如何同時支持文件參數與管道輸入?

文章目錄 Linux 命令如何同時支持文件參數與管道輸入?命令輸入方式與管道機制概述常見輸入控制方式常見使用示例程序實現思路:統一處理輸入的方式判定輸入來源的基本模式為何命令應支持參數與標準輸入? GNU Coreutils wc 源碼解析&#xff1a…

flutter開發音樂APP(簡單的音樂播放demo)

效果如下: 音樂播放界面 鎖屏音樂播放展示 主要使用的插件如下 just_audio : 是一個功能豐富的音頻播放器,適用于Android、iOS、macOS、Web、Linux和Windows平臺。它提供了多種功能,包括從URL、文件、資產或字節流讀取音頻,支持D…

css中盒模型有哪些

標準盒模型(w3c盒模型) 在標準盒模型中,元素的width和height只包括內容區域,不包括內邊距、邊框、外邊距。也就是元素的實際寬高是內容區域加上內邊距、邊框、外邊距。 例如:一個元素的寬度設置為100px,內…

第3篇:請求參數處理與數據校驗

在 Web 開發中,請求參數處理與數據校驗是保障系統穩定性的第一道防線。本文將深入探討 Egg.js 框架中參數處理的完整解決方案,涵蓋常規參數獲取、高效校驗方案、文件流處理等核心功能,并分享企業級項目中的最佳實踐。 一、多場景參數獲取策略…

2025年-redis(p1-p10)

1.redis介紹 (1)基礎:常見的數據結構及命令、jedis的應用和優化、springDataRedis的應用和優化 (2)企業實戰的應用場景:共享session、緩存解決問題、秒殺中的redis應用、社交app中的redis應用、redis特殊結…

【AI模型學習】GPT——從v1到v3

文章目錄 GPT-1GPT vs BERTGPT-2GPT-3Ai代碼 GPT-1 GPT-1(Generative Pretrained Transformer 1)是 OpenAI 在2018年發布的第一個大規模預訓練生成模型。它開創了基于 Transformer 的 預訓練-微調 (pretraining-finetuning) 框架,在自然語言…

數字智慧方案6178丨智慧醫院醫療信息化建設之以評促建(61頁PPT)(文末有下載方式)

資料解讀:智慧醫院醫療信息化建設之以評促建 詳細資料請看本解讀文章的最后內容。 在當今數字化時代,醫療行業正經歷著深刻變革,智慧醫院的建設成為提升醫療服務質量、優化醫療資源配置的關鍵所在。這份智慧醫院醫療信息化建設之以評促建的資…

淺談C# record關鍵字

環境:.net8控制臺 init關鍵字 通常我們會有一個常見的需求就是需要實現一個實例化后不可變的類型. 我通常會如下實現,將類的屬性的set設為私有,這樣只能使用構造函數來實例一個不可變對象. 但是如果內部再聲明一個public的方法還是有可能會將我這個對象改變. internal class…

實時數倉dim層設計的一些疑惑點

0.dim層組件的選擇 dim層存儲要求:需要滿足永久存儲(需要長期保存歷史數據)和支持根據主鍵查詢單條數據明細,所以排除Kafka(時效短); 候選框架:MySQL、Redis、Hive、Doris、HBase …

模型之FIM(Fill-In-the-Middle)補全

文章目錄 模型之FIM(Fill-In-the-Middle)補全什么是FIM(Fill-In-the-Middle)FIM 的工作原理FIM 示例:代碼補全場景常見模型fim 測試deepseek fim阿里completions 接口要判斷模型是否支持特定的特殊標記**1. 模型可以自動推斷生成區域****2. `suffix` 是可選的****3. 模型的…