版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章系統(tǒng)測(cè)試在這一部分調(diào)試中,因?yàn)闀r(shí)間比較有限,我們無(wú)法制做出真實(shí)的PCB來(lái)調(diào)試系統(tǒng)軟件,因此只有應(yīng)用Proteus模擬仿真軟件來(lái)系統(tǒng)模擬的一部分作用。5.1系統(tǒng)實(shí)物圖系統(tǒng)實(shí)物圖如圖5-1所示。圖5-1系統(tǒng)完整實(shí)物圖5.2測(cè)試目的軟件測(cè)試的目的,就是要找出系統(tǒng)中可能出現(xiàn)的問(wèn)題,有些人認(rèn)為,在測(cè)試的過(guò)程中,找到的問(wèn)題越多,就越好,但事實(shí)并非如此,只有在測(cè)試的時(shí)候,找到更多的問(wèn)題,才能讓軟件的完整性得到?高。對(duì)軟件進(jìn)行測(cè)試,是破壞性的,它的目的是盡可能多地找出軟件中的缺陷,而不是用來(lái)演?示出軟件的真正功能。5.3測(cè)試原則軟件測(cè)試應(yīng)該遵循四個(gè)原則即:測(cè)試應(yīng)該以系統(tǒng)的要求為基礎(chǔ)。盡可能早地進(jìn)行試驗(yàn)。當(dāng)測(cè)試寫(xiě)時(shí),需要考慮一些極端的情況,比如特殊值,邊界值的輸入。用于測(cè)試的例子,應(yīng)該包括“合理的”和“不合理的”輸入條件。對(duì)聚類(lèi)現(xiàn)象進(jìn)行充分的說(shuō)明。5.4功能測(cè)試重力傳感器模塊測(cè)試:圖5-2重力傳感器實(shí)物圖重力傳感器需要在檢測(cè)到當(dāng)前重量高于設(shè)定配重重量時(shí),觸發(fā)自動(dòng)控制程序,開(kāi)啟?減少配重繼電器,開(kāi)啟活塞吸合設(shè)備吸合配?重片,移走配重后,?減少配重繼電器復(fù)位;否則反之,觸發(fā)相反的自動(dòng)控制程序。圖5-3重力傳感器側(cè)視圖重力傳感器的數(shù)值能夠在顯示屏上顯示,如圖5-4所示。圖5-4重力傳感器測(cè)試圖重力感應(yīng)器中的模數(shù)轉(zhuǎn)換器基本代碼:u16Get_adc(u8ch){{//為特定模數(shù)轉(zhuǎn)換器設(shè)定一組信道、一序列、取樣時(shí)間ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239周期5)。具有239.5個(gè)循環(huán)的ADC1,ADC通道ADC軟件開(kāi)始連接(ADC1,安全)。為特定ADC1啟用軟件轉(zhuǎn)換開(kāi)始功能這是怎么回事?/ADC_FLAG_EOC)。等待過(guò)渡完成溫度傳感器模塊測(cè)試:圖5-5溫度傳感器實(shí)物圖溫度傳感器需要在檢測(cè)到當(dāng)前溫度高于或低于設(shè)定溫度范圍時(shí),觸發(fā)自動(dòng)控制程序,開(kāi)啟或關(guān)閉相應(yīng)的降溫設(shè)備,以調(diào)節(jié)環(huán)境溫度。圖5-6重力傳感器實(shí)物圖溫度傳感器主要測(cè)量環(huán)境中的溫度,并且在顯示屏上顯示,如圖5-7所示。圖5-7溫度測(cè)試圖溫度傳感器采集溫度主要代碼:shortDS18B20_Get_Temp(void){u8temp;u8TL,TH; shorttem;DS18B20_Start();//ds1820startconvertDS18B20_Rst();DS18B20_Check(); DS18B20_Write_Byte(0xcc);//skipromDS18B20_Write_Byte(0xbe);//convert TL=DS18B20_Read_Byte();//LSBTH=DS18B20_Read_Byte();//MSBif(TH>7){TH=~TH;TL=~TL;temp=0;//溫度為負(fù)}elsetemp=1;//溫度為正 tem=TH;//獲得高八位tem<<=8;tem+=TL;//獲得底八位 tem=(float)tem0.625;//轉(zhuǎn)換 if(temp)returntem;//返回溫度值 elsereturn-tem;}顯示屏模塊測(cè)試:顯示屏用來(lái)顯示采集到的溫度和重量,如圖5-8所示。圖5-8顯示屏測(cè)試圖顯示屏主要代碼:voidOLED_ShowString(u8x,u8y,u8chr,u8size1){ while((chr>='')&&(chr<='~'))//判斷是不是非法字符! { OLED_ShowChar(x,y,chr,size1); x+=size1/2; if(x>128-size1)//換行 { x=0; y+=2;} chr++;}}}設(shè)計(jì)通過(guò)藍(lán)牙模塊連接上位機(jī)來(lái)實(shí)行相應(yīng)的數(shù)據(jù)輸入。圖5-9Hc05藍(lán)牙實(shí)物圖上位機(jī)可以設(shè)置預(yù)定時(shí)間當(dāng)?shù)竭_(dá)時(shí)間后蜂鳴器報(bào)警。圖5-10上位機(jī)定時(shí)功能測(cè)試圖上位機(jī)可以顯示當(dāng)前的溫度和重量,并且可以自由設(shè)定溫度和重量的閾值,并且顯示出來(lái),如圖5-11所示。圖5-11上位機(jī)溫度重量功能測(cè)試圖當(dāng)貓咪供血站的配重超出設(shè)定值時(shí),繼電器可以自動(dòng)調(diào)節(jié)配重,使貓咪供血站的重心恢復(fù)到平衡狀態(tài)系統(tǒng)監(jiān)測(cè)到當(dāng)前溫度高于設(shè)定溫度閾值,制冷劑電器工作;系統(tǒng)監(jiān)測(cè)到當(dāng)前重量高于設(shè)定配重重量,開(kāi)啟減少配重繼電器,開(kāi)啟活塞吸合設(shè)備(繼電器)吸合配重片,移走配重后,減少配重繼電器復(fù)位;系統(tǒng)監(jiān)測(cè)到當(dāng)前重量低于設(shè)定配重重量,開(kāi)啟增加配重繼電器,開(kāi)啟活塞吸合設(shè)備(繼電器)吸合配重片,增加配重后,增加配重繼電器復(fù)位。圖5-12繼電器實(shí)物圖圖5-13蜂鳴器實(shí)物圖此系統(tǒng)不僅能夠設(shè)置時(shí)間預(yù)警還能采集溫度信息,采集重量信息,當(dāng)溫度超過(guò)設(shè)定的閾值,會(huì)開(kāi)啟制冷繼電器,當(dāng)重量超過(guò)閾值時(shí),會(huì)開(kāi)啟減重繼電器;重量低于閾值時(shí),開(kāi)啟增重繼電器。設(shè)定閾值時(shí)間當(dāng)時(shí)間,顯示屏顯示當(dāng)前采集到的數(shù)值和閾值,蜂鳴器會(huì)進(jìn)行報(bào)警。如圖5-14所示。圖5-14整體功能測(cè)試圖5.5測(cè)試結(jié)果在該章中,對(duì)系統(tǒng)的功能模塊進(jìn)行測(cè)試,對(duì)其獲得的測(cè)試進(jìn)行詳細(xì)的記錄,并且進(jìn)行分析,可以使得系統(tǒng)具有正常運(yùn)行的特性可以監(jiān)測(cè)當(dāng)前的溫度和重量,并且可以自由設(shè)定溫度和重量的閾值,在模塊控制中,通過(guò)正常的使用,可以符合要求,使得該系統(tǒng)通過(guò)測(cè)試。第6章總結(jié)與展望6.1總結(jié)貓咪供血站配重環(huán)境自控調(diào)節(jié)系統(tǒng)設(shè)計(jì)是一項(xiàng)綜合性工程,需要設(shè)計(jì)硬件和軟件兩個(gè)方面。該系統(tǒng)通過(guò)重力傳感器和溫度傳感器采集環(huán)境數(shù)據(jù),并通過(guò)繼電器、繼電器和蜂鳴器等控制設(shè)備來(lái)實(shí)現(xiàn)環(huán)境自控調(diào)節(jié)的功能,同時(shí)通過(guò)顯示屏進(jìn)行數(shù)據(jù)的展示和交互。該系統(tǒng)設(shè)計(jì)的目的在于提高貓咪供血站的自動(dòng)化程度和準(zhǔn)確性,為貓咪提供更好的血液采集環(huán)境。系統(tǒng)設(shè)計(jì)的優(yōu)點(diǎn)包括節(jié)省人力資源、提高工作效率、減少人為操作誤差、增強(qiáng)數(shù)據(jù)可視化等。但同時(shí)也需要充分考慮硬件和軟件的穩(wěn)定性、安全性和可靠性等方面,確保系統(tǒng)的穩(wěn)定性和可持續(xù)性。6.2展望隨著科技的不斷發(fā)展和人們對(duì)寵物健康的日益重視,貓咪供血站配重環(huán)境自控調(diào)節(jié)系統(tǒng)的設(shè)計(jì)也將不斷完善和發(fā)展。未來(lái)的展望包括以下幾個(gè)方面:智能化:隨著人工智能技術(shù)的不斷發(fā)展,未來(lái)的貓咪供血站配重環(huán)境自控調(diào)節(jié)系統(tǒng)將更加智能化,能夠根據(jù)貓咪的生理特征和血液采集需要進(jìn)行自動(dòng)化調(diào)節(jié)和優(yōu)化。數(shù)據(jù)化:未來(lái)的系統(tǒng)將更加注重?cái)?shù)據(jù)化,可以實(shí)時(shí)監(jiān)測(cè)貓咪的生理數(shù)據(jù)、血液采集數(shù)據(jù)等,通過(guò)數(shù)據(jù)分析來(lái)優(yōu)化系統(tǒng)的設(shè)計(jì)和操作流程。便攜化:未來(lái)的系統(tǒng)將更加便攜化,可以方便攜帶和移動(dòng),適用于多種環(huán)境下的貓咪供血。安全化:未來(lái)的系統(tǒng)將更加注重安全性,包括硬件和軟件層面的安全性設(shè)計(jì),以確保貓咪供血過(guò)程的安全和可靠性。總之,未來(lái)的貓咪供血站配重環(huán)境自控調(diào)節(jié)系統(tǒng)將更加智能化、數(shù)據(jù)化、便攜化和安全化,為貓咪的健康和生命提供更加優(yōu)質(zhì)和可靠的保障。
參考文獻(xiàn)[1]王韻,汪峰,費(fèi)靜嫻,孫泉,陳義柱.采供血機(jī)構(gòu)ALT初篩檢測(cè)質(zhì)量保證的探討[J].臨床血液學(xué)雜志,2022,35(12):884-887.[2]劉鵬娟,楊斌.基于單片機(jī)的多路溫度測(cè)量系統(tǒng)的設(shè)計(jì)[J].電子制作,2022,30(20):39-41+82.[3]黃操,張偉,李云虹,樊嘉坤.濕式雙離合變速器滑摩過(guò)程溫度的測(cè)量與分析[J].汽車(chē)零部件,2022(08):60-64.[4]陳林,竇萌萌,劉文敏,張芳.多路PT100溫度測(cè)量系統(tǒng)的硬件開(kāi)發(fā)[J].計(jì)量與測(cè)試技術(shù),2022,49(07):23-27..[5]李曄,章宇寧,邢麗楠,李棟,趙小曼,劉青山,閆磊.一種血液游離核酸穩(wěn)定劑的保存效果驗(yàn)證[J].中國(guó)釀造,2022,41(05):164-168.[6]馬欣欣,龔立嬌,李伊博.一種基于壓電俘能器供電的溫度測(cè)量系統(tǒng)設(shè)計(jì)[J].自動(dòng)化與儀表,2022,37(01):85-89+99.[7]陳玉燕,連曉征,陳惠民.血站采血過(guò)程中關(guān)鍵控制點(diǎn)對(duì)血液質(zhì)量安全的重要性[J].中國(guó)衛(wèi)生標(biāo)準(zhǔn)管理,2020,11(15):131-134.[8]李興華.血液的冷凍保存[J].保健文匯,2020(07):127.[9]陳靜,段小勇,劉漢濤,金心.批量幼兒體檢血液分析樣本保存方法的探討[J].人人健康,2019(22):57.[10]劉艷晶.血站血液安全的質(zhì)量控制分析[J].世界最新醫(yī)學(xué)信息文摘,2018,18(70):194.[11]王麗東,那向杰,單鐵梅,李業(yè)明,付麗麗,段瀟瀟.血液標(biāo)本的保存對(duì)常規(guī)生化檢測(cè)的影響分析[J].中國(guó)醫(yī)療器械信息,2018,24(01):23-24..[12]鄒俊.比格犬去白細(xì)胞血液的體外保存及輸血效果研究[D].華南農(nóng)業(yè)大學(xué),2017.[13]陳靜,陳德明,徐玉玲.動(dòng)物血液樣品采集制備與保存的方法[J].獸醫(yī)導(dǎo)刊,2015(15):72-73.[14]楊成財(cái).畜禽血液樣品采集與保存方法[J].中獸醫(yī)學(xué)雜志,2015(08):39.[15]陳正林.畜禽血液采集、血清分離及保存技術(shù)[J].中國(guó)畜牧獸醫(yī)文摘,2015,31(03):37-38.[16]劉策,劉偉,林陽(yáng),陳雪梅,孫海濤,林振國(guó).臨清獅貓血液生化指標(biāo)及血常規(guī)的測(cè)定[J].山東畜牧獸醫(yī),2020,41(05):4-5.[17]蔣達(dá)樹(shù),劉金蘭,謝瑤芳,趙吉會(huì),劉家瑛,隗功芬,張立新.針刺對(duì)實(shí)驗(yàn)性腦缺血貓血液動(dòng)力學(xué)的影響[J].針刺研究,1988(03):194-198.[18]劉繼鋒,齊飛虎,任俊平,梁彥杰,孫秋燕,唐珊波,張麗蓉.虎皮貓血液學(xué)和生化參數(shù)的測(cè)定[J].醫(yī)學(xué)動(dòng)物防制,2013,29(11):1184-1186.[19]PengAnhua,LiuChengwen,YangLe.RetractionNote:IntelligentelectricalequipmentfiberBragggratingtemperaturemeasurementsystem[J].EURASIPJournalonAdvancesinSignalProcessing,2022,2022(1).[20]LiuZichen,LiRuowei,LeHangyu,ZhuZifu,YeJilun,ZhangXu.[DevelopmentofaWirelessWearableBodyTemperatureMeasurementSystemBasedonNTC].[J].Zhongguoyiliaoqixiezazhi=Chinesejournalofmedicalinstrumentation,2022,46(4).[21]LiangXiyin,CaiMiao,MaMuqi,LuXiao,FuPeng,LiKe.FPGA-basedmulti-channelthermocoupletemperaturemeasurementsystem[J].JournalofPhysics:ConferenceSeries,2022,2290(1).[22]QinHL,ZhouG,LiQ.SimulationandexperimentalresearchonthethermalresistanceofCernoxsensorsindifferentbondingwaysbasedonahigh-precisioncryogenictemperaturemeasuringsystem[J].IOPConferenceSeries:MaterialsScienceandEngineering,2022,1240(1).[23]GrechJosef,MizziStephen,FalzonOwen.ATechnicalReviewofFootTemperatureMeasurementSystems.[J].JournaloftheAmericanPodiatricMedicalAssociation,2022.
附錄原理圖圖A原理圖程序#include"delay.h"#include"sys.h"#include"oled.h"#include"bmp.h"#include"key.h"#include"usart.h"#include"usart2.h"#include"usart3.h"#include"led.h"#include"adc.h"#include"ds18b20.h"#include"timer.h"unsignedcharduoji_count=0;unsignedcharzhuanjiao=11;shorttemperature; u8tem[15];u8temperaturedyu=28; u8temperaturehyu=32; u8temgyu[15];u8temdyu[15];unsignedintyayu=72;u16ya;u8yas[15];u8yayus[15];intfragment=0;u8send[30];intbeepnum=0;intbiaozhi=0;intbiaozhi1=0;intbiaozhi2=0;intbiaozhi3=0;intbiaozhi4=0;intbiaozhi5=0;voidUSART1_Puts(charstr){while(str){USART1->DR=str++;while((USART1->SR&0X40)==0);}}voidUSART3_Puts(charstr){while(str){USART3->DR=str++;while((USART3->SR&0X40)==0);}}voidDuojiMid(){ zhuanjiao=15; delay_ms(500);}voidDuojiRight(){ zhuanjiao=25; delay_ms(500);}voidDuojiLeft(){ zhuanjiao=6; delay_ms(500);}voidServoInit(void){GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=Servo_PIN; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;// GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置GPIO端口速度 GPIO_Init(Servo_GPIO,&GPIO_InitStructure); Servo_SET;//默認(rèn)給高電位modfiedbyLC2015.09.2012:00}u8times[30];intmain(void){ inti,j; delay_init(); NVIC_Configuration(); OLED_Init(); OLED_ColorTurn(0);//0正常顯示,1反色顯示OLED_DisplayTurn(0);//0正常顯示1屏幕翻轉(zhuǎn)顯示 OLED_Refresh(); OLED_Clear(); KEY_Init(); LED_Init(); beep_Init(); beep=0; Adc_Init(); //ADC初始化 usart2_init(9600);usart3_init(9600); JDQ1=1; JDQ2=1;JDQ3=1; OLED_ShowChinese(0,20,0,16);//系 OLED_ShowChinese(18,20,1,16);//統(tǒng) OLED_ShowString(36,20,":",16); OLED_ShowChinese(0,40,2,16);//系 OLED_ShowChinese(18,40,3,16);//統(tǒng) OLED_ShowString(36,40,":",16); TIM2_Init(); ServoInit(); OLED_Refresh();LED1=0;LED2=0;LED3=0; while(DS18B20_Init()) //DHT11初始化 { delay_ms(200);} KEY_Init(); temdyu[0]=temperaturedyu/10+'0'; temdyu[1]=temperaturedyu%10+'0'; OLED_ShowString(95,20,temdyu,16); yayus[0]=yayu/100+'0'; yayus[1]=yayu%100/10+'0'; yayus[2]=yayu%10+'0'; yayus[3]=0; OLED_ShowString(95,40,yayus,16); OLED_Refresh(); DuojiRight(); delay_ms(1000);DuojiMid(); while(1) { if(USART3_RX_STA==1){ USART3_RX_STA=0; if(USART3_TX_BUF[0]=='w'){ if(USART3_TX_BUF[1]=='1'){ temperaturedyu=(USART3_TX_BUF[2]-'0')10+USART3_TX_BUF[3]-'0'; yayu=(USART3_TX_BUF[4]-'0')100+(USART3_TX_BUF[5]-'0')10+USART3_TX_BUF[6]-'0'; temdyu[0]=temperaturedyu/10+'0'; temdyu[1]=temperaturedyu%10+'0'; OLED_ShowString(95,20,temdyu,16); yayus[0]=yayu/100+'0'; yayus[1]=yayu%100/10+'0'; yayus[2]=yayu%10+'0'; yayus[3]=0; OLED_ShowString(95,40,yayus,16); OLED_Refresh(); }elseif(USART3_TX_BUF[1]=='2'){ times[0]=USART3_TX_BUF[2]; times[1]=USART3_TX_BUF[3]; times[2]=USART3_TX_BUF[4]; times[3]=USART3_TX_BUF[5]; times[4]=USART3_TX_BUF[6]; times[5]=USART3_TX_BUF[7]; times[6]=USART3_TX_BUF[8]; times[7]=USART3_TX_BUF[9]; times[8]=USART3_TX_BUF[10]; times[9]=USART3_TX_BUF[11]; times[10]=USART3_TX_BUF[12]; times[11]=USART3_TX_BUF[13]; times[12]=USART3_TX_BUF[14]; times[13]=USART3_TX_BUF[15]; times[14]=0; OLED_ShowString(0,0,times,16); }elseif(USART3_TX_BUF[1]=='3'){ beep=1;delay_ms(600); beep=0;delay_ms(600); beep=1;delay_ms(600); beep=0;delay_ms(600); } } } ya=Get_Adc_Average(ADC_Channel_0,10)/10+60; temperature=DS18B20_Get_Temp(); tem[0]=temperature/100+'0'; tem[1]=temperature%100/10+'0'; tem[2]='.'; tem[3]=temperature%10+'0'; tem[4]=0; OLED_ShowString(54,20,tem,16); yas[0]=ya/1000+'0'; yas[1]=ya%1000/100+'0'; yas[2]=ya%100/10+'0'; yas[3]=ya%10+'0'; OLED_ShowString(54,40,yas,16); OLED_Refresh(); if(temperature>temperaturedyu10){ JDQ1=0; }else{ JDQ1=1; } if(ya>yayu+10){ DuojiRight(); JDQ2=0; delay_ms(1000);delay_ms(1000); delay_ms(1000);delay_ms(1000); JDQ2=1; DuojiMid(); } if(ya<yayu-10){ DuojiLeft(); JDQ3=0; delay_ms(1000);delay_ms(1000); delay_ms(1000);delay_ms(1000); JDQ3=1; DuojiMid(); } send[0]='w';send[1]='2'; send[2]=temperature/100+'0'; send[3]=temperature%100/10+'0'; send[4]='.'; send[5]=temperature%10+'0'; send[6]=ya/1000+'0'; send[7]=ya%1000/100+'0'; send[8]=ya%100/10+'0'; send[9]=ya%10+'0'; send[10]='z'; send[11]=0; USART3_Puts(send); if(KEY2==1){ } }}#include"stm32f10x_it.h"voidNMI_Handler(void){}voidHardFault_Handler(void){/GotoinfiniteloopwhenHardFaultexceptionoccurs/while(1){}}voidMemManage_Handler(void){/GotoinfiniteloopwhenMemoryManageexceptionoccurs/while(1){}}voidBusFault_Handler(void){/GotoinfiniteloopwhenBusFaultexceptionoccurs/while(1){}}voidUsageFault_Handler(void){/GotoinfiniteloopwhenUsageFaultexceptionoccurs/while(1){}}voidSVC_Handler(void){}voidDebugMon_Handler(void){}voidPendSV_Handler(void){}voidSysTick_Handler(void){}system_stm32f10x.cvoidSystemCoreClockUpdate(void){uint32_ttmp=0,pllmull=0,pllsource=0;#ifdefSTM32F10X_CLuint32_tprediv1source=0,prediv1factor=0,prediv2factor=0,pll2mull=0;#endif/STM32F10X_CL/#ifdefined(STM32F10X_LD_VL)||defined(STM32F10X_MD_VL)||(definedSTM32F10X_HD_VL)uint32_tprediv1factor=0;#endif/STM32F10X_LD_VLorSTM32F10X_MD_VLorSTM32F10X_HD_VL//GetSYSCLKsource/tmp=RCC->CFGR&RCC_CFGR_SWS;switch(tmp){case0x00:/HSIusedassystemclock/SystemCoreClock=HSI_VALUE;break;case0x04:/HSEusedassystemclock/SystemCoreClock=HSE_VALUE;break;case0x08:/PLLusedassystemclock//GetPLLclocksourceandmultiplicationfactor/pllmull=RCC->CFGR&RCC_CFGR_PLLMULL;pllsource=RCC->CFGR&RCC_CFGR_PLLSRC;#ifndefSTM32F10X_CLpllmull=(pllmull>>18)+2;if(pllsource==0x00){/HSIoscillatorclockdividedby2selectedasPLLclockentry/SystemCoreClock=(HSI_VALUE>>1)pllmull;}else{#ifdefined(STM32F10X_LD_VL)||defined(STM32F10X_MD_VL)||(definedSTM32F10X_HD_VL)prediv1factor=(RCC->CFGR2&RCC_CFGR2_PREDIV1)+1;/HSEoscillatorclockselectedasPREDIV1clockentry/SystemCoreClock=(HSE_VALUE/prediv1factor)pllmull;#else/HSEselectedasPLLclockentry/if((RCC->CFGR&RCC_CFGR_PLLXTPRE)!=(uint32_t)RESET){/HSEoscillatorclockdividedby2/SystemCoreClock=(HSE_VALUE>>1)pllmull;}else{SystemCoreClock=HSE_VALUEpllmull;}#endif}#elsepllmull=pllmull>>18;if(pllmull!=0x0D){pllmull+=2;}else{/PLLmultiplicationfactor=PLLinputclock6.5/pllmull=13/2;}if(pllsource==0x00){/HSIoscillatorclockdividedby2selectedasPLLclockentry/SystemCoreClock=(HSI_VALUE>>1)pllmull;}else{/PREDIV1selectedasPLLclockentry//GetPREDIV1clocksourceanddivisionfactor/prediv1source=RCC->CFGR2&RCC_CFGR2_PREDIV1SRC;prediv1factor=(RCC->CFGR2&RCC_CFGR2_PREDIV1)+1;if(prediv1source==0){/HSEoscillatorclockselectedasPREDIV1clockentry/SystemCoreClock=(HSE_VALUE/prediv1factor)pllmull;}else{/PLL2clockselectedasPREDIV1clockentry//GetPREDIV2divisionfactorandPLL2multiplicationfactor/prediv2factor=((RCC->CFGR2&RCC_CFGR2_PREDIV2)>>4)+1;pll2mull=((RCC->CFGR2&RCC_CFGR2_PLL2MUL)>>8)+2;SystemCoreClock=(((HSE_VALUE/prediv2factor)pll2mull)/prediv1factor)pllmull;}}#endif/STM32F10X_CL/break;default:SystemCoreClock=HSI_VALUE;break;}/ComputeHCLKclockfrequency//GetHCLKprescaler/tmp=AHBPrescTable[((RCC->CFGR&RCC_CFGR_HPRE)>>4)];/HCLKclockfrequency/SystemCoreClock>>=tmp;}/@briefConfigurestheSystemclockfrequency,HCLK,PCLK2andPCLK1prescalers.@paramNone@retvalNone/staticvoidSetSysClock(void){#ifdefSYSCLK_FREQ_HSESetSysClockToHSE();#elifdefinedSYSCLK_FREQ_24MHzSetSysClockTo24();#elifdefinedSYSCLK_FREQ_36MHzSetSysClockTo36();#elifdefinedSYSCLK_FREQ_48MHzSetSysClockTo48();#elifdefinedSYSCLK_FREQ_56MHzSetSysClockTo56();#elifdefinedSYSCLK_FREQ_72MHzSetSysClockTo72();#endif/Ifnoneofthedefineaboveisenabled,theHSIisusedasSystemclocksource(defaultafterreset)/}#ifdefDATA_IN_ExtSRAMGPIOD->CRL=0x44BB44BB;GPIOD->CRH=0xBBBBBBBB;GPIOE->CRL=0xB44444BB;GPIOE->CRH=0xBBBBBBBB;GPIOF->CRL=0x44BBBBBB;GPIOF->CRH=0xBBBB4444;GPIOG->CRL=0x44BBBBBB;GPIOG->CRH=0x44444B44;FSMC_Bank1->BTCR[4]=0x00001011;FSMC_Bank1->BTCR[5]=0x00000200;}#endif/DATA_IN_ExtSRAM/#ifdefSYSCLK_FREQ_HSEstaticvoidSetSysClockToHSE(void){__IOuint32_tStartUpCounter=0,HSEStatus=0;/SYSCLK,HCLK,PCLK2andPCLK1configuration//EnableHSE/RCC->CR|=((uint32_t)RCC_CR_HSEON);/WaittillHSEisreadyandifTimeoutisreachedexit/do{HSEStatus=RCC->CR&RCC_CR_HSERDY;StartUpCounter++;}while((HSEStatus==0)&&(StartUpCounter!=HSE_STARTUP_TIMEOUT));if((RCC->CR&RCC_CR_HSERDY)!=RESET){HSEStatus=(uint32_t)0x01;}else{HSEStatus=(uint32_t)0x00;}if(HSEStatus==(uint32_t)0x01){#if!definedSTM32F10X_LD_VL&&!definedSTM32F10X_MD_VL&&!definedSTM32F10X_HD_VL/EnablePrefetchBuffer/FLASH->ACR|=FLASH_ACR_PRFTBE;/Flash0waitstate/FLASH->ACR&=(uint32_t)((uint32_t)~FLASH_ACR_LATENCY);#ifndefSTM32F10X_CLFLASH->ACR|=(uint32_t)FLASH_ACR_LATENCY_0;#elseif(HSE_VALUE<=24000000) {FLASH->ACR|=(uint32_t)FLASH_ACR_LATENCY_0; } else {FLASH->ACR|=(uint32_t)FLASH_ACR_LATENCY_1; }#endif/STM32F10X_CL/#endif/HCLK=SYSCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_HPRE_DIV1;/PCLK2=HCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE2_DIV1;/PCLK1=HCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE1_DIV1;/SelectHSEassystemclocksource/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC->CFGR|=(uint32_t)RCC_CFGR_SW_HSE;/WaittillHSEisusedassystemclocksource/while((RCC->CFGR&(uint32_t)RCC_CFGR_SWS)!=(uint32_t)0x04){}}else{/IfHSEfailstostart-up,theapplicationwillhavewrongclockconfiguration.Usercanaddheresomecodetodealwiththiserror/}}#elifdefinedSYSCLK_FREQ_24MHzstaticvoidSetSysClockTo24(void){__IOuint32_tStartUpCounter=0,HSEStatus=0;RCC->CR|=((uint32_t)RCC_CR_HSEON);/WaittillHSEisreadyandifTimeoutisreachedexit/do{HSEStatus=RCC->CR&RCC_CR_HSERDY;StartUpCounter++;}while((HSEStatus==0)&&(StartUpCounter!=HSE_STARTUP_TIMEOUT));if((RCC->CR&RCC_CR_HSERDY)!=RESET){HSEStatus=(uint32_t)0x01;}else{HSEStatus=(uint32_t)0x00;}if(HSEStatus==(uint32_t)0x01){#if!definedSTM32F10X_LD_VL&&!definedSTM32F10X_MD_VL&&!definedSTM32F10X_HD_VL/EnablePrefetchBuffer/FLASH->ACR|=FLASH_ACR_PRFTBE;/Flash0waitstate/FLASH->ACR&=(uint32_t)((uint32_t)~FLASH_ACR_LATENCY);FLASH->ACR|=(uint32_t)FLASH_ACR_LATENCY_0;#endif/HCLK=SYSCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_HPRE_DIV1;/PCLK2=HCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE2_DIV1;/PCLK1=HCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE1_DIV1;#ifdefSTM32F10X_CL/ConfigurePLLs//PLLconfiguration:PLLCLK=PREDIV16=24MHz/RCC->CFGR&=(uint32_t)~(RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLSRC|RCC_CFGR_PLLMULL);RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1|RCC_CFGR_PLLSRC_PREDIV1|RCC_CFGR_PLLMULL6);/PLL2configuration:PLL2CLK=(HSE/5)8=40MHz//PREDIV1configuration:PREDIV1CLK=PLL2/10=4MHz/RCC->CFGR2&=(uint32_t)~(RCC_CFGR2_PREDIV2|RCC_CFGR2_PLL2MUL|RCC_CFGR2_PREDIV1|RCC_CFGR2_PREDIV1SRC);RCC->CFGR2|=(uint32_t)(RCC_CFGR2_PREDIV2_DIV5|RCC_CFGR2_PLL2MUL8|RCC_CFGR2_PREDIV1SRC_PLL2|RCC_CFGR2_PREDIV1_DIV10);/EnablePLL2/RCC->CR|=RCC_CR_PLL2ON;/WaittillPLL2isready/while((RCC->CR&RCC_CR_PLL2RDY)==0){}#elifdefined(STM32F10X_LD_VL)||defined(STM32F10X_MD_VL)||defined(STM32F10X_HD_VL)/PLLconfiguration:=(HSE/2)6=24MHz/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC|RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLMULL));RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLSRC_PREDIV1|RCC_CFGR_PLLXTPRE_PREDIV1_Div2|RCC_CFGR_PLLMULL6);#else/PLLconfiguration:=(HSE/2)6=24MHz/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC|RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLMULL));RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLSRC_HSE|RCC_CFGR_PLLXTPRE_HSE_Div2|RCC_CFGR_PLLMULL6);#endif/STM32F10X_CL//EnablePLL/RCC->CR|=RCC_CR_PLLON;/WaittillPLLisready/while((RCC->CR&RCC_CR_PLLRDY)==0){}/SelectPLLassystemclocksource/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC->CFGR|=(uint32_t)RCC_CFGR_SW_PLL;/WaittillPLLisusedassystemclocksource/while((RCC->CFGR&(uint32_t)RCC_CFGR_SWS)!=(uint32_t)0x08){}}else{/IfHSEfailstostart-up,theapplicationwillhavewrongclockconfiguration.Usercanaddheresomecodetodealwiththiserror/}}#elifdefinedSYSCLK_FREQ_36MHzstaticvoidSetSysClockTo36(void){__IOuint32_tStartUpCounter=0,HSEStatus=0;/SYSCLK,HCLK,PCLK2andPCLK1configuration//EnableHSE/RCC->CR|=((uint32_t)RCC_CR_HSEON);/WaittillHSEisreadyandifTimeoutisreachedexit/do{HSEStatus=RCC->CR&RCC_CR_HSERDY;StartUpCounter++;}while((HSEStatus==0)&&(StartUpCounter!=HSE_STARTUP_TIMEOUT));if((RCC->CR&RCC_CR_HSERDY)!=RESET){HSEStatus=(uint32_t)0x01;}else{HSEStatus=(uint32_t)0x00;}if(HSEStatus==(uint32_t)0x01){/EnablePrefetchBuffer/FLASH->ACR|=FLASH_ACR_PRFTBE;FLASH->ACR&=(uint32_t)((uint32_t)~FLASH_ACR_LATENCY);FLASH->ACR|=(uint32_t)FLASH_ACR_LATENCY_1;/HCLK=SYSCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_HPRE_DIV1;/PCLK2=HCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE2_DIV1;/PCLK1=HCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE1_DIV1;#ifdefSTM32F10X_CL/ConfigurePLLs//PLLconfiguration:PLLCLK=PREDIV19=36MHz/RCC->CFGR&=(uint32_t)~(RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLSRC|RCC_CFGR_PLLMULL);RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1|RCC_CFGR_PLLSRC_PREDIV1|RCC_CFGR_PLLMULL9); /!<PLL2configuration:PLL2CLK=(HSE/5)8=40MHz//PREDIV1configuration:PREDIV1CLK=PLL2/10=4MHz/RCC->CFGR2&=(uint32_t)~(RCC_CFGR2_PREDIV2|RCC_CFGR2_PLL2MUL|RCC_CFGR2_PREDIV1|RCC_CFGR2_PREDIV1SRC);RCC->CFGR2|=(uint32_t)(RCC_CFGR2_PREDIV2_DIV5|RCC_CFGR2_PLL2MUL8|RCC_CFGR2_PREDIV1SRC_PLL2|RCC_CFGR2_PREDIV1_DIV10);/EnablePLL2/RCC->CR|=RCC_CR_PLL2ON;/WaittillPLL2isready/while((RCC->CR&RCC_CR_PLL2RDY)==0){}#else/PLLconfiguration:PLLCLK=(HSE/2)9=36MHz/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC|RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLMULL));RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLSRC_HSE|RCC_CFGR_PLLXTPRE_HSE_Div2|RCC_CFGR_PLLMULL9);#endif/STM32F10X_CL//EnablePLL/RCC->CR|=RCC_CR_PLLON;/WaittillPLLisready/while((RCC->CR&RCC_CR_PLLRDY)==0){}/SelectPLLassystemclocksource/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC->CFGR|=(uint32_t)RCC_CFGR_SW_PLL;/WaittillPLLisusedassystemclocksource/while((RCC->CFGR&(uint32_t)RCC_CFGR_SWS)!=(uint32_t)0x08){}}else{/IfHSEfailstostart-up,theapplicationwillhavewrongclockconfiguration.Usercanaddheresomecodetodealwiththiserror/}}#elifdefinedSYSCLK_FREQ_48MHzstaticvoidSetSysClockTo48(void){__IOuint32_tStartUpCounter=0,HSEStatus=0;/SYSCLK,HCLK,PCLK2andPCLK1configuration//EnableHSE/RCC->CR|=((uint32_t)RCC_CR_HSEON);/WaittillHSEisreadyandifTimeoutisreachedexit/do{HSEStatus=RCC->CR&RCC_CR_HSERDY;StartUpCounter++;}while((HSEStatus==0)&&(StartUpCounter!=HSE_STARTUP_TIMEOUT));if((RCC->CR&RCC_CR_HSERDY)!=RESET){HSEStatus=(uint32_t)0x01;}else{HSEStatus=(uint32_t)0x00;}if(HSEStatus==(uint32_t)0x01){/EnablePrefetchBuffer/FLASH->ACR|=FLASH_ACR_PRFTBE;/Flash1waitstate/FLASH->ACR&=(uint32_t)((uint32_t)~FLASH_ACR_LATENCY);FLASH->ACR|=(uint32_t)FLASH_ACR_LATENCY_1;/HCLK=SYSCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_HPRE_DIV1;/PCLK2=HCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE2_DIV1;/PCLK1=HCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE1_DIV2;#ifdefSTM32F10X_CL/ConfigurePLLs//PLL2configuration:PLL2CLK=(HSE/5)8=40MHz//PREDIV1configuration:PREDIV1CLK=PLL2/5=8MHz/RCC->CFGR2&=(uint32_t)~(RCC_CFGR2_PREDIV2|RCC_CFGR2_PLL2MUL|RCC_CFGR2_PREDIV1|RCC_CFGR2_PREDIV1SRC);RCC->CFGR2|=(uint32_t)(RCC_CFGR2_PREDIV2_DIV5|RCC_CFGR2_PLL2MUL8|RCC_CFGR2_PREDIV1SRC_PLL2|RCC_CFGR2_PREDIV1_DIV5);/EnablePLL2/RCC->CR|=RCC_CR_PLL2ON;/WaittillPLL2isready/while((RCC->CR&RCC_CR_PLL2RDY)==0){}/PLLconfiguration:PLLCLK=PREDIV16=48MHz/RCC->CFGR&=(uint32_t)~(RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLSRC|RCC_CFGR_PLLMULL);RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1|RCC_CFGR_PLLSRC_PREDIV1|RCC_CFGR_PLLMULL6);#else/PLLconfiguration:PLLCLK=HSE6=48MHz/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC|RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLMULL));RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLSRC_HSE|RCC_CFGR_PLLMULL6);#endif/STM32F10X_CL//EnablePLL/RCC->CR|=RCC_CR_PLLON;/WaittillPLLisready/while((RCC->CR&RCC_CR_PLLRDY)==0){}/SelectPLLassystemclocksource/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC->CFGR|=(uint32_t)RCC_CFGR_SW_PLL;/WaittillPLLisusedassystemclocksource/while((RCC->CFGR&(uint32_t)RCC_CFGR_SWS)!=(uint32_t)0x08){}}else{/IfHSEfailstostart-up,theapplicationwillhavewrongclockconfiguration.Usercanaddheresomecodetodealwiththiserror/}}#elifdefinedSYSCLK_FREQ_56MHzstaticvoidSetSysClockTo56(void){__IOuint32_tStartUpCounter=0,HSEStatus=0;/SYSCLK,HCLK,PCLK2andPCLK1configuration//EnableHSE/RCC->CR|=((uint32_t)RCC_CR_HSEON);/WaittillHSEisreadyandifTimeoutisreachedexit/do{HSEStatus=RCC->CR&RCC_CR_HSERDY;StartUpCounter++;}while((HSEStatus==0)&&(StartUpCounter!=HSE_STARTUP_TIMEOUT));if((RCC->CR&RCC_CR_HSERDY)!=RESET){HSEStatus=(uint32_t)0x01;}else{HSEStatus=(uint32_t)0x00;}if(HSEStatus==(uint32_t)0x01){/EnablePrefetchBuffer/FLASH->ACR|=FLASH_ACR_PRFTBE;/Flash2waitstate/FLASH->ACR&=(uint32_t)((uint32_t)~FLASH_ACR_LATENCY);FLASH->ACR|=(uint32_t)FLASH_ACR_LATENCY_2;/HCLK=SYSCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_HPRE_DIV1;/PCLK2=HCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE2_DIV1;/PCLK1=HCLK/RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE1_DIV2;#ifdefSTM32F10X_CL/ConfigurePLLs//PLL2configuration:PLL2CLK=(HSE/5)8=40MHz//PREDIV1configuration:PREDIV1CLK=PLL2/5=8MHz/RCC->CFGR2&=(uint32_t)~(RCC_CFGR2_PREDIV2|RCC_CFGR2_PLL2MUL|RCC_CFGR2_PREDIV1|RCC_CFGR2_PREDIV1SRC);RCC->CFGR2|=(uint32_t)(RCC_CFGR2_PREDIV2_DIV5|RCC_CFGR2_PLL2MUL8|RCC_CFGR2_PREDIV1SRC_PLL2|RCC_CFGR2_PREDIV1_DIV5);/EnablePLL2/RCC->CR|=RCC_CR_PLL2ON;/WaittillPLL2isready/while((RCC->CR&RCC_CR_PLL2RDY)==0){}/PLLconfiguration:PLLCLK=PREDIV17=56MHz/RCC->CFGR&=(uint32_t)~(RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLSRC|RCC_CFGR_PLLMULL);RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1|RCC_CFGR_PLLSRC_PREDIV1|RCC_CFGR_PLLMULL7);#else/PLLconfiguration:PLLCLK=HSE7=56MHz/RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC|RCC_CFGR_PLLXTPRE|RC
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年外研版八年級(jí)歷史上冊(cè)月考試卷含答案
- 2025年粵教新版九年級(jí)歷史下冊(cè)階段測(cè)試試卷
- 2025年人教版選修6歷史下冊(cè)階段測(cè)試試卷含答案
- 2025年湘教新版選修2地理上冊(cè)月考試卷含答案
- 2025年粵教版九年級(jí)科學(xué)上冊(cè)階段測(cè)試試卷含答案
- 2025年冀教版九年級(jí)生物上冊(cè)階段測(cè)試試卷含答案
- 2025年滬教版八年級(jí)地理下冊(cè)階段測(cè)試試卷
- 2025年度跨境電商農(nóng)產(chǎn)品進(jìn)出口代理服務(wù)合同范本4篇
- 二零二五年度企業(yè)年會(huì)禮品贊助合作合同協(xié)議書(shū)4篇
- 二零二五年度南海區(qū)勞動(dòng)就業(yè)服務(wù)中心農(nóng)村勞動(dòng)力轉(zhuǎn)移就業(yè)合同4篇
- 中華人民共和國(guó)保守國(guó)家秘密法實(shí)施條例培訓(xùn)課件
- 管道坡口技術(shù)培訓(xùn)
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識(shí) CCAA年度確認(rèn) 試題與答案
- 皮膚儲(chǔ)存新技術(shù)及臨床應(yīng)用
- 外研版七年級(jí)英語(yǔ)上冊(cè)《閱讀理解》專(zhuān)項(xiàng)練習(xí)題(含答案)
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
- 上海市復(fù)旦大學(xué)附中2024屆高考沖刺模擬數(shù)學(xué)試題含解析
- 幼兒園公開(kāi)課:大班健康《國(guó)王生病了》課件
- 小學(xué)六年級(jí)說(shuō)明文閱讀題與答案大全
- 人教pep小學(xué)六年級(jí)上冊(cè)英語(yǔ)閱讀理解練習(xí)題大全含答案
評(píng)論
0/150
提交評(píng)論