ARM技術(shù)與應(yīng)用第9章ADC_第1頁
ARM技術(shù)與應(yīng)用第9章ADC_第2頁
ARM技術(shù)與應(yīng)用第9章ADC_第3頁
ARM技術(shù)與應(yīng)用第9章ADC_第4頁
ARM技術(shù)與應(yīng)用第9章ADC_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

*嵌入式系統(tǒng)原理與應(yīng)用1課程回顧:GPIO給相應(yīng)GPIO端口時鐘信號RCC_APB2PeriphClockCmd(RCC_APB2_Periph_GPIOx,ENABLE);初始化相應(yīng)端口GPIO_DeInit(GPIOA);GPIO_Init(GPIOA,&GPIOInitStructure);*嵌入式系統(tǒng)原理與應(yīng)用2課程回顧:GPIO設(shè)置相應(yīng)IO端口GPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_ResetBits(GPIOA,GPIO_Pin_3);GPIO_WriteBit(GPIOA,GPIO_Pin_3,Bit_SET);GPIO_Write(GPIOC,0x3A4B)*嵌入式系統(tǒng)原理與應(yīng)用3課程回顧:GPIO讀取輸出IO端口狀態(tài)GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_2);GPIO_ReadOutputData(GPIOB);讀取輸入IO端口狀態(tài)GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2);GPIO_ReadInputData(GPIOB);*嵌入式系統(tǒng)原理與應(yīng)用4課程回顧:中斷和事件什么是中斷?搶占式優(yōu)先級與響應(yīng)優(yōu)先級的概念外部中斷的使用方法使能時鐘初始化GPIO(輸入、外部中斷管腳)使能EXTI(觸發(fā)模式)使能NVIC對應(yīng)的中斷(中斷優(yōu)先級)*嵌入式系統(tǒng)原理與應(yīng)用5課程回顧:中斷和事件NVIC_PriorityGroupConfigNVIC_InitGPIO_EXTILineConfigEXTI_DeInitEXTI_InitEXTI_GetFlagStatusEXTI_ClearFlag*嵌入式系統(tǒng)原理與應(yīng)用6課程回顧:中斷和事件EXTI_GetITStatusEXTI_ClearITPendingBit第九章ADC*嵌入式系統(tǒng)原理與應(yīng)用8內(nèi)容提綱ADC概述STM32ADC設(shè)置ADC轉(zhuǎn)換模式總結(jié)*嵌入式系統(tǒng)原理與應(yīng)用9ADC概述ADC,Analog-to-DigitalConverter的縮寫,指模/數(shù)轉(zhuǎn)換器或者模擬/數(shù)字轉(zhuǎn)換器。真實世界的模擬信號,例如溫度、壓力、聲音或者圖像等,需要轉(zhuǎn)換成更容易存儲、處理或發(fā)射的數(shù)字形式,ADC可以實現(xiàn)這個功能。ADC是計算機感知世界的窗口*嵌入式系統(tǒng)原理與應(yīng)用10STM32的ADC18通道2X12位逐次比較型,最大速度1MSPS支持單次和連續(xù)轉(zhuǎn)換模式,雙重模式,自動掃描模式,規(guī)則和注入轉(zhuǎn)換模式可由外部中斷、定時器或軟件觸發(fā)轉(zhuǎn)換采樣時間可按通道分別編程轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門狗事件時會產(chǎn)生中斷*嵌入式系統(tǒng)原理與應(yīng)用11STM32ADC功能框圖*嵌入式系統(tǒng)原理與應(yīng)用12內(nèi)容提綱ADC概述STM32ADC基本設(shè)置ADC時鐘ADC開關(guān)通道選擇ADC校準數(shù)據(jù)對齊溫度傳感器和內(nèi)部參考電壓ADC轉(zhuǎn)換模式編程實例總結(jié)*嵌入式系統(tǒng)原理與應(yīng)用13ADC時鐘STM32ADC最大工作時鐘為14MHz,設(shè)置時應(yīng)使時鐘接近而不超過14MHz。ADC的時鐘由APB2時鐘經(jīng)RCC提供的ADC預(yù)分頻器后產(chǎn)生,我們的系統(tǒng)APB2頻率為72MHz,ADC預(yù)分頻值(2/4/6/8)取6時可產(chǎn)生最接近最大頻率的12MHz時鐘。ADC預(yù)分頻器由RCC_ADCCLKConfig函數(shù)設(shè)置*嵌入式系統(tǒng)原理與應(yīng)用14ADC時鐘設(shè)置函數(shù)函數(shù)原型voidRCC_ADCCLKConfig(u32RCC_ADCCLKSource)功能描述設(shè)置ADC時鐘(ADCCLK)輸入?yún)?shù)RCC_ADCCLKSource:RCC_PCLK2_Divx,x=2,4,6,8輸出參數(shù)無返回值無先決條件無應(yīng)用示例RCC_ADCCLKConfig(RCC_PCLK2_Div6);*嵌入式系統(tǒng)原理與應(yīng)用15ADC開關(guān)調(diào)用ADC_Cmd(ADCx,ENABLE)函數(shù)可給ADC上電,它將ADC從斷電狀態(tài)下喚醒。調(diào)用ADC_Cmd(ADCx,DISABLE)函數(shù)可將ADC斷電,斷電后ADC幾乎不耗電*嵌入式系統(tǒng)原理與應(yīng)用16ADC開關(guān)控制函數(shù)函數(shù)原型voidADC_Cmd(ADC_TypeDef*ADCx,FunctionStateNewState)功能描述使能或失能ADC輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2NewState:ENABLE或DISABLE輸出參數(shù)無返回值無先決條件無應(yīng)用示例ADC_Cmd(ADC1,ENABLE);*嵌入式系統(tǒng)原理與應(yīng)用17ADC通道選擇STM32的ADC有16個多路通道和額外的溫度傳感器(通道16)和參考電壓通道(通道17),額外通道只能出現(xiàn)在主ADC1中每個通道的采樣時間都可以獨立設(shè)置通道選擇由ADC_RegularChannelConfig函數(shù)和ADC_InjectedChannelConfig函數(shù)實現(xiàn)*嵌入式系統(tǒng)原理與應(yīng)用18ADC規(guī)則組通道配置函數(shù)函數(shù)原型voidADC_RegularChannelConfig(ADC_TypeDef*ADCx,u8ADC_Channel,u8Rank,u8ADC_SampleTime)功能描述設(shè)置ADC規(guī)則組通道的轉(zhuǎn)化順序和采樣時間輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2ADC_Channel:ADC_Channel_x,x=0~17Rank:規(guī)則組采樣順序,1~16ADC_SampleTime:ADC_SampleTime_xCycles5,x=1,7,13,28,41,55,71,239應(yīng)用示例ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5)*嵌入式系統(tǒng)原理與應(yīng)用19ADC校準STM32的ADC有一個內(nèi)置自校準模式,校準可大幅減小因內(nèi)部電容器組變化而造成的精度誤差,在校準期間,每個電容器上都會計算出一個誤差修正碼,這個碼用于消除在隨后的轉(zhuǎn)換中每個電容器上產(chǎn)生的誤差。建議每次上電后執(zhí)行一次校準*嵌入式系統(tǒng)原理與應(yīng)用20ADC校準:ADC_ResetCalibration函數(shù)原型voidADC_ResetCalibration(ADC_TypeDef*ADCx)功能描述重置指定的ADC校準寄存器輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2輸出參數(shù)無返回值無先決條件無應(yīng)用示例ADC_ResetCalibration(ADC1);*嵌入式系統(tǒng)原理與應(yīng)用21ADC校準:ADC_GetResetCalibrationStatus函數(shù)原型FlagStatusADC_GetResetCalibrationStatus(ADC_TypeDef*ADCx)功能描述獲取ADC重置校準寄存器的狀態(tài)輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2輸出參數(shù)無返回值A(chǔ)DC重置校準寄存器的新狀態(tài),SET(正在重置),RESET(重置完畢)先決條件無應(yīng)用示例Status=ADC_GetResetCalibrationStatus(ADC1);*嵌入式系統(tǒng)原理與應(yīng)用22ADC校準:ADC_StartCalibration函數(shù)原型voidADC_StartCalibration(ADC_TypeDef*ADCx)功能描述開始指定ADC的校準輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2輸出參數(shù)無返回值無先決條件無應(yīng)用示例ADC_StartCalibration(ADC1);*嵌入式系統(tǒng)原理與應(yīng)用23ADC校準:ADC_GetCalibrationStatus函數(shù)原型FlagStatusADC_GetCalibrationStatus(ADC_TypeDef*ADCx)功能描述獲取指定ADC的校準狀態(tài)輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2輸出參數(shù)無返回值A(chǔ)DC校準的新狀態(tài),SET(正在校準),RESET(校準完畢)先決條件無應(yīng)用示例Status=ADC_GetCalibrationStatus(ADC1);*嵌入式系統(tǒng)原理與應(yīng)用24ADC校準過程ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1));ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));*嵌入式系統(tǒng)原理與應(yīng)用25ADC數(shù)據(jù)對齊ADC的轉(zhuǎn)換結(jié)果可以選擇左對齊或右對齊,其定義如下所示,SEXT為擴展符號值,對齊模式在ADC_Init函數(shù)中指定*嵌入式系統(tǒng)原理與應(yīng)用26溫度傳感器/內(nèi)部電壓參考溫度傳感器和通道16連接,內(nèi)部電壓參考和通道17連接,在使用前需調(diào)用函數(shù)ADC_TempSensorVerfintCmd函數(shù)開啟。溫度(℃)=(1.43-Vsense)/0.0043+25內(nèi)部參考電壓固定為1.2V,可用來測供電電壓。1.2=VCC*AD/4096,VCC=1.2*4096/AD這兩通道只能被ADC1采集*嵌入式系統(tǒng)原理與應(yīng)用27溫度傳感器/內(nèi)部電壓參考使能函數(shù)函數(shù)原型voidADC_TempSensorVrefintCmd(FunctionalStateNewState)功能描述打開或關(guān)閉溫度傳感器/內(nèi)部電壓參考輸入?yún)?shù)NewState:ENABLE/DISABLE輸出參數(shù)無返回值無先決條件無應(yīng)用示例ADC_TempSensorVrefintCmd(ENABLE);*嵌入式系統(tǒng)原理與應(yīng)用28ADC復位:ADC_DeInit函數(shù)原型voidADC_DeInit(ADC_TypeDef*ADCx)功能描述將ADCx的全部寄存器重設(shè)為默認值輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2輸出參數(shù)無返回值無先決條件無應(yīng)用示例ADC_DeInit(ADC1);*嵌入式系統(tǒng)原理與應(yīng)用29ADC初始化:ADC_Init函數(shù)原型voidADC_Init(ADC_TypeDef*ADCx,ADC_InitTypeDef*ADC_InitStruct)功能描述根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2ADC_InitStruct:指向ADC_InitTypeDef的指針,包含了指定外設(shè)ADC的配置信息返回值無先決條件無應(yīng)用示例ADC_Init(ADC1,&ADC_InitStruct);*嵌入式系統(tǒng)原理與應(yīng)用30ADC_InitStruct具體可參見庫函數(shù)參考手冊*嵌入式系統(tǒng)原理與應(yīng)用31ADC配置過程設(shè)置時鐘:RCC_APB2PeriphClockCmd和RCC_ADCCLKConfig函數(shù);設(shè)置ADC工作模式:ADC_Init,ADC_RegularChannelConfig等函數(shù)打開ADC:ADC_Cmd函數(shù)校準ADC:ADC_ResetCalibration和ADC_StartCalibration函數(shù)測量ADC參考電壓*嵌入式系統(tǒng)原理與應(yīng)用32內(nèi)容提綱ADC概述STM32ADC基本設(shè)置ADC工作模式單次轉(zhuǎn)換模式連續(xù)轉(zhuǎn)換模式模擬看門狗掃描模式雙ADC模式總結(jié)*嵌入式系統(tǒng)原理與應(yīng)用33單次轉(zhuǎn)換模式單次轉(zhuǎn)換模式下,ADC只執(zhí)行一次轉(zhuǎn)換,轉(zhuǎn)換可由ADC_SoftwareStartConvCmd函數(shù)或外部觸發(fā)啟動。轉(zhuǎn)換完成,EOC標志被置位,如果設(shè)置了EOCIE,則產(chǎn)生中斷,轉(zhuǎn)換結(jié)果由ADC_GetConversionValue

函數(shù)讀取在讀取轉(zhuǎn)換結(jié)果后,EOC自動清除*嵌入式系統(tǒng)原理與應(yīng)用34ADC_SoftwareStartConvCmd函數(shù)原型voidADC_SoftwareStartConvCmd(ADC_TypeDef*ADCx,FunctionalStateNewState)功能描述啟動ADC轉(zhuǎn)換輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2NewState:ENABLE/DISABLE返回值無先決條件無應(yīng)用示例ADC_SoftwareStartConvCmd(ADC1,ENABLE)*嵌入式系統(tǒng)原理與應(yīng)用35ADC_GetFlagStatus函數(shù)原型FlagStatusADC_GetFlagStatus(ADC_TypeDef*ADCx,u8ADC_FLAG)功能描述檢查ADC標志位是否置1輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2ADC_FLAG:指點需檢查的標志位,ADC_FLAG_EOC返回值SET/RESET應(yīng)用示例While(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);*嵌入式系統(tǒng)原理與應(yīng)用36ADC_ClearFlag函數(shù)原型voidADC_ClearFlag(ADC_TypeDef*ADCx,u8ADC_FLAG)功能描述清除ADC標志位輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2ADC_FLAG:指點需清除的標志位,ADC_FLAG_EOC返回值無應(yīng)用示例ADC_ClearFlag(ADC1,ADC_FLAG_EOC);*嵌入式系統(tǒng)原理與應(yīng)用37ADC_GetITStatus函數(shù)原型FlagStatusADC_GetITStatus(ADC_TypeDef*ADCx,u8ADC_IT)功能描述檢查ADC中斷是否發(fā)生輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2ADC_IT:指點需檢查的中斷標志位,ADC_IT_EOC返回值SET/RESET應(yīng)用示例ADC_GetITStatus(ADC1,ADC_FLAG_EOC);*嵌入式系統(tǒng)原理與應(yīng)用38ADC_ClearITPendingBit函數(shù)原型voidADC_ClearITPendingBit(ADC_TypeDef*ADCx,u8ADC_IT)功能描述清除ADC標志位輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2ADC_IT:指點需清除的中斷標志位,ADC_IT_EOC返回值無應(yīng)用示例ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);*嵌入式系統(tǒng)原理與應(yīng)用39ADC_ITConfig函數(shù)原型voidADC_ITConfig(ADC_TypeDef*ADCx,u8ADC_IT,FunctionalStateNewState)功能描述使能或失能ADC中斷輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2ADC_IT:指點需清除的中斷標志位,ADC_IT_EOCNewState:ENABLE/DISABLE返回值無應(yīng)用示例ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);*嵌入式系統(tǒng)原理與應(yīng)用40ADC_GetConversionValue函數(shù)原型u16ADC_GetConversionValue(ADC_TypeDef*ADCx)功能描述讀取轉(zhuǎn)換結(jié)果輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2返回值轉(zhuǎn)換結(jié)果先決條件無應(yīng)用示例Result=ADC_GetConversionValue(ADC1);*嵌入式系統(tǒng)原理與應(yīng)用41ADC單次轉(zhuǎn)換實例讀取開發(fā)板上CPU溫度和變阻器上的電壓,變阻器連接到PC0,對應(yīng)的ADC通道為通道10,CPU溫度對應(yīng)通道16*嵌入式系統(tǒng)原理與應(yīng)用42ADC單次轉(zhuǎn)換(輪詢):基本思路初始化:設(shè)置并開啟ADC時鐘,設(shè)置輸入管腳,設(shè)置ADC工作模式為單次轉(zhuǎn)換,開啟溫度傳感器和內(nèi)部參考電壓,使能ADC,校準ADC,利用內(nèi)部參考電壓計算ADC參考電壓;轉(zhuǎn)換:設(shè)置轉(zhuǎn)換通道,啟動AD轉(zhuǎn)換,等待AD轉(zhuǎn)換完成,讀取轉(zhuǎn)換結(jié)果,清除轉(zhuǎn)換完成標志*嵌入式系統(tǒng)原理與應(yīng)用43ADC單次轉(zhuǎn)換(中斷):基本思路初始化:設(shè)置并開啟ADC時鐘,設(shè)置輸入管腳,設(shè)置ADC工作模式為單次轉(zhuǎn)換,開啟溫度傳感器和內(nèi)部參考電壓,使能ADC,校準ADC,利用內(nèi)部參考電壓計算ADC參考電壓;設(shè)置NVIC對應(yīng)的ADC中斷。開始轉(zhuǎn)換:設(shè)置轉(zhuǎn)換通道,使能ADCEOC中斷,啟動AD轉(zhuǎn)換中斷服務(wù)程序:讀取轉(zhuǎn)換結(jié)果,設(shè)置下一轉(zhuǎn)換通道,如果幾個通道轉(zhuǎn)換都已完成,關(guān)ADC中斷,否則啟動下一通道轉(zhuǎn)換*嵌入式系統(tǒng)原理與應(yīng)用44連續(xù)轉(zhuǎn)換模式連續(xù)轉(zhuǎn)換模式下,CONT位設(shè)為1,前面ADC轉(zhuǎn)換一結(jié)束馬上就啟動另一次轉(zhuǎn)換;每次轉(zhuǎn)換完成,EOC標志被置位,如果設(shè)置了EOCIE,則產(chǎn)生中斷,轉(zhuǎn)換結(jié)果由ADC_GetConversionValue

函數(shù)讀取在讀取轉(zhuǎn)換結(jié)果后,EOC自動清除*嵌入式系統(tǒng)原理與應(yīng)用45掃描模式掃描模式可用來掃描一組模擬通道,可以通過將ADC_InitTypeDef結(jié)構(gòu)體中的ADC_ScanConvMode使能實現(xiàn)。掃描的順序由ADC_RegularChannelConfig函數(shù)指定,掃描模式啟動后,ADC在每個組的每個通道上執(zhí)行單次轉(zhuǎn)換,每次轉(zhuǎn)換結(jié)束,同一組的下一個通道被自動轉(zhuǎn)換。掃描模式需與DMA協(xié)同以實現(xiàn)自動將轉(zhuǎn)換結(jié)果傳輸?shù)絊RAM中。*嵌入式系統(tǒng)原理與應(yīng)用46雙ADC模式STM32的兩個ADC可以協(xié)同工作,共有9種模式:同步規(guī)則模式同步注入模式快速交叉模式慢速交叉模式交替觸發(fā)模式獨立模式同步注入+同步規(guī)則模式同步規(guī)則+交替觸發(fā)模式同步注入+交叉模式*嵌入式系統(tǒng)原理與應(yīng)用47雙ADC模式在同步規(guī)則模式下,ADC初始化時ADC_Mode應(yīng)設(shè)為ADC_Mode_RegSimult,并使能ADC2的外部觸發(fā)轉(zhuǎn)換不能兩個ADC同時轉(zhuǎn)換一個通道轉(zhuǎn)換結(jié)束時產(chǎn)生一個32位DMA傳輸請求和EOC標志,為了讀取ADC2的結(jié)果,必須使能ADC的DMA,ADC1轉(zhuǎn)換結(jié)果保存在ADC1_DR的低16位,ADC2轉(zhuǎn)換結(jié)果保存在高16位*嵌入式系統(tǒng)原理與應(yīng)用48雙ADC的同步規(guī)則模式實例在同步規(guī)則模式下,讀取并顯示芯片溫度和變阻器電壓*嵌入式系統(tǒng)原理與應(yīng)用49ADC_ExternalTrigConvCmd函數(shù)原型voidADC_ExternalTrigConvCmd(ADC_TypeDef*ADCx,FunctionalStateNewState)功能描述使能/失能ADC外部觸發(fā)轉(zhuǎn)換輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2NewState:ENABLE/DISABLE返回值無先決條件無應(yīng)用示例ADC_ExternalTrigConvCmd(ADC2,ENABLE);*嵌入式系統(tǒng)原理與應(yīng)用50ADC_DMACmd函數(shù)原型voidADC_DMACmd(ADC_TypeDef*ADCx,FunctionalStateNewState)功能描述使能ADC的DMA傳輸輸入?yún)?shù)ADCx:x=1,2,用于選擇ADC1或ADC2NewState:ENABLE/DISABLE返回值無先決條件無應(yīng)用示例ADC_DMACmd(ADC1,ENABLE);*嵌入式系統(tǒng)原理與應(yīng)用51ADC_GetDualModeConversionValue函數(shù)原型u32ADC_GetDualModeConversionValue(void)功能描述讀取雙ADC模式轉(zhuǎn)換結(jié)果輸入?yún)?shù)無返回值32位無符號數(shù),高16位為ADC2轉(zhuǎn)換結(jié)果,低16位為ADC1轉(zhuǎn)換結(jié)果先決條件無應(yīng)用示例result=ADC_GetDualModeConversionValue();*嵌入式系統(tǒng)原理與應(yīng)用52作業(yè)根據(jù)應(yīng)用需求,需要對ADC通道0

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論