当前位置: 首页 > news >正文

电子商务网站建设卷子python小学生入门教程

电子商务网站建设卷子,python小学生入门教程,做公司网站的费用计入什么科目,网络的最基本定义绪论 本文主要讲解单片机的时钟系统的相关知识#xff0c;并进行超频测试#xff0c;同时介绍如何在STM32F0单片机上进行内外时钟的切换#xff0c;在不使用外部晶振或者外部晶振不启动时自动切换内部时钟的方法。 一、杂谈 问题来源于群里的一次问答#xff1a; 诚然并进行超频测试同时介绍如何在STM32F0单片机上进行内外时钟的切换在不使用外部晶振或者外部晶振不启动时自动切换内部时钟的方法。 一、杂谈 问题来源于群里的一次问答 诚然当使用固件库时把外部晶振摘掉系统确实会自动切换到内部时钟但是只会以8M的默认值运行显然这是十分不可行的8M的速度直接让我们的STM32病入膏肓今天的任务就是让STM32失去外挂晶振时依旧可以激情澎湃。 时钟详解这里不过多介绍自己也没有别人介绍的好。此帖旨在解决现实问题。 此处插播广告 群友问过这种问题外部接8M晶振和16M晶振有啥区别 以我微薄的经验来看这两个在用的时候差别不大如果使用ST的固件库以STM32F103为例使用8M的晶振会更方便不用改任何代码时钟就是72M的全速运行状态。如果用16M晶振则需要修改代码 在stm32f10x.h中修改宏定义 HSE_VALUE ((uint32_t)8000000)为HSE_VALUE ((uint32_t)16000000)。 之后进入system_stm32f10x.c将 RCC-CFGR | (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); 改为 RCC-CFGR | (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL9); 此处是将输入时钟二分频为8M再进行9倍频到72M和使用了8M没区别。如果不进行该二分频操作时钟还是有的但是会以16M为基准进行9倍频到144M此时单片机以超频模式运行也是可以运行的。但是时钟的精准性不能得到保证。 系统的时钟可以通过添加代码在debug模式下显示 RCC_ClocksTypeDef ClockInfo; RCC_GetClocksFreq(ClockInfo);通过debug模式下观察ClockInfo的值便可知道此时系统时钟速度 这里提一下在使用外部晶振的情况下ST即使是超频依旧发挥稳定不得不夸一下ST的质量。 此时我将我的开发板以8M的基准倍频16倍得到128M的主频使用定时器定时10us示波器测试无误差。串口通信无误。 以72M的主频跑128依旧稳定赞一个因为我的外部晶振只有8M最大只能倍频到128如果使用外部16M不知继续倍频可以到多少。不过性能还是很好的。 预留测试GD32的效果 写贴时将GD的GD32E230翻出来进行了同样的测试因为GD的倍频器倍数较高我已经倍频到144M标准72M测试定时器依旧稳定。 广告很长你忍一下。 上半场结束下半场继续 此处歪解一下时钟的问题之前有群友很疑惑单片机的低功耗和时钟的关系疑惑高速的时钟会不会增加MCU的功耗为啥低功耗要降低时钟速度。这里讲解一下 可以用用单位时间内执行的指令来看高速时钟在单位时间内使系统跑了更多的指令而低速时钟单位时间内跑的少而单片机是直线结构内核是不会休息的功耗就看执行的指令多少。而单片机的低功耗就是降低时钟让单片机跑慢点。就像人一样低功耗相当于你不跑了原地休息但是你的心跳不会停止你还是得消耗能量即使再少还得消耗。 就像人一样时钟就相当于心跳只要还活着就得消耗能量你要想跑得快心脏就得跳得快跳得越快能量消耗越高即使你去睡觉心跳只要不停止你还得消耗能量如果心跳没了整个人就没了MCU也就宕机了。所以在处理低功耗时最先解决的就是时钟频率只有降低了时钟的频率才能真正降低功耗。关于单片机进入低功耗和唤醒以及降低整体运行功耗我看能不能在下文讲解近期刚好做了一个低功耗的项目这里留悬念吧。 二、内外时钟切换 广告结束正文开始不好意思有点喧宾夺主了哈。 回到主题为了解决时钟切换的问题才有了这个帖子上文全属歪楼为最近开发时的经验总结。 我们在使用STM32103的固件库时时钟配置在system_stm32f10x.c中但是只是对外部晶振做了初始化而对于内部时钟并没有添加代码如果你的MCU没有外部晶振当系统运行时是先启动内部时钟然后会检测外部晶振如果没有检测到晶振系统便以内部的8M继续运行这是不合理的。 这里可以看到如果外部启动失败会进入这个else但是这个else中并未添加任何代码所以只会用8M的内钟执行我们要做的就是在else中添加外部启动失败的代码 /* 开启HSI 即内部晶振时钟 */RCC-CR | (uint32_t)0x00000001; /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/RCC-CFGR | (uint32_t)RCC_CFGR_PLLSRC_HSI_Div2; /*PLLCLK8/2*1352MHz 设置倍频得到时钟源PLL的频率*/RCC-CFGR | (uint32_t)RCC_CFGR_PLLMULL12;/* PLL不分频输出 */RCC-CFGR | (uint32_t)RCC_CFGR_HPRE_DIV1;/* 使能 PLL时钟 */RCC-CR | RCC_CR_PLLON;/* 等待PLL时钟就绪*/while((RCC-CR RCC_CR_PLLRDY) 0){}/* 选择PLL为系统时钟的时钟源 */RCC-CFGR (uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC-CFGR | (uint32_t)RCC_CFGR_SW_PLL; /* 等到PLL成为系统时钟的时钟源*/while ((RCC-CFGR (uint32_t)RCC_CFGR_SWS) ! (uint32_t)0x08){}该代码填充后如果检测到有外部时钟便以外部时钟为基准进行时钟的倍频处理达到用户想要的时钟频率如果你的MCU没有外部时钟则会执行else内部的代码将时钟源切换到内部时钟并进行倍频。如此便达到了自动检测时钟的目的。 问题这是我根据STM32F031的时钟切换代码演变来的但是这个只能用于主频小于或等于48M时使用如果倍频因子超过12也就是主频超过48M是就会出现硬件错误直接卡死。当需要更高的主频时就需要如下配置。 在else里面最开头添加 /* Enable Prefetch Buffer */FLASH-ACR | FLASH_ACR_PRFTBE;/* Flash 2 wait state */FLASH-ACR (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);FLASH-ACR | (uint32_t)FLASH_ACR_LATENCY_2; 问 如果我的MCU有晶振但是我不想用外部就想用内部如何处理呢 答 打一顿就好了有外部不用干啥用内部呢 上述纯属恶搞自己被坑过。。。 因为内部时钟不准测试内部时钟在使用定时器时会有偏差本人在此吃过亏。此问题在STM32F031和GD32E230中均有体现。但是USART和SPI通信是正常的即使我用的2.5M波特率的USART和8M的SPI。 解决办法上述代码不用动添加如下代码。 通过注释原文 RCC-CR | ((uint32_t)RCC_CR_HSEON); 并添加 RCC-CR ~((uint32_t)RCC_CR_HSEON);可默认之以内部时钟方式启动。 注意在主函数加上SystemInit();函数哦 最终代码如下 static void SetSysClockTo72(void) {__IO uint32_t StartUpCounter 0, HSEStatus 0;/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ /* Enable HSE */ // RCC-CR | ((uint32_t)RCC_CR_HSEON);/*取消改行注释并注释上文可默认启动内部时钟*/RCC-CR ~((uint32_t)RCC_CR_HSEON);/* Wait till HSE is ready and if Time out is reached exit */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){/* Enable Prefetch Buffer */FLASH-ACR | FLASH_ACR_PRFTBE;/* Flash 2 wait state */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;#ifdef STM32F10X_CL/* Configure PLLs ------------------------------------------------------*//* PLL2 configuration: PLL2CLK (HSE / 5) * 8 40 MHz *//* PREDIV1 configuration: PREDIV1CLK PLL2 / 5 8 MHz */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);/* Enable PLL2 */RCC-CR | RCC_CR_PLL2ON;/* Wait till PLL2 is ready */while((RCC-CR RCC_CR_PLL2RDY) 0){}/* PLL configuration: PLLCLK PREDIV1 * 9 72 MHz */ 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); #else /* PLL configuration: PLLCLK HSE * 9 72 MHz */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_PLLMULL16); #endif /* STM32F10X_CL *//* Enable PLL */RCC-CR | RCC_CR_PLLON;/* Wait till PLL is ready */while((RCC-CR RCC_CR_PLLRDY) 0){}/* Select PLL as system clock source */RCC-CFGR (uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC-CFGR | (uint32_t)RCC_CFGR_SW_PLL; /* Wait till PLL is used as system clock source */while ((RCC-CFGR (uint32_t)RCC_CFGR_SWS) ! (uint32_t)0x08){}}else{ /* Enable Prefetch Buffer */FLASH-ACR | FLASH_ACR_PRFTBE;/* Flash 2 wait state */FLASH-ACR (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);FLASH-ACR | (uint32_t)FLASH_ACR_LATENCY_2; /* 开启HSI 即内部晶振时钟 */RCC-CR | (uint32_t)0x00000001; /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/RCC-CFGR | (uint32_t)RCC_CFGR_PLLSRC_HSI_Div2; /*PLLCLK8/2*1352MHz 设置倍频得到时钟源PLL的频率*/RCC-CFGR | (uint32_t)RCC_CFGR_PLLMULL16;/* PLL不分频输出 */RCC-CFGR | (uint32_t)RCC_CFGR_HPRE_DIV1;/* 使能 PLL时钟 */RCC-CR | RCC_CR_PLLON;/* 等待PLL时钟就绪*/while((RCC-CR RCC_CR_PLLRDY) 0){}/* 选择PLL为系统时钟的时钟源 */RCC-CFGR (uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC-CFGR | (uint32_t)RCC_CFGR_SW_PLL; /* 等到PLL成为系统时钟的时钟源*/while ((RCC-CFGR (uint32_t)RCC_CFGR_SWS) ! (uint32_t)0x08){}} }在STM32F030或者STM32F031中同样可以做类似操作 static void SetSysClock(void) {__IO uint32_t StartUpCounter 0, HSEStatus 0;/* SYSCLK, HCLK, PCLK configuration ----------------------------------------*//* Enable HSE */ RCC-CR | ((uint32_t)RCC_CR_HSEON);//修改为内部晶振 // RCC-CR ~((uint32_t)RCC_CR_HSEON);/* Wait till HSE is ready and if Time out is reached exit */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){/* Enable Prefetch Buffer and set Flash Latency */FLASH-ACR FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;/* HCLK SYSCLK */RCC-CFGR | (uint32_t)RCC_CFGR_HPRE_DIV1;/* PCLK HCLK */RCC-CFGR | (uint32_t)RCC_CFGR_PPRE_DIV1;/* PLL configuration HSE * 6 48 MHz */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 | RCC_CFGR_PLLMULL7);/* Enable PLL */RCC-CR | RCC_CR_PLLON;/* Wait till PLL is ready */while((RCC-CR RCC_CR_PLLRDY) 0){}/* Select PLL as system clock source */RCC-CFGR (uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC-CFGR | (uint32_t)RCC_CFGR_SW_PLL; /* Wait till PLL is used as system clock source */while ((RCC-CFGR (uint32_t)RCC_CFGR_SWS) ! (uint32_t)RCC_CFGR_SWS_PLL){}}else{ /* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */// HSI 内部时钟做为PLL时钟源并配置PLL 56M做为系统时钟/* Enable Prefetch Buffer and set Flash Latency */FLASH-ACR FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;/* HCLK SYSCLK */RCC-CFGR | (uint32_t)RCC_CFGR_HPRE_DIV1;/* PCLK HCLK */RCC-CFGR | (uint32_t)RCC_CFGR_PPRE_DIV1;// PLL configuration (HSI/2) * 12 48 MHzRCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_14); // 8M/2 * 14 56M/* Enable PLL */RCC-CR | RCC_CR_PLLON;/* Wait till PLL is ready */while ((RCC-CR RCC_CR_PLLRDY) 0){}/* Select PLL as system clock source */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // PLL 做系统时钟/* Wait till PLL is used as system clock source */while ((RCC-CFGR (uint32_t)RCC_CFGR_SWS) ! (uint32_t)RCC_CFGR_SWS_PLL){}} }在STM32F103中使用内部晶振最大时钟频率也只能到64M受倍频因子的影响嘛最大只能倍频16倍。 但是在STM32F031中标准使用内部时钟主频只有48M但是我们仍然可以继续倍频用内部时钟进行超频达到64M。在我们的产品中就用过内部超频到56MUSART和SPI长时间无问题。 而GD32E230因为其高达32的倍频因子内部时钟可以倍频到128M。 但是这种几分钟内没有明显发热现象不敢做长时间测试现在MCU有点小贵。干费一个就心疼。 总之无论ST还是国产其主频更适合在规定的范围内运行但是跑极限在短时间内也没有很大的问题。这些数据仅供参考。 至此单片机时钟讲解就结束了没有多少理论性的东西主要是解决一些时钟使用时的问题自己也总是忘留帖一篇作为自省。 此帖中所有代码都经过本人测试运行无任何问题但是对于问题的阐述或者一些见解可能有错误欢迎大佬们批评指正一定接受各种批评努力完善。
http://www.hkea.cn/news/14359802/

相关文章:

  • 山东安康建设项目管理有限公司网站金泉网推广怎么样
  • 系统网站建设方案广元网站制作
  • 武隆集团网站建设岳阳网站建设哪里便宜
  • 织梦移动网站后缀网站建设投入及费用
  • 用来备案企业网站wordpress 无法编辑文章
  • 怎么做微信推送 网站安康企业网站定制
  • 哪些网站是php注册公司实缴和认缴有什么区别
  • 自己做网站的优势即墨区城乡建设局网站
  • 网站字体大小画廊网站模板
  • 手机网站接入微信登录适合手机端的wordpress
  • 在建设银行网站上还贷做网站现在好弄么
  • 银川网站推广方式广州建网站公司排名
  • 理财网站建设方案书wordpress网站上传服务器
  • 北京建站推广给静态网站加后台
  • 装修门户网站程序 cms瑞丽住建局网站
  • 江苏建设人才考试网是啥网站免备案网站建设
  • 做最好的导航网站企业网站优化分为两个方向
  • 金山网站建设费用做一个微网站平台
  • 介绍网站ppt该怎么做网页设计入门首先要学什么
  • 苏州园区建设网站首页深圳seo优化推广
  • 什么是网站栏目标题申请域名之后如何做网站
  • 淘宝客网站开发上架注册微信小程序流程
  • 有什么正规的网站做代加工装修公司营销网站模板
  • 做线上交互的网站wordpress-demo
  • 英国小子做房产网站嵌入式软件开发简历
  • 制作自己的平台网站河南建设监理协会新网站
  • php怎么创建网站企业信息查询系统入口
  • 帮人做图挣外快的网站jsp网站开发技巧
  • 创建一个新的公司网站好推建站
  • 珠宝类企业网站(手机端)wordpress中文网址转换