猫咪供血站配重环境自控调节系统 5_第1页
猫咪供血站配重环境自控调节系统 5_第2页
猫咪供血站配重环境自控调节系统 5_第3页
猫咪供血站配重环境自控调节系统 5_第4页
猫咪供血站配重环境自控调节系统 5_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章系统测试在这一部分调试中,因为時间比较有限,我们无法制做出真实的PCB来调试系统软件,因此只有应用Proteus模拟仿真软件来系统模拟的一部分作用。5.1系统实物图系统实物图如图5-1所示。图5-1系统完整实物图5.2测试目的软件测试的目的,就是要找出系统中可能出现的问题,有些人认为,在测试的过程中,找到的问题越多,就越好,但事实并非如此,只有在测试的时候,找到更多的问题,才能让软件的完整性得到‎高。对软件进行测试,是破坏性的,它的目的是尽可能多地找出软件中的缺陷,而不是用来演‎示出软件的真正功能。5.3测试原则软件测试应该遵循四个原则即:测试应该以系统的要求为基础。尽可能早地进行试验。当测试写时,需要考虑一些极端的情况,比如特殊值,边界值的输入。用于测试的例子,应该包括“合理的”和“不合理的”输入条件。对聚类现象进行充分的说明。5.4功能测试重力传感器模块测试:图5-2重力传感器实物图重力传感器需要在检测到当前重量高于设定配重重量时,触发自动控制程序,开启‎减少配重继电器,开启活塞吸合设备吸合配‎重片,移走配重后,‎减少配重继电器复位;否则反之,触发相反的自动控制程序。图5-3重力传感器侧视图重力传感器的数值能够在显示屏上显示,如图5-4所示。图5-4重力传感器测试图重力感应器中的模数转换器基本代码:u16Get_adc(u8ch){{//为特定模数转换器设定一组信道、一序列、取样时间ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239周期5)。具有239.5个循环的ADC1,ADC通道ADC软件开始连接(ADC1,安全)。为特定ADC1启用软件转换开始功能这是怎么回事?/ADC_FLAG_EOC)。等待过渡完成温度传感器模块测试:图5-5温度传感器实物图温度传感器需要在检测到当前温度高于或低于设定温度范围时,触发自动控制程序,开启或关闭相应的降温设备,以调节环境温度。图5-6重力传感器实物图温度传感器主要测量环境中的温度,并且在显示屏上显示,如图5-7所示。图5-7温度测试图温度传感器采集温度主要代码: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;//温度为负}elsetemp=1;//温度为正 tem=TH;//获得高八位tem<<=8;tem+=TL;//获得底八位 tem=(float)tem0.625;//转换 if(temp)returntem;//返回温度值 elsereturn-tem;}显示屏模块测试:显示屏用来显示采集到的温度和重量,如图5-8所示。图5-8显示屏测试图显示屏主要代码: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++;}}}设计通过蓝牙模块连接上位机来实行相应的数据输入。图5-9Hc05蓝牙实物图上位机可以设置预定时间当到达时间后蜂鸣器报警。图5-10上位机定时功能测试图上位机可以显示当前的温度和重量,并且可以自由设定温度和重量的阈值,并且显示出来,如图5-11所示。图5-11上位机温度重量功能测试图当猫咪供血站的配重超出设定值时,继电器可以自动调节配重,使猫咪供血站的重心恢复到平衡状态系统监测到当前温度高于设定温度阈值,制冷剂电器工作;系统监测到当前重量高于设定配重重量,开启减少配重继电器,开启活塞吸合设备(继电器)吸合配重片,移走配重后,减少配重继电器复位;系统监测到当前重量低于设定配重重量,开启增加配重继电器,开启活塞吸合设备(继电器)吸合配重片,增加配重后,增加配重继电器复位。图5-12继电器实物图图5-13蜂鸣器实物图此系统不仅能够设置时间预警还能采集温度信息,采集重量信息,当温度超过设定的阈值,会开启制冷继电器,当重量超过阈值时,会开启减重继电器;重量低于阈值时,开启增重继电器。设定阈值时间当时间,显示屏显示当前采集到的数值和阈值,蜂鸣器会进行报警。如图5-14所示。图5-14整体功能测试图5.5测试结果在该章中,对系统的功能模块进行测试,对其获得的测试进行详细的记录,并且进行分析,可以使得系统具有正常运行的特性可以监测当前的温度和重量,并且可以自由设定温度和重量的阈值,在模块控制中,通过正常的使用,可以符合要求,使得该系统通过测试。第6章总结与展望6.1总结猫咪供血站配重环境自控调节系统设计是一项综合性工程,需要设计硬件和软件两个方面。该系统通过重力传感器和温度传感器采集环境数据,并通过继电器、继电器和蜂鸣器等控制设备来实现环境自控调节的功能,同时通过显示屏进行数据的展示和交互。该系统设计的目的在于提高猫咪供血站的自动化程度和准确性,为猫咪提供更好的血液采集环境。系统设计的优点包括节省人力资源、提高工作效率、减少人为操作误差、增强数据可视化等。但同时也需要充分考虑硬件和软件的稳定性、安全性和可靠性等方面,确保系统的稳定性和可持续性。6.2展望随着科技的不断发展和人们对宠物健康的日益重视,猫咪供血站配重环境自控调节系统的设计也将不断完善和发展。未来的展望包括以下几个方面:智能化:随着人工智能技术的不断发展,未来的猫咪供血站配重环境自控调节系统将更加智能化,能够根据猫咪的生理特征和血液采集需要进行自动化调节和优化。数据化:未来的系统将更加注重数据化,可以实时监测猫咪的生理数据、血液采集数据等,通过数据分析来优化系统的设计和操作流程。便携化:未来的系统将更加便携化,可以方便携带和移动,适用于多种环境下的猫咪供血。安全化:未来的系统将更加注重安全性,包括硬件和软件层面的安全性设计,以确保猫咪供血过程的安全和可靠性。总之,未来的猫咪供血站配重环境自控调节系统将更加智能化、数据化、便携化和安全化,为猫咪的健康和生命提供更加优质和可靠的保障。

参考文献[1]王韵,汪峰,费静娴,孙泉,陈义柱.采供血机构ALT初筛检测质量保证的探讨[J].临床血液学杂志,2022,35(12):884-887.[2]刘鹏娟,杨斌.基于单片机的多路温度测量系统的设计[J].电子制作,2022,30(20):39-41+82.[3]黄操,张伟,李云虹,樊嘉坤.湿式双离合变速器滑摩过程温度的测量与分析[J].汽车零部件,2022(08):60-64.[4]陈林,窦萌萌,刘文敏,张芳.多路PT100温度测量系统的硬件开发[J].计量与测试技术,2022,49(07):23-27..[5]李晔,章宇宁,邢丽楠,李栋,赵小曼,刘青山,闫磊.一种血液游离核酸稳定剂的保存效果验证[J].中国酿造,2022,41(05):164-168.[6]马欣欣,龚立娇,李伊博.一种基于压电俘能器供电的温度测量系统设计[J].自动化与仪表,2022,37(01):85-89+99.[7]陈玉燕,连晓征,陈惠民.血站采血过程中关键控制点对血液质量安全的重要性[J].中国卫生标准管理,2020,11(15):131-134.[8]李兴华.血液的冷冻保存[J].保健文汇,2020(07):127.[9]陈静,段小勇,刘汉涛,金心.批量幼儿体检血液分析样本保存方法的探讨[J].人人健康,2019(22):57.[10]刘艳晶.血站血液安全的质量控制分析[J].世界最新医学信息文摘,2018,18(70):194.[11]王丽东,那向杰,单铁梅,李业明,付丽丽,段潇潇.血液标本的保存对常规生化检测的影响分析[J].中国医疗器械信息,2018,24(01):23-24..[12]邹俊.比格犬去白细胞血液的体外保存及输血效果研究[D].华南农业大学,2017.[13]陈静,陈德明,徐玉玲.动物血液样品采集制备与保存的方法[J].兽医导刊,2015(15):72-73.[14]杨成财.畜禽血液样品采集与保存方法[J].中兽医学杂志,2015(08):39.[15]陈正林.畜禽血液采集、血清分离及保存技术[J].中国畜牧兽医文摘,2015,31(03):37-38.[16]刘策,刘伟,林阳,陈雪梅,孙海涛,林振国.临清狮猫血液生化指标及血常规的测定[J].山东畜牧兽医,2020,41(05):4-5.[17]蒋达树,刘金兰,谢瑶芳,赵吉会,刘家瑛,隗功芬,张立新.针刺对实验性脑缺血猫血液动力学的影响[J].针刺研究,1988(03):194-198.[18]刘继锋,齐飞虎,任俊平,梁彦杰,孙秋燕,唐珊波,张丽蓉.虎皮猫血液学和生化参数的测定[J].医学动物防制,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;//默认给高电位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屏幕翻转显示 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);//统 OLED_ShowString(36,20,":",16); OLED_ShowChinese(0,40,2,16);//系 OLED_ShowChinese(18,40,3,16);//统 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论