嵌入式學習--江協stm32day1

失蹤人口回歸了,stm32的學習比起51要慢一些,因為涉及插線,可能存在漏插,不牢固等問題。

相對于51直接對寄存器的設置,stm32因為是32位修改起來比較麻煩,江協課程是基于標準庫的,是對封裝函數進行操作,這要求我們對于模塊的使用在開始就規劃好。

GPIO通用輸入輸出口

APB2是外設總線

輸入模式

  1. 浮空輸入
    • 原理:GPIO 端口無內部上拉或下拉電阻,電平狀態完全由外部輸入決定,引腳懸空時電平不確定。
    • 使用場景:用于串口通信接收端(如 UART、USART 的 RX 引腳 ),接收外部設備電平變化信號;檢測有穩定高低電平的外部傳感器信號(如霍爾、紅外傳感器 );外部中斷信號輸入檢測;數字輸入信號檢測。
    • 特點:能真實反映外部電平,但易受干擾,引腳懸空時讀數無參考意義。
  2. 上拉輸入
    • 原理:內部連接上拉電阻,無外部輸入信號時,GPIO 端口保持高電平。
    • 使用場景:機械按鍵或撥動開關輸入,未按下時為高電平,按下接地變低電平;IIC 通信 SDA 引腳,保證總線數據傳輸默認高電平;SPI 通信從設備選擇引腳(NSS),無信號時保持高,主設備選擇時拉低 ;繼電器狀態等開關量信號輸入檢測;電源檢測引腳,檢測電源供電狀態。
    • 特點:確保無外部信號時輸入為高電平,增強信號穩定性,防信號漂移。
  3. 下拉輸入
    • 原理:內部連接下拉電阻,無外部輸入信號時,GPIO 端口保持低電平。
    • 使用場景:CAN_RX 引腳接收 CAN 總線信號,確保總線無信號時引腳低電平;按鈕接地觸發的按鍵輸入,未按下時低電平,按下拉高 ;默認低電平的數字電路信號輸入;下拉電阻保持低電平的光電開關等傳感器輸入;檢測外部設備低電平狀態的電路。
    • 特點:確保無外部信號時輸入為低電平,適用于外部信號常態為高的檢測場景。
  4. 模擬輸入
    • 原理:輸入信號不經施密特觸發器處理,直接接入內部 ADC,將模擬信號轉為數字信號。
    • 使用場景:連接溫度、光照、濕度、氣壓等模擬傳感器采集信號;電池電壓檢測;電流檢測(通過分流電阻和運算放大器轉換為電壓信號 );光強檢測等。
    • 特點:用于采集連續變化的模擬量,供 MCU 處理分析。

輸出模式

  1. 推挽輸出
    • 原理:由兩個互補晶體管組成,可輸出高電平(接 VDD )和低電平(接 VSS ),能向負載灌電流或抽取電流,導通損耗小、效率高。
    • 使用場景:驅動 LED、繼電器、蜂鳴器;控制小型直流電機;SPI 通信的 SCK、MOSI、MISO 等需強電平信號的總線通信引腳;各類狀態指示燈控制。
    • 特點:驅動能力強,可快速切換高低電平,適合直接驅動數字負載。
  2. 開漏輸出
    • 原理:輸出端類似三極管集電極,只能輸出低電平(接 VSS ),輸出高電平時為高阻態,需外部上拉電阻拉高。
    • 使用場景:IIC 總線通信的 SCL 和 SDA 引腳;多設備共享數據線的通信總線;GPIO 中斷信號輸出(通過外部上拉電阻共享中斷信號線 );不同電壓域電源管理切換電路;電平轉換(適配不同電壓器件 )。
    • 特點:可實現線與邏輯,方便電平匹配,適合多設備通信及跨電壓域應用,但高電平需外部上拉。
  3. 復用推挽輸出
    • 原理:GPIO 端口由片上外設控制,如定時器 PWM 輸出、SPI 的 MOSI 和 MISO 等,兼具推挽輸出特性,能主動提供電流驅動負載。
    • 使用場景:UART 通信發送端(TX 引腳 );SPI 通信的時鐘線(SCK)、主輸出從輸入(MOSI)、主輸入從輸出(MISO)引腳 ;CAN 通信發送端(TX 引腳 );伺服電機或 DC 電機控制的 PWM 信號輸出;外部設備的時鐘、使能等控制信號輸出。
    • 特點:用于特定外設功能,借助推挽輸出特性提供穩定驅動。
  4. 復用開漏輸出
    • 原理:GPIO 端口由片上外設控制,輸出模式為開漏輸出,高電平需外部或內部上拉電阻,可實現線與邏輯。
    • 使用場景:IIC 通信的 SDA 和 SCL 引腳(多設備共享 );SMBus 通信(類似 IIC 協議 );1 - Wire 單總線通信;MCU 接收多個外設中斷信號(避免電平沖突 );電源管理信號(控制電壓域轉換 )。
    • 特點:適用于特定外設多設備共享總線通信,需外部上拉電阻配合,可解決電平沖突問題。

這里只需要大概了解一下即可,后面結合具體外設理解

GPIO在后面會頻繁使用,我們要熟悉使用流程

1.配置時鐘2.初始化結構體

GPIO輸出

以LED介紹GPIO的使用

#include "stm32f10x.h"                  // Device header
void LED_Init()
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2);
}
void LED1_ON()
{GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
void LED1_OFF()
{GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
void LED1_Turn()
{if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0){GPIO_SetBits(GPIOA,GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_1);}
}

LED閃爍

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//開啟GPIOA的時鐘//使用各個外設前必須開啟時鐘,否則對外設的操作無效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定義結構體變量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,賦值為推挽輸出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				//GPIO引腳,賦值為第0號引腳GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,賦值為50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//將賦值后的構體變量傳遞給GPIO_Init函數//函數內部會自動根據結構體的參數配置相應寄存器//實現GPIOA的初始化/*主循環,循環體內的代碼會一直循環執行*/while (1){/*設置PA0引腳的高低電平,實現LED閃爍,下面展示3種方法*//*方法1:GPIO_ResetBits設置低電平,GPIO_SetBits設置高電平*/GPIO_ResetBits(GPIOA, GPIO_Pin_0);					//將PA0引腳設置為低電平Delay_ms(500);										//延時500msGPIO_SetBits(GPIOA, GPIO_Pin_0);					//將PA0引腳設置為高電平Delay_ms(500);										//延時500ms/*方法2:GPIO_WriteBit設置低/高電平,由Bit_RESET/Bit_SET指定*/GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);		//將PA0引腳設置為低電平Delay_ms(500);										//延時500msGPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);			//將PA0引腳設置為高電平Delay_ms(500);										//延時500ms/*方法3:GPIO_WriteBit設置低/高電平,由數據0/1指定,數據需要強轉為BitAction類型*/GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);		//將PA0引腳設置為低電平Delay_ms(500);										//延時500msGPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);		//將PA0引腳設置為高電平Delay_ms(500);										//延時500ms}
}

LED流水燈

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//開啟GPIOA的時鐘//使用各個外設前必須開啟時鐘,否則對外設的操作無效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定義結構體變量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,賦值為推挽輸出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;				//GPIO引腳,賦值為所有引腳GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,賦值為50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//將賦值后的構體變量傳遞給GPIO_Init函數//函數內部會自動根據結構體的參數配置相應寄存器//實現GPIOA的初始化/*主循環,循環體內的代碼會一直循環執行*/while (1){/*使用GPIO_Write,同時設置GPIOA所有引腳的高低電平,實現LED流水燈*/GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001,PA0引腳為低電平,其他引腳均為高電平,注意數據有按位取反Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010,PA1引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100,PA2引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000,PA3引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0010);	//0000 0000 0001 0000,PA4引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0020);	//0000 0000 0010 0000,PA5引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0040);	//0000 0000 0100 0000,PA6引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0080);	//0000 0000 1000 0000,PA7引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100ms}
}

? ?蜂鳴器

這個是有源蜂鳴器? ?,沒法唱天空之城,差評

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//開啟GPIOB的時鐘//使用各個外設前必須開啟時鐘,否則對外設的操作無效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定義結構體變量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,賦值為推挽輸出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;				//GPIO引腳,賦值為第12號引腳GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,賦值為50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);					//將賦值后的構體變量傳遞給GPIO_Init函數//函數內部會自動根據結構體的參數配置相應寄存器//實現GPIOB的初始化/*主循環,循環體內的代碼會一直循環執行*/while (1){GPIO_ResetBits(GPIOB, GPIO_Pin_12);		//將PB12引腳設置為低電平,蜂鳴器鳴叫Delay_ms(100);							//延時100msGPIO_SetBits(GPIOB, GPIO_Pin_12);		//將PB12引腳設置為高電平,蜂鳴器停止Delay_ms(100);							//延時100msGPIO_ResetBits(GPIOB, GPIO_Pin_12);		//將PB12引腳設置為低電平,蜂鳴器鳴叫Delay_ms(100);							//延時100msGPIO_SetBits(GPIOB, GPIO_Pin_12);		//將PB12引腳設置為高電平,蜂鳴器停止Delay_ms(700);							//延時700ms}
}

GPIO輸入

?按鍵控制LED

IPU為上拉輸入(這里還沒學定時器,還是用delay消抖)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"/*** 函    數:按鍵初始化* 參    數:無* 返 回 值:無*/
void Key_Init(void)
{/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);		//開啟GPIOB的時鐘/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);						//將PB1和PB11引腳初始化為上拉輸入
}/*** 函    數:按鍵獲取鍵碼* 參    數:無* 返 回 值:按下按鍵的鍵碼值,范圍:0~2,返回0代表沒有按鍵按下* 注意事項:此函數是阻塞式操作,當按鍵按住不放時,函數會卡住,直到按鍵松手*/
uint8_t Key_GetNum(void)
{uint8_t KeyNum = 0;		//定義變量,默認鍵碼值為0if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0)			//讀PB1輸入寄存器的狀態,如果為0,則代表按鍵1按下{Delay_ms(20);											//延時消抖while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);	//等待按鍵松手Delay_ms(20);											//延時消抖KeyNum = 1;												//置鍵碼為1}if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0)			//讀PB11輸入寄存器的狀態,如果為0,則代表按鍵2按下{Delay_ms(20);											//延時消抖while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);	//等待按鍵松手Delay_ms(20);											//延時消抖KeyNum = 2;												//置鍵碼為2}return KeyNum;			//返回鍵碼值,如果沒有按鍵按下,所有if都不成立,則鍵碼為默認值0
}

光敏電阻控制蜂鳴器

? 也是化身電報專家了

#include "stm32f10x.h"                  // Device header/*** 函    數:光敏傳感器初始化* 參    數:無* 返 回 值:無*/
void LightSensor_Init(void)
{/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);		//開啟GPIOB的時鐘/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);						//將PB13引腳初始化為上拉輸入
}/*** 函    數:獲取當前光敏傳感器輸出的高低電平* 參    數:無* 返 回 值:光敏傳感器輸出的高低電平,范圍:0/1*/
uint8_t LightSensor_Get(void)
{return GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13);			//返回PB13輸入寄存器的狀態
}

????????學習stm32過程中,感覺自己真的要成為工程師了,cv工程師(bushi)。在使用外設前,要先去函數庫找到需要使用的函數,然后一個個復制過去,然后再去查看函數的定義,配置里面的參數,需要邏輯的大多都是在主函數里面寫(也有可能是入門學習的原因)

今日語錄:打不倒我的,只會讓我更加強大(農p無疑了)

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

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

相關文章

vue+elementUi+axios實現分頁(MyBatis、Servlet)

vueelementUiaxios實現分頁 文章目錄 vueelementUiaxios實現分頁1.代碼實現【HTML】**【Servlet層】****【Service層】****【Dao層】** 2.總結步驟3.實現要點4.注意事項4.注意事項 注:此項目 前端為 html、 后端采用 mybatis、servlet實現 1.代碼實現 【HTML】…

vue-10( 動態路由匹配和路由參數)

動態路由匹配和路由參數 動態路由匹配是 Vue Router 的一個強大功能,它允許你創建靈活且可重用的路由。您可以使用參數來捕獲 URL 的動態段,而不是為每個可能的值定義特定路由。這在處理具有唯一標識符的資源(如用戶配置文件、產品詳細信息或…

劫持進程注入

劫持進程注入和遠程線程注入的區別就是 遠程線程注入是向一個正在運行中的進程注入 而劫持進程注入則是自己打開一個進程(以掛起的方式) 然后再進行注入的操作 這樣做的原因是當進程在掛起的狀態時他的所有線程都是處于未啟用的階段 這樣就可以避免目標進程的反注入線程的…

uni-app學習筆記二十--pages.json頁面路由pages設置

uni-app 通過 pages 節點配置應用由哪些頁面組成,pages 節點接收一個數組,數組每個項都是一個對象,其屬性值如下: 屬性類型默認值描述pathString配置頁面路徑styleObject配置頁面窗口表現,配置項參考下方 pageStylene…

VScode編譯調試debug,gpu的cuda程序,Nsight

進行下面操作的前提是,我們的環境已經能跑簡單的CUDA程序了。 一、安裝Nsight 二、創建launch.json文件 {"version": "0.2.0","configurations": [{"name": "CUDA C: Launch","type": "cuda-gdb…

鏈表題解——合并兩個有序鏈表【LeetCode】

1. 算法思路 這段代碼的核心思想是 合并兩個有序鏈表。具體步驟如下: 初始化哨兵節點: 創建一個哨兵節點 dummy,用于簡化鏈表操作,避免處理頭節點的特殊情況。使用指針 cur 指向 dummy,用于構建新的鏈表。 遍歷兩個鏈…

K8S集群主機網絡端口不通問題排查

一、環境: k8s: v1.23.6 docker: 20.10.14 問題和故障現象:devops主機集群主機節點到端口8082不通(網絡策略已經申請,并且網絡策略已經實施完畢),而且網絡實施人員再次確認,網絡策…

qemu安裝risc-V 64

參考這篇文章https://developer.aliyun.com/article/1323996,其中在wsl下面安裝可能會報錯環境變量中有空格。 # clean_path.sh#!/bin/bash# 備份舊 PATH OLD_PATH"$PATH"# 過濾掉包含空格、制表符、換行的路徑 CLEAN_PATH"" IFS: read -ra PA…

python爬蟲:RoboBrowser 的詳細使用

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 一、RoboBrowser概述1.1 RoboBrowser 介紹1.2 安裝 RoboBrowser1.3 與類似工具比較二、基本用法2.1 創建瀏覽器對象并訪問網頁2.2 查找元素2.3 填寫和提交表單三、高級功能3.1 處理文件上傳3.2 處理JavaScript重定向3.3…

CTFSHOW-WEB-36D杯

給你shell 這道題對我這個新手還是有難度的&#xff0c;花了不少時間。首先f12看源碼&#xff0c;看到?view_source&#xff0c;點進去看源碼 <?php //Its no need to use scanner. Of course if you want, but u will find nothing. error_reporting(0); include "…

CentOS_7.9 2U物理服務器上部署系統簡易操作步驟

近期單位網站革新&#xff0c;鑒于安全加固&#xff0c;計劃將原有Windows環境更新到Linux-CentOS 7.9&#xff0c;這版本也沒的說&#xff08;絕&#xff09;了&#xff08;版&#xff09;官方停止更新&#xff0c;但無論如何還是被sisi的牽掛著這一大批人&#xff0c;畢竟從接…

LVS-DR高可用-Keepalived

目錄 Keepalved雙機熱備 核心概念 關鍵組件 工作流程 實例環境 配置keepalived Web服務器配置 Keepalved雙機熱備 Keepalived雙機熱備是一種基于VRRP&#xff08;Virtual Router Redundancy Protocol&#xff0c;虛擬路由冗余協議&#xff09;實現的高可用性解決方案&am…

Polar編譯碼(SCL譯碼)和LDPC編譯碼(BP譯碼)的matlab性能仿真,并對比香農限

目錄 1.算法仿真效果 2.算法涉及理論知識概要 2.1香農極限 2.2 Polar碼編譯碼原理與SCL譯碼 2.3 LDPC碼編譯碼原理與BP譯碼 3.MATLAB核心程序 4.完整算法代碼文件獲得 1.算法仿真效果 matlab2024b仿真結果如下&#xff08;完整代碼運行后無水印&#xff09;&#xff1a…

AI 產品的 MVP 構建邏輯:Prompt 工程 ≠ 產品工程?(實戰增補篇)

一. 系統思維&#xff1a;產品工程的全局把控&#xff08;實戰增補篇&#xff09; 1. 某智能風控系統的彈性架構實踐 某消費金融公司在開發「30 秒極速貸」產品時&#xff0c;面臨兩大挑戰&#xff1a; Prompt 優化困境&#xff1a;傳統風控模型依賴 “提取用戶信用報告關鍵…

Unity程序集

對于Unity的程序集&#xff0c;具體內容可以參考Unity官方文檔&#xff0c;程序集定義 - 預定義程序集 比如Unity的默認程序集&#xff0c;Assembly-CSharp.dll&#xff0c;還有其他的比如 Assembly-CSharp-Editor.dll&#xff0c;Assembly-CSharp-firstpass.dll 沒有指定或…

【架構藝術】平衡技術架構設計和預期的產品形態

近期筆者因為工作原因&#xff0c;開始啟動team內部部分技術項目的重構。在事情啟動的過程中&#xff0c;內部對于這件事情的定性和投入有一些爭論&#xff0c;但最終還是敲定了下來。其中部分爭論點主要在于產品形態&#xff0c;因為事情涉及到跨部門合作&#xff0c;所以產品…

React和原生事件的區別

一、核心差異對比表 維度原生事件React 事件綁定語法HTML 屬性&#xff08;onclick&#xff09;或 DOM API&#xff08;addEventListener&#xff09;JSX 中使用駝峰式屬性&#xff08;onClick&#xff09;綁定位置直接綁定到具體 DOM 元素統一委托到根節點&#xff08;React …

大模型-modelscope下載和使用chatglm3-6b模型

前言 由于官方chatglm3-6b大模型文件下載比較慢&#xff0c;找到國內modelscope代替方案 1.SDK下載 pip install modelscope2.下載大模型文件 ?方法1:通過pip下載 1.安裝 setuptools 在當前使用的 Python 環境中安裝 setuptools pip install setuptools2.通過如下命令安…

【unity游戲開發——編輯器擴展】AssetDatabase公共類在編輯器環境中管理和操作項目中的資源

注意&#xff1a;考慮到編輯器擴展的內容比較多&#xff0c;我將編輯器擴展的內容分開&#xff0c;并全部整合放在【unity游戲開發——編輯器擴展】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言一、AssetDatabase常用API1、創建資源1.1 API1.2 示例 …

css實現文字漸變

在前端開發中&#xff0c;給文字設置漸變色是完全可以實現的&#xff0c;常用的方式是結合 CSS 的 background、-webkit-background-clip 和 -webkit-text-fill-color 屬性。下面是一個常見的實現方法&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> …