版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
/1.
STM32的Timer簡介STM32中一共有11個定時器,其中2個高級控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統(tǒng)嘀嗒定時器.其中系統(tǒng)嘀嗒定時器是前文中所描述的SysTick,看門狗定時器以后再詳細研究。今天主要是研究剩下的8個定時器。定時器計數(shù)器分辨率計數(shù)器類型預(yù)分頻系數(shù)產(chǎn)生DMA請求捕獲/比較通道互補輸出TIM1TIM816位向上,向下,向上/向下1—65536之間的任意數(shù)可以4有TIM2TIM3TIM4TIM516位向上,向下,向上/向下1-65536之間的任意數(shù)可以4沒有TIM6TIM716位向上1-65536之間的任意數(shù)可以0沒有其中TIM1和TIM8是能夠產(chǎn)生3對PWM互補輸出的高級登時其,常用于三相電機的驅(qū)動,時鐘由APB2的輸出產(chǎn)生。TIM2—TIM5是普通定時器,TIM6和TIM7是基本定時器,其時鐘由APB1輸出產(chǎn)生。由于STM32的TIMER功能太復(fù)雜了,所以只能一點一點的學(xué)習(xí)。因此今天就從最簡單的開始學(xué)習(xí)起,也就是TIM2-TIM5普通定時器的定時功能.
2.
普通定時器TIM2-TIM52.1
時鐘來源計數(shù)器時鐘可以由下列時鐘源提供:·內(nèi)部時鐘(CK_INT)·外部時鐘模式1:外部輸入腳(TIx)·外部時鐘模式2:外部觸發(fā)輸入(ETR)
·內(nèi)部觸發(fā)輸入(ITRx):使用一個定時器作為另一個定時器的預(yù)分頻器,如可以配置一個定時器Timer1而作為另一個定時器Timer2的預(yù)分頻器。
由于今天的學(xué)習(xí)是最基本的定時功能,所以采用內(nèi)部時鐘。TIM2—TIM5的時鐘不是直接來自于APB1,而是來自于輸入為APB1的一個倍頻器。這個倍頻器的作用是:當(dāng)APB1的預(yù)分頻系數(shù)為1時,這個倍頻器不起作用,定時器的時鐘頻率等于APB1的頻率;當(dāng)APB1的預(yù)分頻系數(shù)為其他數(shù)值時(即預(yù)分頻系數(shù)為2、4、8或16),這個倍頻器起作用,定時器的時鐘頻率等于APB1的頻率的2倍。APB1的分頻在STM32_SYSTICK的學(xué)習(xí)筆記中有詳細描述.通過倍頻器給定時器時鐘的好處是:APB1不但要給TIM2-TIM5提供時鐘,還要為其他的外設(shè)提供時鐘;設(shè)置這個倍頻器可以保證在其他外設(shè)使用較低時鐘頻率時,TIM2—TIM5仍然可以得到較高的時鐘頻率。2.2
計數(shù)器模式TIM2—TIM5可以由向上計數(shù)、向下計數(shù)、向上向下雙向計數(shù).向上計數(shù)模式中,計數(shù)器從0計數(shù)到自動加載值(TIMx_ARR計數(shù)器內(nèi)容),然后重新從0開始計數(shù)并且產(chǎn)生一個計數(shù)器溢出事件.在向下模式中,計數(shù)器從自動裝入的值(TIMx_ARR)開始向下計數(shù)到0,然后從自動裝入的值重新開始,并產(chǎn)生一個計數(shù)器向下溢出事件.而中央對齊模式(向上/向下計數(shù))是計數(shù)器從0開始計數(shù)到自動裝入的值-1,產(chǎn)生一個計數(shù)器溢出事件,然后向下計數(shù)到1并且產(chǎn)生一個計數(shù)器溢出事件;然后再從0開始重新計數(shù)。2.3
編程步驟1.
配置系統(tǒng)時鐘;2.
配置NVIC;3。
配置GPIO;4。
配置TIMER;其中,前3項在前面的筆記中已經(jīng)給出,在此就不再贅述了。第4項配置TIMER有如下配置:(1)
利用TIM_DeInit()函數(shù)將Timer設(shè)置為默認缺省值;(2)
TIM_InternalClockConfig()選擇TIMx來設(shè)置內(nèi)部時鐘源;(3)
TIM_Perscaler來設(shè)置預(yù)分頻系數(shù);(4)
TIM_ClockDivision來設(shè)置時鐘分割;(5)
TIM_CounterMode來設(shè)置計數(shù)器模式;(6)
TIM_Period來設(shè)置自動裝入的值(7)
TIM_ARRPerloadConfig()來設(shè)置是否使用預(yù)裝載緩沖器(8)
TIM_ITConfig()來開啟TIMx的中斷其中(3)-(6)步驟中的參數(shù)由TIM_TimerBaseInitTypeDef結(jié)構(gòu)體給出。步驟(3)中的預(yù)分頻系數(shù)用來確定TIMx所使用的時鐘頻率,具體計算方法為:CK_INT/(TIM_Perscaler+1)。CK_INT是內(nèi)部時鐘源的頻率,是根據(jù)2.1中所描述的APB1的倍頻器送出的時鐘,TIM_Perscaler是用戶設(shè)定的預(yù)分頻系數(shù),其值范圍是從0–65535。步驟(4)中的時鐘分割定義的是在定時器時鐘頻率(CK_INT)與數(shù)字濾波器(ETR,TIx)使用的采樣頻率之間的分頻比例.TIM_ClockDivision的參數(shù)如下表:TIM_ClockDivision描述二進制值TIM_CKD_DIV1tDTS=Tck_tim0x00TIM_CKD_DIV2tDTS=2*Tck_tim0x01TIM_CKD_DIV4tDTS=4*Tck_tim0x10數(shù)字濾波器(ETR,TIx)是為了將ETR進來的分頻后的信號濾波,保證通過信號頻率不超過某個限定。步驟(7)中需要禁止使用預(yù)裝載緩沖器。當(dāng)預(yù)裝載緩沖器被禁止時,寫入自動裝入的值(TIMx_ARR)的數(shù)值會直接傳送到對應(yīng)的影子寄存器;如果使能預(yù)加載寄存器,則寫入ARR的數(shù)值會在更新事件時,才會從預(yù)加載寄存器傳送到對應(yīng)的影子寄存器。ARM中,有的邏輯寄存器在物理上對應(yīng)2個寄存器,一個是程序員可以寫入或讀出的寄存器,稱為preloadregister(預(yù)裝載寄存器),另一個是程序員看不見的、但在操作中真正起作用的寄存器,稱為shadowregister(影子寄存器);設(shè)計preloadregister和shadowregister的好處是,所有真正需要起作用的寄存器(shadowregister)可以在同一個時間(發(fā)生更新事件時)被更新為所對應(yīng)的preloadregister的內(nèi)容,這樣可以保證多個通道的操作能夠準確地同步。如果沒有shadowregister,或者preloadregister和shadowregister是直通的,即軟件更新preloadregister時,同時更新了shadowregister,因為軟件不可能在一個相同的時刻同時更新多個寄存器,結(jié)果造成多個通道的時序不能同步,如果再加上其它因素(例如中斷),多個通道的時序關(guān)系有可能是不可預(yù)知的。
3。
程序源代碼本例實現(xiàn)的是通過TIM2的定時功能,使得LED燈按照1s的時間間隔來閃爍
#include"stm32f10x_lib.h"
voidRCC_cfg();voidTIMER_cfg();voidNVIC_cfg();voidGPIO_cfg();
intmain(){
RCC_cfg();
NVIC_cfg();
GPIO_cfg();
TIMER_cfg();
//開啟定時器2
TIM_Cmd(TIM2,ENABLE);
while(1);}
voidRCC_cfg(){
//定義錯誤狀態(tài)變量
ErrorStat(yī)usHSEStartUpStatus;
//將RCC寄存器重新設(shè)置為默認值
RCC_DeInit();
//打開外部高速時鐘晶振
RCC_HSEConfig(RCC_HSE_ON);
//等待外部高速時鐘晶振工作
HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)
{
//設(shè)置AHB時鐘(HCLK)為系統(tǒng)時鐘
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//設(shè)置高速AHB時鐘(APB2)為HCLK時鐘
RCC_PCLK2Config(RCC_HCLK_Div1);
//設(shè)置低速AHB時鐘(APB1)為HCLK的2分頻
RCC_PCLK1Config(RCC_HCLK_Div2);
//設(shè)置FLASH代碼延時
FLASH_SetLatency(FLASH_Lat(yī)ency_2);
//使能預(yù)取指緩存
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//設(shè)置PLL時鐘,為HSE的9倍頻
8MHz*9=72MHz
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
//使能PLL
RCC_PLLCmd(ENABLE);
//等待PLL準備就緒
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
//設(shè)置PLL為系統(tǒng)時鐘源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//判斷PLL是否是系統(tǒng)時鐘
while(RCC_GetSYSCLKSource()!=0x08);
}
//允許TIM2的時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
//允許GPIO的時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
}
voidTIMER_cfg(){
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
//重新將Timer設(shè)置為缺省值
TIM_DeInit(TIM2);
//采用內(nèi)部時鐘給TIM2提供時鐘源
TIM_InternalClockConfig(TIM2);
//預(yù)分頻系數(shù)為36000-1,這樣計數(shù)器時鐘為72MHz/36000=2kHz
TIM_TimeBaseStructure.TIM_Prescaler=36000-1;
//設(shè)置時鐘分割
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
//設(shè)置計數(shù)器模式為向上計數(shù)模式
TIM_TimeBaseStructure。TIM_CounterMode=TIM_CounterMode_Up;
//設(shè)置計數(shù)溢出大小,每計2000個數(shù)就產(chǎn)生一個更新事件
TIM_TimeBaseStructure.TIM_Period=2000-1;
//將配置應(yīng)用到TIM2中
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
//清除溢出中斷標(biāo)志
TIM_ClearFlag(TIM2,TIM_FLAG_Update);
//禁止ARR預(yù)裝載緩沖器
TIM_ARRPreloadConfig(TIM2,DISABLE);
//開啟TIM2的中斷
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);}
voidNVIC_cfg(){
NVIC_InitTypeDefNVIC_InitStructure;
//選擇中斷分組1
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
//選擇TIM2的中斷通道
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQChannel;
//搶占式中斷優(yōu)先級設(shè)置為0
NVIC_InitStructure。NVIC_IRQChannelPreemptionPriority=0;
//響應(yīng)式中斷優(yōu)先級設(shè)置為0
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
//使能中斷
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);}
voidGPIO_cfg(){
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
//選擇引腳5
GPIO_InitStructure。GPIO_Speed=GPIO_Speed_50MHz;//輸出頻率最大50MHz
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//帶上拉電阻輸出
GPIO_Init(GPIOB,&GPIO_InitStructure);}在stm32f10x_it。c中,我們找到函數(shù)TIM2_IRQHandler(),并向其中添加代碼voidTIM2_IRQHandler(void){
u8ReadValue;
//檢測是否發(fā)生溢出更新事件
if(TIM_GetITStatus(TIM2,TIM_IT_Update)?。絉ESET)
{
//清除TIM2的中斷待處理位
TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);
//將PB。5管腳輸出數(shù)值寫入ReadValue
ReadValue=GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5);
if(ReadValue==0)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
else
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
}
}STM32學(xué)習(xí)筆記(5):通用定時器PWM輸出1.
TIMER輸出PWM基本概念
脈沖寬度調(diào)制(PWM),是英文“PulseWidthModulation”的縮寫,簡稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術(shù)。簡單一點,就是對脈沖寬度的控制。一般用來控制步進電機的速度等等.STM32的定時器除了TIM6和TIM7之外,其他的定時器都可以用來產(chǎn)生PWM輸出,其中高級定時器TIM1和TIM8可以同時產(chǎn)生7路的PWM輸出,而通用定時器也能同時產(chǎn)生4路的PWM輸出。
1.1
PWM輸出模式STM32的PWM輸出有兩種模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位確定的(“110"為模式1,“111”為模式2)。模式1和模式2的區(qū)別如下:110:PWM模式1-在向上計數(shù)時,一旦TIMx_CNT<TIMx_CCR1時通道1為有效電平,否則為無效電平;在向下計數(shù)時,一旦TIMx_CNT〉TIMx_CCR1時通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。111:PWM模式2—在向上計數(shù)時,一旦TIMx_CNT〈TIMx_CCR1時通道1為無效電平,否則為有效電平;在向下計數(shù)時,一旦TIMx_CNT>TIMx_CCR1時通道1為有效電平,否則為無效電平。由此看來,模式1和模式2正好互補,互為相反,所以在運用起來差別也并不太大。而從計數(shù)模式上來看,PWM也和TIMx在作定時器時一樣,也有向上計數(shù)模式、向下計數(shù)模式和中心對齊模式,關(guān)于3種模式的具體資料,可以查看《STM32參考手冊》的“14.3.9PWM模式”一節(jié),在此就不詳細贅述了。
1.2
PWM輸出管腳PWM的輸出管腳是確定好的,具體的引腳功能可以查看《STM32參考手冊》的“8.3.7定時器復(fù)用功能重映射”一節(jié)。在此需要強調(diào)的是,不同的TIMx有分配不同的引腳,但是考慮到管腳復(fù)用功能,STM32提出了一個重映像的概念,就是說通過設(shè)置某一些相關(guān)的寄存器,來使得在其他非原始指定的管腳上也能輸出PWM。但是這些重映像的管腳也是由參考手冊給出的.比如說TIM3的第2個通道,在沒有重映像的時候,指定的管腳是PA.7,如果設(shè)置部分重映像之后,TIM3_CH2的輸出就被映射到PB.5上了,如果設(shè)置了完全重映像的話,TIM3_CH2的輸出就被映射到PC。7上了。
1.3
PWM輸出信號PWM輸出的是一個方波信號,信號的頻率是由TIMx的時鐘頻率和TIMx_ARR預(yù)分頻器所決定的,具體設(shè)置方法在前面一個學(xué)習(xí)筆記中有詳細的交代。而輸出信號的占空比則是由TIMx_CRRx寄存器確定的。其公式為“占空比=(TIMx_CRRx/TIMx_ARR)*100%”,因此,可以通過向CRR中填入適當(dāng)?shù)臄?shù)來輸出自己所需的頻率和占空比的方波信號。
2。
TIMER輸出PWM實現(xiàn)步驟1。
設(shè)置RCC時鐘;2。
設(shè)置GPIO時鐘;3.
設(shè)置TIMx定時器的相關(guān)寄存器;4.
設(shè)置TIMx定時器的PWM相關(guān)寄存器.
第1步設(shè)置RCC時鐘已經(jīng)在前文中給出了詳細的代碼,在此就不再多說了。需要注意的是通用定時器TIMx是由APB1提供時鐘,而GPIO則是由APB2提供時鐘。注意,如果需要對PWM的輸出進行重映像的話,還需要開啟引腳復(fù)用時鐘AFIO.第2步設(shè)置GPIO時鐘時,GPIO模式應(yīng)該設(shè)置為復(fù)用推挽輸出GPIO_Mode_AF_PP,如果需要引腳重映像的話,則需要用GPIO_PinRemapConfig()函數(shù)進行設(shè)置.第3步設(shè)置TIMx定時器的相關(guān)寄存器時,和前一篇學(xué)習(xí)筆記一樣,設(shè)置好相關(guān)的TIMx的時鐘和技術(shù)模式等等。具體設(shè)置參看“TIMER基本定時功能”的學(xué)習(xí)筆記。第4步設(shè)置PWM相關(guān)寄存器,首先要設(shè)置PWM模式(默認情況下PWM是凍結(jié)的),然后設(shè)置占空比(根據(jù)前面所述公式進行計算),再設(shè)置輸出比較極性:當(dāng)設(shè)置為High時,輸出信號不反相,當(dāng)設(shè)置為Low時,輸出信號反相之后再輸出。最重要是是要使能TIMx的輸出狀態(tài)和使能TIMx的PWM輸出使能。相關(guān)設(shè)置完成之后,就可以通過TIM_Cmd()來打開TIMx定時器,從而得到PWM輸出了。
3。
TIMER輸出PWM源代碼由于我現(xiàn)在手上的奮斗開發(fā)板是將PB。5接到LED上,因此需要使用TIM3的CH2通道,并且要進行引腳重映像.打開TIM3之后,PWM輸出,使得LED點亮,通過改變PWM_cfg()中的占空比可以調(diào)節(jié)LED的亮度。
#include"stm32f10x_lib。h"
voidRCC_cfg();voidGPIO_cfg();voidTIMER_cfg();voidPWM_cfg();//占空比,取值范圍為0—100intdutyfactor=50;
intmain(){?intTemp; RCC_cfg();?GPIO_cfg(); TIMER_cfg(); PWM_cfg();
?//使能TIM3計時器,開始輸出PWM?TIM_Cmd(TIM3,ENABLE);
?while(1);}
voidRCC_cfg(){?//定義錯誤狀態(tài)變量?ErrorStatusHSEStartUpStatus; //將RCC寄存器重新設(shè)置為默認值 RCC_DeInit();
?//打開外部高速時鐘晶振 RCC_HSEConfig(RCC_HSE_ON);
?//等待外部高速時鐘晶振工作 HSEStartUpStatus=RCC_WaitForHSEStartUp(); if(HSEStartUpStatus==SUCCESS)?{??//設(shè)置AHB時鐘(HCLK)為系統(tǒng)時鐘 ?RCC_HCLKConfig(RCC_SYSCLK_Div1);
? //設(shè)置高速AHB時鐘(APB2)為HCLK時鐘 RCC_PCLK2Config(RCC_HCLK_Div1);
??//設(shè)置低速AHB時鐘(APB1)為HCLK的2分頻 RCC_PCLK1Config(RCC_HCLK_Div2);? ?//設(shè)置FLASH代碼延時? FLASH_SetLat(yī)ency(FLASH_Lat(yī)ency_2);
? //使能預(yù)取指緩存 ?FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
?//設(shè)置PLL時鐘,為HSE的9倍頻8MHz*9=72MHz ?RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
//使能PLL? RCC_PLLCmd(ENABLE);
??//等待PLL準備就緒? while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
? //設(shè)置PLL為系統(tǒng)時鐘源? RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//判斷PLL是否是系統(tǒng)時鐘 ?while(RCC_GetSYSCLKSource()!=0x08);?}
//開啟TIM3的時鐘 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //開啟GPIOB的時鐘和復(fù)用功能?RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
}
voidGPIO_cfg(){?GPIO_InitTypeDefGPIO_InitStructure;
//部分映射,將TIM3_CH2映射到PB5// GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);?GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
?//選擇引腳5?GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;?//輸出頻率最大50MHz ? ?? ?GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //復(fù)用推挽輸出 ? ?? ?GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;?
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度環(huán)保材料研發(fā)與生產(chǎn)合作合同范本4篇
- 2025版旅游度假區(qū)租賃與旅游服務(wù)合作協(xié)議3篇
- 2025年度智能交通系統(tǒng)保密管理與服務(wù)合同
- 二零二五年度科技型中小企業(yè)貸款合同
- 2025年度知識產(chǎn)權(quán)授權(quán)委托書簽訂協(xié)議
- 2025年度門面出租合同終止與租賃合同終止后合同解除及違約賠償協(xié)議
- 2025年度銀行存款賬戶遠程開戶服務(wù)協(xié)議
- 2025年度私人房產(chǎn)使用權(quán)轉(zhuǎn)讓與智能家居系統(tǒng)安裝合同
- 二零二五年度農(nóng)業(yè)科技園區(qū)用地租賃合同
- 二零二五年度酒店員工福利與社會保障聘用合同
- 2024年全國體育專業(yè)單獨招生考試數(shù)學(xué)試卷試題真題(含答案)
- 北師大版小學(xué)三年級上冊數(shù)學(xué)第五單元《周長》測試卷(含答案)
- DB45T 1950-2019 對葉百部生產(chǎn)技術(shù)規(guī)程
- 2025屆河北省衡水市衡水中學(xué)高考仿真模擬英語試卷含解析
- 新修訂《保密法》知識考試題及答案
- 電工基礎(chǔ)知識培訓(xùn)課程
- 住宅樓安全性檢測鑒定方案
- 廣東省潮州市潮安區(qū)2023-2024學(xué)年五年級上學(xué)期期末考試數(shù)學(xué)試題
- 市政道路及設(shè)施零星養(yǎng)護服務(wù)技術(shù)方案(技術(shù)標(biāo))
- 《論語》學(xué)而篇-第一課件
- 《寫美食有方法》課件
評論
0/150
提交評論