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

手机p2p网站手工加工网

手机p2p网站,手工加工网,建盏公司官方网站,资兴市网站建设服务商一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟#xff0c;由于内部HSI存在较大的误差#xff0c;因此我们在系统完成上电初始化#xff0c;之后需要将STM32的时钟切换到外部HSE作为系统时钟#xff0c;那么我…一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟由于内部HSI存在较大的误差因此我们在系统完成上电初始化之后需要将STM32的时钟切换到外部HSE作为系统时钟那么我们需要完成下面一些设置完成切换。首先我们需要打开外部HSE的震荡电路然后等待外部震荡电路就绪后在切换PLLTPRE为HSE的1分频在设置PLLSRC为PLLXTPRE过来的时钟。然后设置PLLMUL倍频系数然后打开PLL开关等待PLL稳定。然后设置APB1总线为2分频最后切换系统时钟为PLL输出的时钟。 二、相关寄存器 三、编程实现 #ifndef __SYSTEM_H__ #define __SYSTEM_H__#define uint unsigned inttypedef struct rRCC {uint CR;uint CFGR;uint CIR;uint APB2RSTR;uint APB1RSTR;uint AHBENR;uint APB2ENR;uint APB1ENR;uint BDCR;uint CSR;uint AHBRSTR;uint CFGR2; }RCC_TypeDef;static RCC_TypeDef *RCC (RCC_TypeDef *)0x40021000;void set_system_clock(void);#endif #include system.huint HSERDY_FLAG 0; //HSE就绪标志 uint PLLRDY_FLAG 0; //PLL就绪标志 uint SWRDY_FLAG 0; //时钟切换标志 uint false_time 0; //超时时间标志void set_system_clock(void) {rFLASH_ACR 0x00000032; //这个用来设置系统时钟于Flash访问时间的比率 根据系统时钟的不同设置的值不同RCC-CR (~(0x01 16)); //将HSEON这位清零RCC-CR | (0x01 16); //开启外部HSE振荡器电路do //判断外部HSE电路是否就绪{HSERDY_FLAG ((RCC-CR) (0x01 17));false_time;}while((false_time 0x00ffffff) (HSERDY_FLAG 0));false_time 0;if (HSERDY_FLAG ! 0) //如果外部振荡器电路就绪才会执行{ RCC-CFGR (~((0x01 17) | (0x01 16) | (0x0f 18))); //设置PLL倍频系数为9倍频RCC-CFGR | ((0x01 16) | (0x0 17) | (0x07 18)); //设置PLL时钟来源为PREDIV1 并且设置PLLXTPRE不对输入的时钟分频RCC-CR (~(0x01 24)); //使能PLL时钟RCC-CR | (0x01 24);do {PLLRDY_FLAG ((RCC-CR) (0x01 25));false_time;}while((false_time 0x00ffffff) (PLLRDY_FLAG 0)); //等待PLL时钟就绪false_time 0;if (((RCC-CR) (0x01 25)) ! 0){ RCC-CFGR (~((0x01 22) | (0x07 8))); RCC-CFGR | ((0x0 22) | (0x04 8)); //全速USB OTG配置为PLL输出2分频 APB1总线2分频 PLL输出作为系统时钟RCC-CFGR ~(0x03 0); RCC-CFGR | (0x02); //切换系统时钟为PLL输出时钟do{SWRDY_FLAG ((RCC-CFGR) (0x03 2));false_time; }while((false_time 0x00ffffff) ((SWRDY_FLAG) 0));if (((RCC-CFGR) (0x03 2)) ! 0) //判断时钟是否切换成功{}else{while(1);}}}else{while(1);} } 上面的代码一个是.h文件另一个是.c文件但是当我们运行上面的代码时我发现了一个问题当我们将时钟切换到PLL输出作为系统时钟时系统就不运行了。就死机了。这是为什么呢通过翻看数据手册发现系统时钟和内部flah有一些关系我们来看flash的寄存器就可以发现。 我们来看bit0-2发现当复位时默认是000因此系统时钟必须在0到24MHz之间这时候我们使用的是内部的HSI时钟时钟只有8MHz因此这个时候系统是可以正常运行的但是当我们将时钟切换到外部HSE时由于我们做了一系列的倍频因此这个时候系统时钟到了72MHz因此我们呢这里需要将这个寄存器的值也设置为010系统就可以正常运行了。 #define FLASH_ACR 0x40022000 #define rFLASH_ACR *((uint *)FLASH_ACR)void set_system_clock(void) {rFLASH_ACR 0x00000032; //这个用来设置系统时钟于Flash访问时间的比率 根据系统时钟的不同设置的值不同RCC-CR (~(0x01 16)); //将HSEON这位清零RCC-CR | (0x01 16); //开启外部HSE振荡器电路do //判断外部HSE电路是否就绪{HSERDY_FLAG ((RCC-CR) (0x01 17));false_time;}while((false_time 0x00ffffff) (HSERDY_FLAG 0));false_time 0;if (HSERDY_FLAG ! 0) //如果外部振荡器电路就绪才会执行{ RCC-CFGR (~((0x01 17) | (0x01 16) | (0x0f 18))); //设置PLL倍频系数为9倍频RCC-CFGR | ((0x01 16) | (0x0 17) | (0x07 18)); //设置PLL时钟来源为PREDIV1 并且设置PLLXTPRE不对输入的时钟分频RCC-CR (~(0x01 24)); //使能PLL时钟RCC-CR | (0x01 24);do {PLLRDY_FLAG ((RCC-CR) (0x01 25));false_time;}while((false_time 0x00ffffff) (PLLRDY_FLAG 0)); //等待PLL时钟就绪false_time 0;if (((RCC-CR) (0x01 25)) ! 0){ RCC-CFGR (~((0x01 22) | (0x07 8))); RCC-CFGR | ((0x0 22) | (0x04 8)); //全速USB OTG配置为PLL输出2分频 APB1总线2分频 PLL输出作为系统时钟RCC-CFGR ~(0x03 0); RCC-CFGR | (0x02); do{SWRDY_FLAG ((RCC-CFGR) (0x03 2));false_time; }while((false_time 0x00ffffff) ((SWRDY_FLAG) 0));if (((RCC-CFGR) (0x03 2)) ! 0){}else{while(1);}}}else{while(1);} }
http://www.w-s-a.com/news/816352/

相关文章:

  • 江西专业南昌网站建设中国专业的网站建设
  • 物流企业网站建设方案招标网站有哪些
  • 网站建设服务中企动力建筑工程网络进度计划备注填写范例
  • 电子商务网站开发与建设试卷php网站开发专业
  • 运城网站制作路90江苏省网站备案系统
  • 唐山做企业网站实体门店管理系统
  • 网站优化推广教程深圳网站建设世纪前线
  • 网站建设专家哪家好兰州网络推广执行
  • 广东住房和城乡建设厅网站王芃增加网站收录
  • 北京网站建设手机app电子商务网红营销的劣势
  • 网站 营销型wordpress获取4条文章标题
  • 浦东区建设工程监督网站建立全国统一的突发事件信息系统
  • 做网站需要基础吗重庆市造价信息网
  • 我要建设公司网站大连培训网站建设
  • 网站建设校长信箱设计方案小程序报价开发
  • 电子网站建设ppt模板营销策划方案怎么写?
  • 什么网站收录排名最高济南能源建设网站
  • 深圳移动网站建设公司价格桂林做网站哪家公司好
  • 互联网网站名字网站合作建设合同
  • 舟山高端网站设计广州优化排名推广
  • 哪个网站做免费广告好上海人才网站
  • cn域名做网站竞价推广代理
  • 省建设干部培训中心网站网站地图1 500 怎么做
  • 制作一个网站需要哪些人网站建设经营服务合同
  • 山东省住房和城乡建设厅官方网站网易发布广州
  • 长沙设计网站效果设计师灵感网站
  • 做网站php都用什么框架把asp.net写的网站别人怎么访问
  • 网站建设捌金手指下拉六正规的代运营公司
  • 自己申请网站空间冀州建网站
  • 哈尔滨旅游团购网站建设江苏建设工程建设网