STM32 單片機開發 - TIM 定時器(PWM)

一、硬件定時器

  • 高級控制定時器 Advanced Control Timers (TIM1/TIM8)
  • 通用定時器 General Purpose Timers (TIM2/TIM3/TIM4/TIM5)
  • 通用定時器 General Purpose Timers (TIM15/TIM16/TIM17)
  • 基本定時器 Basic Timers (TIM6/TIM7)
表 1 定時器種類

二、TIM 中 PWM 概念

PWM 的基本原理就是通過 ++ / -- 計數

2.1 PWM 概念

PWM:Pulse width modulation - 脈沖寬度調制 (定時器)

脈沖:方波信號

方波信號:一個高電平和一個低電平組成的波形

脈沖寬度調制:調制一個方波信號中高電平或者低電平的占比


方波周期:一個方波信號持續的時間

方波頻率:單位時間可以生成的方波個數????????????????周期和頻率成反比


周期的單位:s? ? ? ? ms? ? ? ? μs? ? ? ? ns頻率的單位:Hz(bps)  KHz(Kbps) MHz(Mbps) GHz(Gbps)

占空比:高電平信號在一個方波周期內的占比

圖 1 不同占空比

? ? ? ? 圖1(1)占空比為 50%,(2)占空比為 70%.


1)PWM 的作用

? ? ? ? 通過 PWM 調節周期內高低電平的占比,對基于頻率參數控制的外設(蜂鳴器、馬達、直流電機等)可以進行更加有效的控制。

圖 2 PWM 信號

三、分析電路圖

底板上的蜂鳴器引腳:PA15 - TIM2_CH1風扇引腳:PC6 - TIM3_CH1震動馬達引腳:PC7 - TIM3_CH2
圖 3? 查找蜂鳴器引腳
圖 4 查找風扇引腳
圖 5 查找震動馬達引腳
按圖 3 - 圖 5 所示查找到三個外設的引腳。

四、分析芯片手冊

4.1 定時器介紹

1)介紹

圖 6 通用定時器 TIM2 - TIM5 介紹

? ? ? ? TIM2/TIM3/TIM4/TIM5 都是通用可編程的定時器

????????通用定時器由一個可編程預分頻器驅動的?16 位?32位自動重載計數器組成。

? ? ? ? 它們可用于多種用途:測量輸入信號的脈沖長度(輸入捕獲)或生成輸出波形(輸出比較脈沖寬度調制PWM))。

? ? ? ? 利用定時器預分頻器和 RCC(復位和時鐘控制)時鐘控制器預分頻器,脈沖長度和波形周期可在幾微秒到幾毫秒的范圍內進行調制。

? ? ? ? 這些定時器之間完全相互獨立不共享任何資源


2)主要特性

圖 7 通用定時器 TIM2 - TIM5 主要特性
  • 16 位或 32 位向上、向下、向上/向下自動重載計數器
  • 16 位可編程預分頻器,可將計數器時鐘頻率從 1 到 65535 之間的任意系數分頻(也可動態分頻)。
  • 最多 4 個獨立通道,用于
    • 輸入捕獲
    • 輸出比較
    • 脈沖寬度調制(PWM)生成(邊沿對齊和中心對齊模式)
    • 單脈沖模式輸出

3)功能描述

圖 8 通用定時器 TIM2 - TIM5 功能描述

? ? ? ? 定時器基本單元。

????????可編程定時器的主要模塊是一個帶有相關自動重載寄存器的 16 位 / 32 位計數器。計數器可以向上計數、向下計數,或者既向上又向下計數。計數器時鐘可由預分頻器分頻。

? ? ? ? 定時器基本單元包括:

  • 計數寄存器 - TIMx_CNT
  • 分頻寄存器 - TIMx_PSC
  • 自動重載寄存器 - TIMx_ARR

4)預分頻系數發生變化波形圖

圖 9?預分頻系數發生變化波形圖

4.2

圖 10 TIMx 定時器內部框圖

????????分頻器的分頻范圍: 16 位(分頻系數的使用范圍: 1 - 65535);
計數器的計數范圍: 16 位(計數數值范圍: 0 - 65535)32 位的(計數范圍: 0 - (2^32) - 1);
計數器 / 定時器的計數方式邊沿對齊方式遞增計數方式遞減計數方式 / 向下計數方式)、中心對齊計數方式先遞增再遞減計數方式)。

遞增計數方式:

????????CNT 計數器由分頻后的時鐘 CK_CNT 驅動工作,每來一個分頻后的時鐘,CNT 計數器中的值從 0 開始 + 1;
首先,需要設置自動重載寄存器中的值(ARR = 1000)和計數器的計數方式(遞增計數方式);
當計數器開關開始工作時,自動重載寄存器中的值會被加載到計數器,每來 1 個時鐘信號,計數器會從 0 開始 + 1;

????????直到計數器中的值加到和自動重載寄存器中的值相等時,此時就代表一個 PWM 方波產生了
當產生一個 PWM 方波后,會產生一個溢出事件(標志位),CNT 計數器又會回到 0,重新開始 + 1,循環操作。

遞減計數方式:
首先,需要設置自動重載寄存器中的值(ARR = 1000)和計數器的計數方式(遞減計數方式);
當計數器開關工作時,自動重載寄存器中的值(ARR = 1000)會被加載到計數器中,每來 1 個時鐘信號,計數器中的值會從 1000 開始 - 1;
直到計數器中的值遞減到 0 時,此時就代表一個 PWM 方波產生了;
當產生一個 PWM 方波后,會產生一個溢出事件(標志位),CNT 計數器中的值又會回到 1000,重新開始 - 1,循環操作。

先遞增再遞減計數方式:
首先,需要設置自動重載寄存器中的值(ARR = 1000)和計數器的計數方式(先遞增再遞減計數方式);
當計數器開關開始工作時,自動重載寄存器中的值會被加載到計數器,每來 1 個時鐘信號,計數器會從 0 開始 + 1;
當計數器中的值加到和自動重載寄存器中的值相等時,開始遞減,也就是每來 1 個時鐘信號,計數器會從 1000 開始 - 1;

????????直到計數器中的值遞減到 0 時,此時就代表一個 PWM 方波產生了;
當產生一個 PWM 方波后,會產生一個溢出事件(標志位),循環上述操作。

目的:為了生成一個自定義脈寬的 PWM 波信號(可以人為改變高低電平占比的方波信號,也就是可以人為改變占空比的方波信號)
生成一個
自定義脈寬的方波信號的流程:

  1. 準備工作:(默認以初始給出的頻率值為頻率甲)
    1.1 由 RCC 產生并分配給 TIM 一個分頻前的時鐘頻率 CK_PSC = 160MHz
    1.2 設置分頻寄存器中的分頻系數 PSC = 160,分頻后的時鐘頻率 CK_CNT = 100MHz,分頻后的時鐘可以驅動計數工作(遞增 / 遞減計數)
    1.3 設置自動重載寄存器的值(ARR = 1000),設置計數器的計數方式為遞增計數方式,設置捕獲比較存儲的值 CCR1 = 700
  2. 自動重載寄存器中的值(ARR)會被加載到計數器(CNT)中
  3. 每來 1 個時鐘信號,計數器中的值從 0 開始 + 1
  4. 當計數器中的值(CNT)加到和比較 / 捕獲寄存器中的值(CCR1)相等時,此時輸出的電平發生翻轉
  5. 接著,計數器中的值繼續 + 1,直到加到和自動重載寄存器中的值(ARR)相等時,此時就代表一個自定義脈寬的 PWM 方波產生了
圖 11 默認初始輸出電平不同時的占空比

????????分頻前時鐘 CK_PSC = 160 MHz,分頻系數 PSC = 160,自動重載寄存器 ARR = 1000,計數器計數方式為遞增計數,捕獲/比較寄存器 CCR1 = 700;

? ? ? ? 默認輸出初始電平為高電平。

則:

分頻后的時鐘頻率 CK_CNT = CK_PSC / PSC = 160MHz / 160 = 1MHz(1s內產生1M個時鐘信號)
分頻后的時鐘周期 = 1 / 分頻后的時鐘頻率 = 1 / 1MHz = 1us(產生一個時鐘信號需要1us)
生成的PWM方波的頻率 = 分頻后的時鐘頻率CK_PSC / 自動重載寄存器的值ARR = 1MHz / 1000 = 1000Hz = 1KHz
生成的PWM方波的周期 = 1 / 生成的PWM方波的頻率 = 1 / 1000Hz = 0.001s = 1ms
生成的PWM方波的周期 = 分頻后的時鐘周期 * +1次數 = 分頻后的時鐘周期 * ARR = 1us * 1000 = 1ms
生成的PWM方波的頻率 = 1 / 生成的PWM方波的周期 = 1 / 1ms = 1KHz
生成的PWM方波的占空比 = 700 / 1000 * 100% = 捕獲/比較寄存器的值CCR1 / 自動重載寄存器的值ARR * 100% = 70%
  1. PWM方波的頻率周期分頻寄存器的分頻系數 PSC自動重載寄存器的值 ARR 有關;
  2. PWM方波的占空比自動重載寄存器的值 ARR捕獲/比較寄存器的值 CCR1輸出的初始電平(有效電平)PWM 的工作模式 有關。

4.3 邊沿對齊方式 - 遞增計數

圖 12 遞增計數時序圖

4.4 邊沿對齊方式 - 遞減計數

圖 13 遞減計數時序圖

4.5 中心對齊計數

圖 14 中心對齊計數時序圖

4.6 TIMx_CR1 寄存器

圖 15?TIMx_CR1

1)Bit 6:5

位 6:5?CMS[1:0]:中心對齊模式選擇
00:邊沿對齊模式。計數器根據方向位(DIR)進行遞增或遞減計數。
01:中心對齊模式 1。計數器交替進行遞增和遞減計數。配置為輸出的通道(TIMx_CCMRx 寄存器中 CCxS=00)的輸出比較中斷標志僅在計數器遞減計數時置位
10:中心對齊模式 2。計數器交替進行遞增和遞減計數。配置為輸出的通道(TIMx_CCMRx 寄存器中 CCxS=00)的輸出比較中斷標志僅在計數器遞增計數時置位
11:中心對齊模式 3。計數器交替進行遞增和遞減計數。配置為輸出的通道(TIMx_CCMRx 寄存器中 CCxS=00)的輸出比較中斷標志在計數器遞增或遞減計數時都會置位
注意:只要計數器使能(CEN=1),就不允許從邊沿對齊模式切換到中心對齊模式。

2)Bit 4

位 4?DIR:計數方向位
0:計數器用作向上計數器,遞增計數
1:計數器用作向下計數器,遞減計數

3)Bit 0

位 0?CEN:計數器使能
0:計數器不使能
1:計數器使能

4.7 TIM_CCMR1 寄存器

圖 16?TIM_CCMR1

1)Bit 7

位 7?OC1CE:輸出比較 1 清除使能(通道 1 的輸出比較寄存器清除使能位)
0:OC1Ref 不受 ETRF 輸入的影響
1:一旦在 ETRF 輸入上檢測到高電平,OC1Ref 就會被清除

2)Bits 16, 6:4

圖 17 TIM_CCMR1 的?Bits 16, 6:4
圖 18?TIM_CCMR1 的?Bits 16, 6:4 設置為 0110(PWM 模式 1)
圖 19?TIM_CCMR1 的?Bits 16, 6:4 設置為 0111(PWM 模式 2)

4.8?TIM_CCER 寄存器

圖 20?TIM_CCER

位 3 CC1NP:捕獲 / 比較 1 輸出極性。
CC1 通道配置為輸出:在這種情況下,CC1NP 必須保持清零。

位 1 CC1P:捕獲 / 比較 1 輸出極性。
CC1 通道配置為輸出:
0:OC1 高電平有效 - 通道1的活躍電平(有效電平)為高電平信號,不活躍電平(無效電平)為低電平信號
1:OC1 低電平有效 -?通道1的活躍電平(有效電平)為低電平信號,不活躍電平(無效電平)為高電平信號

位 0 CC1E:捕獲 / 比較 1 輸出使能 -?通道 1 的捕獲 / 比較功能使能
CC1 通道配置為輸出:
?0:關閉 - OC1 未激活
?1:開啟 - OC1 信號在相應的輸出引腳上輸出 -?使能比較輸出的功能

4.9?TIM_CNT 寄存器

圖 21?TIM_CNT

計數器中的值可以人為手動寫入;
一般需要手動寫入時,應用在對計數器清0 / 設置閥值;
一般計數器中的值從自動重載寄存器(ARR)中來。

==========================================================

位 31 CNT [31]:計數器值的最高有效位(在 TIM2 和 TIM5 上)
在其他定時器上為保留位。

位 30:16 CNT [30:16]:計數器值的最高有效部分(在 TIM2 和 TIM5 上)

位 15:0 CNT [15:0]:計數器值的最低有效部分

4.10?TIM_PSC 寄存器

圖 22?TIM_PSC
分頻后的時鐘頻率 = 分頻前的時鐘頻率 / (PSC寄存器中的值 + 1)

4.11?TIM_ARR 寄存器

圖 23?TIM_ARR

4.12?TIM_CCR1 寄存器

圖 24?TIM_CCR1

五、CubeMX 配置

以震動馬達為例:

圖 25 配置 PC7 引腳
將 PC7 引腳配置為 TIM3_CH2 模式,設置 TIM3 的 時鐘源和通道 2 的模式
圖 26 TIM3 參數含義
圖 27 TIM3 參數設置

? ? ? ? 按照如圖所示設定 TIM3 的參數。

? ? ? ? 之后和之前一樣設置 Debug、時鐘頻率 160Mhz、工程設置。直接生成代碼。


六、API 接口

6.1?HAL_TIM_PWM_Start 函數

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

1)功能

? ? ? ??HAL庫提供的用于開啟某個定時器下某個通道的PWM功能的函數

2)參數

????????htim:可以代表TIM3外設控制器的句柄

????????Channel:需要開啟PWM功能的通道

3)返回值

????????成功,返回 HAL_OK(0)

????????失敗,返回錯誤碼

6.2?__HAL_TIM_SET_COMPARE 宏函數

#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)))

1)功能

????????HAL庫提供的用于設置捕獲/比較寄存器中數值的函數(向捕獲/比較寄存器中寫入值)

2)參數

????????__HANDLE__:TIM3外設控制器的句柄對象

????????__CHANNEL__:需要寫入數值的通道(1/2/3/4)

????????__COMPARE__:需要寫入到捕獲/比較寄存器中的值


七、代碼

int main(void)
{/* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM1_Init();MX_TIM3_Init();/* USER CODE BEGIN 2 */HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){for(int i=100;i<=900;i+=100){__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,700);HAL_Delay(2000);}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

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

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

相關文章

OpenCV內置分類器實現簡單的人臉識別

引言 人臉檢測是計算機視覺領域的基礎任務之一&#xff0c;廣泛應用于安防監控、人機交互、圖像美化等場景。今天我們將通過一段簡潔的Python代碼&#xff0c;使用OpenCV庫實現實時攝像頭人臉檢測功能。無論你是計算機視覺新手還是有經驗的開發者&#xff0c;這篇文章都能幫你理…

Tomcat 性能優化與高并發調優

Tomcat 性能優化與高并發調優1. 引言 經過前幾篇文章的學習&#xff0c;我們已經掌握了 Tomcat 的核心原理&#xff1a; Connector 連接器容器體系&#xff08;Engine → Host → Context → Wrapper&#xff09;Servlet 執行鏈路線程模型&#xff08;Executor Worker&#xf…

MacOS M1安裝face_recognition

MacOS M1安裝face_recognition一致失敗&#xff0c;嘗試網上各種方法還是失敗&#xff0c;遂分享自己安裝成功的經歷。 conda虛擬環境python版本&#xff1a;3.9.23準備工作確保 Homebrew 已安裝 Homebrew 是 macOS 的包管理器&#xff0c;用于安裝依賴項。如果尚未安裝&#x…

動態庫和靜態庫的鏈接加載

靜態庫的鏈接與加載靜態庫&#xff08;如.a或.lib文件&#xff09;在編譯時直接鏈接到可執行文件中。編譯器會將靜態庫中實際用到的代碼復制到最終的可執行文件&#xff0c;生成獨立的二進制文件。優點是不依賴外部庫文件&#xff0c;但會導致可執行文件體積較大。生成靜態庫的…

如何處理在pytorch環境中已經安裝的matplotlib無法使用的問題

1 問題已經安裝好的matplotlib包無法在pytorch環境中使用。2 方法方法一&#xff1a;用命令安裝matplotlib &#xff1a;方法二&#xff1a;打開cmd&#xff0c;使用conda install matplotlib命令安裝matplotlib庫#輸入以下代碼段&#xff0c;查詢當前執行路徑import osos.sys.…

Linux基礎命令匯總

系統基礎指令 ls:列出目錄內容 ls -a:顯示所有文件(包括隱藏文件) ls -l:顯示詳細文件信息 ls /etc:列出 /etc 目錄內容 示例: cat:查看文件內容 cat /etc/os-release:查看系統版本信息 cat file1:顯示文件內容 cat file1 file2 > merged.txt:合并文件并輸出到新…

一場史詩級的冒險——Docker命令大航海!

各位親愛的開發者、運維勇士、以及所有對現代化軟件部署充滿好奇的小伙伴們&#xff01;今天&#xff0c;我們將開啟一場史詩級的冒險——Docker命令大航海&#xff01;我們將乘坐“Docker號”巨輪&#xff0c;駛向容器化技術的星辰大海。 這不是一篇枯燥的說明書&#xff0c;而…

告別依賴混亂:Spring IoC 容器與 DI 依賴注入入門精講

目錄 什么是 IoC IoC 介紹 傳統開發思路 解決方法 IoC 優勢 DI IoC & DI 使用 IoC 詳解 Bean 的存儲 Controller&#xff08;控制器存儲&#xff09; 獲取 bean 對象的其他方法 bean 命名 面試題之 ApplicationContext pk BeanFactory Service&#xff08;服…

視頻理解學習筆記

目錄 VideoRefer VideoPrism 核心解密&#xff1a;通用視頻編碼器的力量 VideoRefer VideoRefer 是由浙江大學和阿里達摩院聯合推出的視頻對象感知與推理技術&#xff0c;增強視頻大型語言模型&#xff08;Video LLMs&#xff09;的空間-時間理解能力。簡單一點來說就是可以…

P1198題解

題目鏈接 開題第一件事看數據范圍.這里的范圍是二十萬,支持O(nlogn). 這是一個RMQ問題,同時要加點,我們因此考慮ST表或者線段樹.這里用線段樹是核彈打蚊子,沒有意義,我們因此考慮ST表.我們注意到如果加點操作需要改動ST表原來的東西ST表就會炸掉,我們就要考慮更高級的數據結構…

使用yolov8對視頻進行目標檢測

使用 Ultralytics 的 YOLO 模型對視頻進行逐幀目標檢測非常簡單&#xff0c;以下是完整的實現方法&#xff1a; 我們的輸入視頻是這樣的 視頻目標檢測輸入視頻這里是天津市和平區天津大學附近&#xff0c;感興趣的小伙伴來天津玩哈&#xff01;&#xff01; 1. 安裝依賴 確保已…

Edge瀏覽器的自動化點擊系統

Tag_click_openclose_V6 開發與使用注意事項 網頁自動化點擊系統 一個基于Python和CustomTkinter開發的桌面應用程序&#xff0c;通過Selenium實現對Edge瀏覽器的自動化控制。點擊Tag_click_openclose_V6進入Github自取&#xff0c;記得點贊收藏嗷。 功能介紹 連接到已打開…

Python股票數據分析與預測系統 LSTM神經網絡算法 股票價格預測 Tensorflow深度學習 機器學習 Flask框架 東方財富(建議收藏)?

博主介紹&#xff1a;?全網粉絲50W&#xff0c;前互聯網大廠軟件研發、集結碩博英豪成立軟件開發工作室&#xff0c;專注于計算機相關專業項目實戰6年之久&#xff0c;累計開發項目作品上萬套。憑借豐富的經驗與專業實力&#xff0c;已幫助成千上萬的學生順利畢業&#xff0c;…

英萊科技焊縫跟蹤系統亮相德國埃森焊接展,激光視覺點亮世界舞臺

9月15-19日&#xff0c;每4年一屆的德國埃森焊接與切割展覽會&#xff08;SCHWEISSEN & SCHNEIDEN&#xff09;即將盛大開幕。作為焊接行業最具規模及權威性的盛會之一&#xff0c;英萊科技將攜全新PF系列激光視覺焊縫跟蹤系統驚艷亮相&#xff0c;為全球智能化焊接貢獻中國…

嵌入式基本概念:什么是指令集,微架構,IDE,DFP等等是什么意思,有什么關系???

注&#xff1a;下面是指令集和微框架的分類圖&#xff0c;后面我會以ARM的M4舉例子。 一.什么是指令集 大概的可以看這個視頻 https://www.bilibili.com/video/BV1uXzbYBEy2/?spm_id_from333.1007.top_right_bar_window_custom_collection.content.click&vd_source406ed…

Spring Cloud之服務入口Gateway之自定義過濾器

目錄 過濾器執行順序 自定義過濾器 自定義GatewayFilter 定義GatewayFilter 配置過濾器 啟動服務并訪問 自定義GlobalFilter 定義GlobalFilter 啟動服務并訪問 服務部署 過濾器執行順序 如果?個項?中, 既有GatewayFilter, ?有 GlobalFilter時, 執?的先后順序是什…

MySQL——視圖、儲儲過程、觸發器

目錄 一、視圖 二、存儲過程 三、觸發器 一、視圖 視圖是一種虛擬存在的表。視圖中的數據并不在數據庫中真實存在&#xff0c;行和列數據來自定義視圖的查詢中使用的表&#xff0c;并且是在使用視圖時動態生成的。通俗的講&#xff0c;視圖只保存了查詢的SQL邏輯&#xff0c…

iOS App 卡頓與性能瓶頸排查實戰 如何定位CPU內存GPU幀率問題、優化耗電與網絡延遲(uni-app開發性能優化全流程指南)

在 iOS 應用開發中&#xff0c;卡頓 是用戶最直觀的負面體驗。 一個 App 如果在頁面切換、滾動、后臺運行時頻繁掉幀或發熱&#xff0c;用戶很快就會放棄使用。 對于 uni-app 跨平臺開發者 來說&#xff0c;卡頓問題更為復雜&#xff1a; JS 與原生層橋接增加了 CPU 負載&#…

騰訊開源多模態 RAG:復雜文檔秒變自建知識庫,支持 API 調用

上篇&#xff0c;分享了 小智AI MCP系列的第一篇&#xff1a; 小智 AI 鬧鐘提醒 定時任務&#xff0c;設備端MCP實現 有朋友問&#xff0c;能否接入知識庫 RAG&#xff1f; 讓小智可以根據企業知識庫&#xff0c;回答客戶的疑問~ 當然可以&#xff0c;接入方式同樣是 MC…

Node.js中的 http 模塊詳解

http 模塊是 Node.js 中的核心模塊之一&#xff0c;專門用于構建基于 HTTP 的網絡應用程序。它允許創建 HTTP 服務器和客戶端&#xff0c;處理網絡請求和響應。1. 核心 API 詳解1.1. http.createServer([options][, requestListener])用于創建 HTTP 服務器的核心方法&#xff0…