stm32week16

stm32學習

十一.中斷

4.使用中斷

圖片消失了

EXTI的配置步驟:

  1. 使能GPIO時鐘
  2. 設置GPIO輸入模式
  3. 使能AFIO/SYSCFG時鐘
  4. 設置EXTI和IO對應關系
  5. 設置EXTI屏蔽,上/下沿
  6. 設置NVIC
  7. 設計中斷服務函數

HAL庫的使用:

  1. 使能GPIO時鐘:__HAL_RCC_GPIOx_CLK_ENABLE
  2. GPIO/AFIO(SYSCFG)/EXTI:HAL_GPIO_Init()
  3. 設置中斷分組:HAL_NVIC_SetPriorityGrouping,此函數僅需設置一次
  4. 設置中斷優先級:HAL_NVIC_SetPriority
  5. 使能中斷:HAL_NVIC_EnableIRQ
  6. 設計中斷服務函數:EXTIx_IRQHandler,中斷服務函數,清中斷標志

STM32僅有:EXTI0~4、EXTI9_5、EXTI15_10,7個外部中斷服務函數

十二.串口

1.通信基礎

單工/半雙工/全雙工通信:

圖片消失了

波特率:

  1. 比特率:每秒傳送的比特數,單位bit/s
  2. 波特率:每秒傳送的碼元數,單位Baud
  3. 比特率 = 波特率 * log2M,M表示每個碼元承載的信息量
  4. 二進制系統中,波特率數值上等于比特率

常見的串行通信串口

圖片消失了

2.串口

串行通信接口:指按位發送和接收的接口。如:RS-232、422、485
RS-232現在逐漸被USB、無線網所取代
RS-232電平不能與COMS/TTL電平直接交換信息
現代設備常通過 USB轉RS-232芯片實現兼容

圖片消失了

3.UART/USART

一個是通用異步收發器,一個是通用同步異步收發器
常用的也是異步通信
如何區分UART/USART和其它通信:TX和RX交叉相連

USART的框圖簡化版:

圖片消失了

設置UART/USART波特率:

①F1: b a u d = f c k 16 ? U S A R T D I V baud = \frac{f_{ck}}{16*USARTDIV} baud=16?USARTDIVfck??
f c k f_{ck} fck?是串口的時鐘, U S A R T D I V = D I V _ M a n t i s s a + ( D I V _ F r a c t i o n / 16 ) USARTDIV = DIV\_Mantissa + (DIV\_Fraction / 16) USARTDIV=DIV_Mantissa+(DIV_Fraction/16)

②F4: b a u d = f c k 8 ? ( 2 ? O V E R 8 ) ? U S A R T D I V baud = \frac{f_{ck}}{8 * (2 - OVER8) * USARTDIV} baud=8?(2?OVER8)?USARTDIVfck??

③F7:16倍過采樣波特率計算公式: b a u d = f c k U S A R T D I V baud = \frac{f_{ck}}{USARTDIV} baud=USARTDIVfck??
8倍過采樣波特率計算公式: b a u d = 2 ? f c k U S A R T D I V baud = \frac{2 * f_{ck}}{USARTDIV} baud=USARTDIV2?fck??

④H7:16倍過采樣波特率計算公式: b a u d = u s a r t k e r c k p r e s U S A R T D I V baud = \frac{usart_ker_ckpres}{USARTDIV} baud=USARTDIVusartk?erc?kpres?
8倍過采樣波特率計算公式: b a u d = 2 ? u s a r t k e r c k p r e s U S A R T D I V baud = \frac{2 * usart_ker_ckpres}{USARTDIV} baud=USARTDIV2?usartk?erc?kpres?
usart_ker_ckpres是供串口使用的時鐘

在Cube生成的代碼中,我們實現業務邏輯的代碼是寫在回調函數:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {// 1. 判斷是否為USART1觸發的回調(支持多UART實例)if (huart->Instance == USART1) {// 2. 接收完成后,設置標志位(輕量級操作,避免中斷內耗時)rx_complete_flag = 1;// 3. 重新啟動UART接收(否則只能接收一次數據)HAL_UART_Receive_IT(&huart1, rx_buffer, RX_BUFFER_SIZE);}
}

4.寄存器介紹

控制寄存器1(CR1):

圖片消失了

控制寄存器2(CR2):

圖片消失了

控制寄存器3(CR3):

圖片消失了

數據寄存器(DR):

圖片消失了

狀態寄存器(SR):

圖片消失了

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

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

相關文章

什么是RDMA?

什么是RDMA? RDMA(RemoteDirect Memory Access)技術全稱遠程直接內存訪問,就是為了解決網絡傳輸中服務器端數據處理的延遲而產生的。它將數據直接從一臺計算機的內存傳輸到另一臺計算機,無需雙方操作系統的介入。這允許高吞吐、低延遲的網絡…

golang 安裝gin包、創建路由基本總結

文章目錄 一、安裝gin包和熱加載包二、路由簡單場景總結 一、安裝gin包和熱加載包 首先終端新建一個main.go然后go mod init ‘項目名稱’執行以下命令 安裝gin包 go get -u github.com/gin-gonic/gin終端安裝熱加載包 go get github.com/pilu/fresh終端輸入fresh 運行 &…

【數據結構篇】鏈式結構二叉樹

目錄: 一 二叉鏈的概念與結構: 1.1 概念: 1.2 結構: 二 二叉鏈的實現: 2.1 二叉樹的構建: 2.2 二叉樹的遍歷: 2.2.1 前序遍歷: 2.2.2 中序遍歷: 2.2.3 后序遍歷…

【MySQL】02.數據庫基礎

1. 數據庫的引入 之前存儲數據用文件就可以了,為什么還要弄個數據庫? 文件存儲存在安全性問題,文件不利于數據查詢和管理,文件不利于存儲海量數據,文件在程序中控制不方便。而為了解決上述問題,專家們設計出更加利于…

什么是 Langchain 以及其核心組件

LangChain 官方文檔:LangChain 一、什么是Langchain LangChain 是一個用于構建基于LLM的應用框架,它提供了對 LLM API 的封裝和擴展,使開發者能夠更方便地構建復雜的應用。 個人理解:用類比的方法來說,LangChain類似…

博客系統功能測試

博客系統網址:http://8.137.19.140:9090/blog_list.html 主要測試內容 功能測試、界面測試、性能測試、易用性測試、安全測試、兼容性測試、弱網測試、安裝卸載測試、壓力測試… 測試方法及目的 利用selenium和python編寫測試腳本,對博客系統進行的相關…

項目制作流程

一、使用 CRA 創建項目 npx create-react-app name 二、按照業務規范整理項目目錄 (重點src目錄) 三、安裝插件 npm install sass -Dnpm install antd --savenpm install react-router-dom 四、配置基礎路由 Router 1. 安裝路由包 react-router-dom …

ngx_http_random_index_module 模塊概述

一、使用場景 隨機內容分發 當同一目錄下存放多份等價內容(如多張輪播圖、不同版本靜態頁面等)時,可通過隨機索引實現負載均衡或流量分散。A/B 測試 通過目錄請求自動隨機分配用戶到不同測試組,無需后端邏輯參與。動態“首頁”選…

智能權限守護者:基于Python描述符的動態角色控制實現

智能權限守護者:基于Python描述符的動態角色控制實現 引言:當描述符遇見權限管理 在Python的魔法方法體系中,描述符(Descriptor)以其優雅的屬性訪問控制機制著稱。當我們將描述符與RBAC(基于角色的訪問控制)模型結合,就能創造出既靈活又安全的動態權限管理系統。本文…

Linux 的 UDP 網絡編程 -- 回顯服務器,翻譯服務器

目錄 1. 回顯服務器 -- echo server 1.1 相關函數介紹 1.1.1 socket() 1.1.2 bind() 1.1.3 recvfrom() 1.1.4 sendto() 1.1.5 inet_ntoa() 1.1.6 inet_addr() 1.2 Udp 服務端的封裝 -- UdpServer.hpp 1.3 服務端代碼 -- UdpServer.cc 1.4 客戶端代碼 -- UdpClient.…

Linux 內核等待機制詳解:prepare_to_wait_exclusive 與 TASK_INTERRUPTIBLE

1. prepare_to_wait_exclusive 函數解析 1.1 核心作用 prepare_to_wait_exclusive 是 Linux 內核中用于將進程以獨占方式加入等待隊列的關鍵函數,其主要功能包括: 標記獨占等待:通過設置 WQ_FLAG_EXCLUSIVE 標志,表明此等待條目是獨占的。 安全入隊:在自旋鎖保護下,將條…

【Android構建系統】了解Soong構建系統

背景介紹 在Android7.0之前,Android使用GNU Make描述和執行build規則。Android7.0引入了Soong構建系統,彌補Make構建系統在Android層面變慢、容易出錯、無法擴展且難以測試等缺點。 Soong利用Kati GNU Make克隆工具和Ninja構建系統組件來加速Android的…

信息學奧賽一本通 1539:簡單題 | 洛谷 P5057 [CQOI2006] 簡單題

【題目鏈接】 ybt 1539:簡單題 洛谷 P5057 [CQOI2006] 簡單題 【題目考點】 1. 樹狀數組 模板題及講解:洛谷 P3374 【模板】樹狀數組 【解題思路】 解法1:樹狀數組 該有01構成數組初值都為0。 某位置的元素被修改奇數次后值為1&#x…

倉頡開發語言入門教程:搭建開發環境

倉頡開發語言作為華為為鴻蒙系統自研的開發語言,雖然才發布不久,但是它承擔著極其重要的歷史使命。作為鴻蒙開發者,掌握倉頡開發語言將成為不可或缺的技能,今天我們從零開始,為大家分享倉頡語言的開發教程,…

玉米籽粒發育

成熟玉米籽粒的結構 玉米籽粒的組成 成熟的玉米籽粒主要由以下三部分組成: 母體組織:包括種皮、胎座和花梗。種皮由珠被發育而來,起到保護種子的作用,并在種子的休眠和萌發中發揮重要作用。胚:包含根分生組織、莖分…

sherpa-ncnn:音頻處理跟不上采集速度 -- 語音轉文本大模型

目錄 1. 問題報錯2. 解決方法 1. 問題報錯 報錯: An overrun occurred, which means the RTF of the current model on your board is larger than 1. You can use ./bin/sherpa-ncnn to verify that. Please select a smaller model whose RTF is less than 1 fo…

Postman一直打不開的解決辦法

Postman 是一款非常流行的開源 API 開發工具,主要用于構建、測試、調試和文檔化應用程序接口(API)。但有時它的性能不會特別穩定,功能限制和擴展性不足;應用于開發、測試、運維等環節,尤其在開發 RESTful A…

問題|對只允許輸入的變量是否進行了更改

“對只允許輸入的變量是否進行了更改”這一問題的核心是:在編程中,某些變量被設計為僅用于輸入(只讀),但在代碼中可能被意外修改,導致潛在錯誤。以下是詳細解釋: 1. 什么是“只允許輸入的變量”…

RPC與SOAP的區別

一.RPC(遠程過程調用)和SOAP(簡單對象訪問協議)均用于實現分布式系統中的遠程通信,但兩者在設計理念、協議實現及應用場景上存在顯著差異。 二.對比 1.設計理念 2.協議規范 3.技術特性 4.典型應用場景 5.總結 三.總結…

c#的內存指針操作(僅用于記錄)

c#也可以直接操作內存指針,如下為示例: unsafe {byte[] a {1,2,3};fixed (byte* p1 a, p2 &a[^1]){Debugger.Log(1, "test", $"max index:{p2-p1}");Debugger.Log(1, "test", $"address:{(long)p1:X}")…