【nRF52832】【環境搭建 1】【ubuntu下搭建nRF52832開發環境】

在這里插入圖片描述

本文講述如何在 ubuntu 22.04 下開發 nRF52832.

host 環境說明:

$ uname -a
Linux leo 6.8.0-60-generic #63~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Apr 22 19:00:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

1. 安裝軟件

sudo apt install gcc-arm-none-eabisudo apt-get install build-essential checkinstall

2. nRF5 SDK

1. 下載 SDK

Nordic官方對nRF51、nRF52系列提供了SDK,SDK中提供了大量的BLE和ANT示例。

1. SDK 15.3 版本

下載 15.3版本

將其解壓:

leo@leo:~/data_4t/nrf_project/nrf5sdk153059ac345/nRF5_SDK_15.3.0_59ac345$ tree -L 2
.
├── components
│   ├── 802_15_4
│   ├── ant
│   ├── ble
│   ├── boards
│   ├── drivers_ext
│   ├── drivers_nrf
│   ├── iot
│   ├── libraries
│   ├── nfc
│   ├── proprietary_rf
│   ├── sdk_validation.h
│   ├── serialization
│   ├── softdevice
│   └── toolchain
├── config
│   ├── nrf52810
│   ├── nrf52811
│   ├── nrf52832
│   └── nrf52840
├── documentation
│   ├── index.html
│   ├── licenses.html
│   ├── licenses.txt
│   ├── NordicS.jpg
│   ├── nRF5_Garmin_Canada_license.txt
│   ├── nRF5_Nordic_license.txt
│   ├── nRF5x_series_logo.png
│   └── release_notes.txt
├── examples
│   ├── 802_15_4
│   ├── ant
│   ├── ble_central
│   ├── ble_central_and_peripheral
│   ├── ble_peripheral
│   ├── connectivity
│   ├── crypto
│   ├── dfu
│   ├── dtm
│   ├── iot
│   ├── multiprotocol
│   ├── nfc
│   ├── peripheral
│   ├── proprietary_rf
│   ├── readme.txt
│   └── usb_drivers
├── external
│   ├── cifra_AES128-EAX
│   ├── cJSON
│   ├── fatfs
│   ├── fnmatch
│   ├── fprintf
│   ├── freertos
│   ├── infineon
│   ├── licenses_external.txt
│   ├── lwip
│   ├── mbedtls
│   ├── micro-ecc
│   ├── nano
│   ├── nano-pb
│   ├── nfc_adafruit_library
│   ├── nrf_cc310
│   ├── nrf_cc310_bl
│   ├── nrf_oberon
│   ├── nrf_tls
│   ├── protothreads
│   ├── segger_rtt
│   ├── thedotfactory_fonts
│   └── utf_converter
├── external_tools
│   └── cmsisconfig
├── integration
│   └── nrfx
├── license.txt
├── modules
│   └── nrfx
├── nRF5x_MDK_8_24_1_IAR_NordicLicense.msi
└── nRF5x_MDK_8_24_1_Keil4_NordicLicense.msi64 directories, 14 files

2. SDK 17.1.0 版本

現在官網上最新的是 17.1.0 版本:

  • 下載
nRF5_SDK_17.1.0_ddde560$ tree -L 2
.
├── components
│   ├── 802_15_4
│   ├── ant
│   ├── ble
│   ├── boards
│   ├── drivers_ext
│   ├── drivers_nrf
│   ├── libraries
│   ├── nfc
│   ├── proprietary_rf
│   ├── sdk_validation.h
│   ├── serialization
│   ├── softdevice
│   └── toolchain
├── config
│   ├── nrf52810
│   ├── nrf52811
│   ├── nrf52820
│   ├── nrf52832
│   ├── nrf52833
│   └── nrf52840
├── documentation
│   ├── index.html
│   ├── licenses.html
│   ├── licenses.txt
│   ├── NordicS.jpg
│   ├── nRF5_Garmin_Canada_license.txt
│   ├── nRF5_Nordic_license.txt
│   ├── nRF5x_series_logo.png
│   └── release_notes.txt
├── examples
│   ├── 802_15_4
│   ├── ant
│   ├── ble_central
│   ├── ble_central_and_peripheral
│   ├── ble_peripheral
│   ├── connectivity
│   ├── crypto
│   ├── dfu
│   ├── dtm
│   ├── multiprotocol
│   ├── nfc
│   ├── peripheral
│   ├── proprietary_rf
│   ├── readme.txt
│   └── usb_drivers
├── external
│   ├── cifra_AES128-EAX
│   ├── cJSON
│   ├── fatfs
│   ├── fnmatch
│   ├── fprintf
│   ├── freertos
│   ├── infineon
│   ├── licenses_external.txt
│   ├── lwip
│   ├── mbedtls
│   ├── micro-ecc
│   ├── nano
│   ├── nano-pb
│   ├── nfc_adafruit_library
│   ├── nrf_cc310
│   ├── nrf_cc310_bl
│   ├── nrf_oberon
│   ├── nrf_tls
│   ├── protothreads
│   ├── segger_rtt
│   ├── thedotfactory_fonts
│   ├── tile
│   └── utf_converter
├── external_tools
│   └── cmsisconfig
├── integration
│   └── nrfx
├── license.txt
├── modules
│   └── nrfx
└── nRF_MDK_8_40_3_IAR_BSDLicense.msi65 directories, 13 files

2. 配置編譯環境

15.3 版本和 17.1.0 版本我都驗證了步驟是一樣的:

修改如下文件:

  • components/toolchain/gcc/Makefile.posix
// 15.3
GNU_INSTALL_ROOT ?= /usr/bin/
GNU_VERSION ?= 7.3.1
GNU_PREFIX ?= arm-none-eabi
// 17.1.0  components/toolchain/gcc/Makefile.posix
GNU_INSTALL_ROOT ?= /usr/bin/
GNU_VERSION ?= 9.3.1
GNU_PREFIX ?= arm-none-eabi
  • GNU_INSTALL_ROOT : 主要配置交叉工具 按照目錄, 編譯時可以從當前目錄中找 gcc.

查看安裝目錄:

leo@leo:~$ which arm-none-eabi-gcc
/usr/bin/arm-none-eabi-gcc

3. 編譯

這里拿 一個官方跑馬燈的例子來驗證。

  • pca10040 : 我手里板子,對應官網的 PCA10040 型號
examples/peripheral/blinky/pca10040/blank/armgcc$ tree
.
├── blinky_gcc_nrf52.ld
└── Makefile0 directories, 2 files

在當前目錄 make


examples/peripheral/blinky/pca10040/blank/armgcc$ make
mkdir _build
cd _build && mkdir nrf52832_xxaa
Assembling file: gcc_startup_nrf52.S
Compiling file: nrf_log_frontend.c
Compiling file: nrf_log_str_formatter.c
Compiling file: boards.c
Compiling file: app_error.c
Compiling file: app_error_handler_gcc.c
Compiling file: app_error_weak.c
Compiling file: app_util_platform.c
Compiling file: nrf_assert.c
Compiling file: nrf_atomic.c
Compiling file: nrf_balloc.c
Compiling file: nrf_fprintf.c
Compiling file: nrf_fprintf_format.c
Compiling file: nrf_memobj.c
Compiling file: nrf_ringbuf.c
Compiling file: nrf_strerror.c
Compiling file: nrfx_atomic.c
Compiling file: main.c
Compiling file: system_nrf52.c
Linking target: _build/nrf52832_xxaa.outtext	   data	    bss	    dec	    hex	filename2760	    112	    172	   3044	    be4	_build/nrf52832_xxaa.out
Preparing: _build/nrf52832_xxaa.hex
Preparing: _build/nrf52832_xxaa.bin
DONE nrf52832_xxaa# 編譯結束leo@leo:~/data_4t/nrf_project/nrf5sdk153059ac345/nRF5_SDK_15.3.0_59ac345/examples/peripheral/blinky/pca10040/blank/armgcc$ tree -L 2
.
├── blinky_gcc_nrf52.ld
├── _build
│   ├── nrf52832_xxaa
│   ├── nrf52832_xxaa.bin
│   ├── nrf52832_xxaa.hex # 他就是我們要燒錄進板子的 文件
│   ├── nrf52832_xxaa.in
│   ├── nrf52832_xxaa.map
│   └── nrf52832_xxaa.out
└── Makefile2 directories, 7 files

同樣在 17.1.0 下的操作

leo@leo:~/data_4t/nrf_project/nRF5_SDK_17.1.0_ddde560/examples/peripheral/blinky/pca10040/blank/armgcc/_build$ tree -L 1
.
├── nrf52832_xxaa
├── nrf52832_xxaa.bin
├── nrf52832_xxaa.hex
├── nrf52832_xxaa.in
├── nrf52832_xxaa.map
└── nrf52832_xxaa.out1 directory, 5 files

3. 燒錄

1. 軟件安裝

下載 nRF-Command-Line-Tools_10_9_0_Linux-amd64
https://www.nordicsemi.com/Products/Development-tools/nrf-command-line-tools/download#infotabs

在這里插入圖片描述

解壓:


nrfcommandlinetools1090linuxamd64$ tree
.
├── JLink_Linux_V680a_x86_64.deb
├── JLink_Linux_V680a_x86_64.tgz
├── nRF-Command-Line-Tools_10_9_0_Linux-amd64.deb
├── nRF-Command-Line-Tools_10_9_0.tar
└── README.txt0 directories, 5 files

安裝:


# 第一步
sudo dpkg -i JLink_Linux_V680a_x86_64.deb# 第二步
sudo dpkg -i nRF-Command-Line-Tools_10_9_0_Linux-amd64.deb
  • 注意安裝先后順序

查看安裝后的版本:

$ nrfjprog -v
nrfjprog version: 10.9.0 
JLinkARM.dll version: 6.80a$ JLinkExe -v
SEGGER J-Link Commander V6.80a (Compiled May 29 2020 16:30:49)
DLL version V6.80a, compiled May 29 2020 16:30:38
  • 如果能看到上面的信息,表示下載環境已經ok 了。

2. 連接板子

1. 硬件接線:

我這里使用 Jlink-v9 仿真器 SWD 接口和板子進行連接:

在這里插入圖片描述


2. 軟件側

執行如下命令 :

JLinkExe -device NRF52 -if SWD -speed 4000 -autoconnect 1

如果有如下輸出信息:表示已經識別到板子了。

SEGGER J-Link Commander V6.80a (Compiled May 29 2020 16:30:49)
DLL version V6.80a, compiled May 29 2020 16:30:38Connecting to J-Link via USB...O.K.
Firmware: J-Link V9 compiled May  7 2021 16:26:12
Hardware version: V9.70
S/N: 69706099
License(s): RDI, FlashBP, FlashDL, JFlash, GDB
VTref=3.261V
Device "NRF52" selected.Connecting to target via SWD
InitTarget() start
InitTarget() end
Found SW-DP with ID 0x2BA01477
DPIDR: 0x2BA01477
Scanning AP map to find all available APs
AP[2]: Stopped AP scan as end of AP map has been reached
AP[0]: AHB-AP (IDR: 0x24770011)
AP[1]: JTAG-AP (IDR: 0x02880000)
Iterating through AP map to find AHB-AP to use
AP[0]: Core found
AP[0]: AHB-AP ROM base: 0xE00FF000
CPUID register: 0x410FC241. Implementer code: 0x41 (ARM)
Found Cortex-M4 r0p1, Little endian.
FPUnit: 6 code (BP) slots and 2 literal slots
CoreSight components:
ROMTbl[0] @ E00FF000
ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 000BB00C SCS-M7
ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 003BB002 DWT
ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 002BB003 FPB
ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 003BB001 ITM
ROMTbl[0][4]: E0040000, CID: B105900D, PID: 000BB9A1 TPIU
ROMTbl[0][5]: E0041000, CID: B105900D, PID: 000BB925 ETM
Cortex-M4 identified.
J-Link>

3. 燒錄

1. 方式1: 使用 Jlink 進行燒錄

// 1. 首先輸入上面的命令 連接板子:
JLinkExe -device NRF52 -if SWD -speed 4000 -autoconnect 1// 2. 擦除之前的程序
J-Link> erase
Erasing device...
Comparing flash   [100%] Done.
Erasing flash     [100%] Done.
J-Link: Flash download: Total time needed: 0.026s (Prepare: 0.015s, Compare: 0.000s, Erase: 0.007s, Program: 0.000s, Verify: 0.000s, Restore: 0.003s)
Erasing done.// 3. 燒錄之前 編譯的 跑馬燈 程序
J-Link> loadfile nrf52832_xxaa.hex 
Downloading file [nrf52832_xxaa.hex]...
Comparing flash   [100%] Done.
Erasing flash     [100%] Done.
Programming flash [100%] Done.
J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (4096 bytes)
J-Link: Flash download: Total: 0.092s (Prepare: 0.026s, Compare: 0.002s, Erase: 0.000s, Program & Verify: 0.052s, Restore: 0.011s)
J-Link: Flash download: Program & Verify speed: 76 KB/s
O.K.// 4. 退出, 此時 程序就開始執行了。
J-Link>exit

2. 方式2: nrfjprog 燒錄

全片擦除 +下載+ 復位運行。

$ nrfjprog -f NRF52 --program ./IK-52832DK-V2-TEST.hex  --chiperase -rParsing hex file.
Erasing user available code and UICR flash areas.
Applying system reset.
Checking that the area to write is not protected.
Programming device.
Applying system reset.
Run.

4. nrfjprog 命令介紹

nrfjprog 是使用 J-Link 仿真器對 nRF5x 系列 SoC 進行編程的命令行工具。

1. 全片擦除

執行全片擦除后,會擦除片內所有 Flash 和掉電保持的寄存器。

// 擦除
$ nrfjprog -f NRF52 -eErasing user available code and UICR flash areas.
Applying system reset.

2. 下載

nrfjprog 的命令是可以組合的,對于程序下載,可以使用下面兩種組合命令,注意他們
的區別。

1. 僅下載+復位運行:芯片必須是空的(擦除過的),否則下載會失敗

$ nrfjprog -f NRF52 --program ./IK-52832DK-V2-TEST.hex Parsing hex file.
Reading flash area to program to guarantee it is erased.
Checking that the area to write is not protected.
Programming device.
  • 此時重新掉電啟動即可

2.全片擦除 +下載+ 復位運行

$ nrfjprog -f NRF52 --program ./IK-52832DK-V2-TEST.hex  --chiperase -rParsing hex file.
Erasing user available code and UICR flash areas.
Applying system reset.
Checking that the area to write is not protected.
Programming device.
Applying system reset.
Run.
  • 我一般情況會使用這種方式燒錄。

3.啟用回讀保護機制

nrfjprog -f NRF52 --rbp ALL

該命令執行后,無法使用仿真器通過 DEBUG 接口讀出芯片的數據,當我們發布產品的
時候,可以通過啟用回讀保護防止別人讀取芯片中燒寫的固件,從而保護產品的權益不被侵犯。

3. 讀出 SoftDevice 的 FWID

只有已經下載了 SoftDevice 的芯片才可以讀出 FWID。

  • nRF51xx 系列命令:nrfjprog --family NRF51 --memrd 0x0000300C
  • nRF52xx 系列命令:nrfjprog --family NRF52 --memrd 0x0000300C
$ nrfjprog --family NRF52 --memrd 0x0000300C
0x0000300C: FFFF00AF    
  • 所示,讀出的數據是:0xFFFF00AF,表示協議棧的 FWID 是 0xAF,根據 FWID 即可知道
    協議棧的版本(FWID 在固件更新 DFU 中會用到)

4. 恢復

恢復:全片擦除并禁用回讀保護機制(如果啟用)
命令:nrfjprog -f NRF52 -recover
該命令執行后,會擦除片內所有 Flash 和掉電保持的寄存器。

5. ps

本文檔 所涉及的軟件包我已經打包,請點擊下載。

  • nRF52832-ubuntu-開關環境資源打包
nrf-52832-env-soft$ tree
.
├── IK-52832DK-V2-TEST.hex
├── nrf52832_xxaa.hex
├── nrf5sdk153059ac345.zip
└── nrfcommandlinetools1090linuxamd64.tar.gz
$ md5sum nrf-52832-env-soft.7z
b61a6911bab6684f9721648740448926  nrf-52832-env-soft.7z

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

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

相關文章

【Nginx】403 Forbidden錯誤

當 Nginx 代理配置出現 403 Forbidden 錯誤時,通常是由于權限或配置問題導致。以下是常見原因和解決方案: 常見原因及解決方法 1. 后端服務器拒絕訪問 原因:后端 HTTPS 服務配置了 IP 白名單或訪問控制解決: 檢查后端服務器&…

詳解 `pip install -e .` 命令【PythonLinux】

詳解 pip install -e . 命令 pip install -e . 是 Python 開發中一個非常有用的命令,用于以"可編輯"或"開發"模式安裝當前目錄中的 Python 包。 命令分解 pip: Python 的包管理工具install: pip 的子命令,用于安裝包-e: 是 --edi…

將VSCode的配置遷移到Cursor

目錄 方式一:一鍵導入配置 1.適用場景 2.導入前的配置 3.導入步驟 4.查看導入效果 5.原理 6.注意 方式二:手動遷移配置文件 1.使用場景 2.導入步驟 3.注意 方式一:一鍵導入配置 1.適用場景 VSCode和Cursor這兩個編輯器&#xff0…

大規模流媒體系統架構實踐

📋 文章目錄 系統概述 - 流媒體系統的基本挑戰整體架構設計 - 分層架構與核心組件接入層設計 - CDN與負載均衡策略處理層架構 - 實時轉碼與分發存儲層優化 - 多級緩存與熱點數據監控與運維 - 全鏈路監控體系實戰經驗總結 - 踩坑指南與最佳實踐 🎬 系統概…

Vue 3 + Vite 項目 px 轉 vw 完整使用指南

Vue 3 Vite 項目 px 轉 vw 完整使用指南 🚀 第一步:插件安裝 1.1 安裝命令 # 使用 npm 安裝 npm install postcss-px-to-viewport-8-plugin --save-dev# 或使用 yarn 安裝 yarn add postcss-px-to-viewport-8-plugin --dev# 或使用 pnpm 安裝 pnpm a…

setsate()使用詳解原理及注意事項

📚 Flutter 狀態管理系列文章目錄 Flutter 狀態管理(setState、InheritedWidget、 Provider 、Riverpod、 BLoC / Cubit、 GetX 、MobX 、Redux) setState() 使用詳解:原理及注意事項 InheritedWidget 組件使用及原理 Flutter 中 Provider 的使用、注…

ffmpeg環境配置

ffmpeg是一個跨平臺功能強大的音視頻處理工具。它不僅能夠進行音視頻的轉換、剪切、合并等操作,還支持多種音視頻格式的解碼和編碼。無論是處理高清視頻還是音頻文件,ffmpg都能提供高效且穩定的服務。其豐富的參數設置和插件支持,使得用戶可以…

Lamp和友點CMS一鍵部署腳本(Rocky linux)

先上傳youdiancms9.3.0.zip包,可以去官網下載 #!/bin/bash #function:install apache mysql php for youdiancms9.3.0ip$(hostname -I | awk {print $1}) yhyoudian passwordyoudian123#檢查是否為root用戶 if [ "$USER" ! "root" ]; thenecho…

Arm架構下麒麟V10桌面版安裝MySQL

Arm架構下麒麟V10桌面版安裝MySQL 文章目錄 Arm架構下麒麟V10桌面版安裝MySQL基礎環境下載安裝包安裝步驟**一、準備工作****二、解壓并配置 MySQL****三、初始化 MySQL****四、啟動 MySQL 服務****五、設置環境變量****六、配置 MySQL****七、驗證安裝****常見問題****總結** …

Science Advances:皮膚附著觸覺貼片,實現多功能和增強的觸覺交互

可穿戴觸覺界面可以通過向皮膚添加觸覺刺激以及傳遞給用戶的視覺和聽覺信息來增強虛擬/增強現實系統中的沉浸式體驗。研究人員介紹了一種平錐介電彈性體致動器(FCDEA)陣列,該陣列薄而柔軟,能夠響應大面積皮膚上的電壓信號產生時空…

Ntfs!LfsGetLbcb函數分析之nt!CcPreparePinWrite

Ntfs!LfsGetLbcb函數分析之nt!CcPreparePinWrite 第一部分: 1: kd> p Ntfs!LfsPrepareLfcbForLogRecord0x78: f7179d72 e891210000 call Ntfs!LfsGetLbcb (f717bf08) 1: kd> t Ntfs!LfsGetLbcb: f717bf08 6a40 push 40h 1: kd> kc …

面試150 整數轉羅馬數字

思路 建立數字和字符的字典映射表&#xff0c;遍歷映射表做差&#xff0c;將字符添加到結果中&#xff0c;當差為0的時候&#xff0c;break退出循環。返回最后的結果output class Solution:def intToRoman(self, num: int) -> str:if num<1:return num_to_map[(1000,M)…

大模型推理-高通qnn基礎

一、高通ai 軟件的介紹 QualcommAI Engine Direct SDK(qnn) 提供較低級別、高度可定制的統一API&#xff0c;通過單獨的庫加速所有AI加速器核心上的AI模型, 可以直接用于針對特定的加速器核心或從流行的運行時&#xff08;包括Qualcomm Neural Processing SDK、TensorFlow Li…

UE5 - 制作《塞爾達傳說》中林克的技能 - 14 - 技能面板

讓我們繼續《塞爾達傳說》中林克技能的制作&#xff01;&#xff01;&#xff01; UE版本&#xff1a;5.6.0 VS版本&#xff1a;2022 本章節的核心目標&#xff1a;技能面板 先讓我們看一下完成后的效果&#xff1a; 第14章效果 本章節項目鏈接&#xff1a; 通過網盤分享的文件…

用Tensorflow進行線性回歸和邏輯回歸(八)

新的TensorFlow概念 創建簡單的機器學習系統需要學習一些新的概念。 優化器 上兩節介紹的元素已經提示了TensorFlow是如何完成機器學習的。你已學習了如何用張量操作來定義損失函數。缺少的是你不知道如何用TensorFlow進行梯度下降。盡管可以用TensorFlow元素直接用 Python定…

基于python代碼的通過爬蟲方式實現TK下載視頻(2025年6月)

Tk的視頻頁面通常需要登錄才能獲取完整數據,但通過構造匿名游客的請求,我們可以繞過登錄限制,提取視頻的元信息(如標題、ID和播放地址)。核心思路如下: 構造匿名Cookie:通過模擬瀏覽器的請求,獲取Tk服務器分配的游客Cookie。解析網頁:利用BeautifulSoup解析HTML,定位…

火山 RTC 引擎14 設置CB

一、火山RTC引擎集成時,設置CB 1、統一設置 void NRTCEngine::SetByteRtcCBS() {UserPublishStreamCallback callback = [this](const std::string& roomId, const std::string& uid, bytertc::MediaStreamType type) {this->OnSigUserPublishStream(roomId, uid, …

BUUCTF在線評測-練習場-WebCTF習題[極客大挑戰 2019]PHP1-flag獲取、解析

解題思路 打開靶場&#xff0c;提示備份 常見的備份后綴名有.bak&#xff0c;.backup&#xff0c;.zip等等 這里肯定是要掃目錄了&#xff0c;不知道是我的問題還是目錄掃描工具的問題還是BUUCTF的問題&#xff0c;每次要掃目錄能掃出一堆東西來&#xff0c;不管你用什么后綴…

對話云蝠智能:大模型如何讓企業呼叫系統從 “成本中心” 變身 “價值樞紐”?

在人工智能重塑企業服務的浪潮中&#xff0c;云蝠智能&#xff08;南京星蝠科技有限公司旗下品牌&#xff09;以深厚的技術積累和行業實踐&#xff0c;逐步成長為國內智能外呼領域的標桿企業。其發展路徑揭示了技術自主創新與場景深度結合的必然性。 一、技術架構&#xff1a;全…

Python-文件管理

1. Open方法 Python 中的文件操作主要通過內置的 open() 函數來完成&#xff0c;該函數用于打開文件&#xff0c;并返回一個文件對象。通過文件對象&#xff0c;可以進行各種文件操作&#xff0c;如讀取、寫入、關閉等。 使用 open() 方法一定要保證關閉文件對象&#xff0c;即…