由于STM32F10x库官方采用的是默认的外接8MHz晶振,因此造成很多用户也采用了8MHz的晶振,但是,8MHz的晶振不是必须的,其他频点的晶振也是可行的,只需要在库中做相应的修改就行。
在论坛上看到很多用户反映,使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的努力,下面我们就通过简单的三个步骤就可以让你随意的使用4—16MHz之内任何频点的晶振,我们以STM32F10x_StdPeriph_Lib_V3.4.0为例说明。
第一步,打开stm32f10x.h,将
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
修改为:
#define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
第二步,打开system_stm32f10x.c,修改PLL参数,将
/* 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_PLLMULL9);
修改为:
/* PLL configuration: PLLCLK = HSE * 6 = 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_PLLMULL6);
至此,原文件已经修改完成,如果你想将主频修改至其他频率,请自行修改。但是,到现在,如果您直接编译调试的话,就会出现上文所说的USART的波特率不正确,Systick走时不准等问题,原因就是我们需要进行第三部的修改,这个修改不是在原文件中,而是在编译环境中。我们已Keil MDK为例说明。
第三步,打开你已经建立的STM32工程,选择Projects-〉Options for target ***,找到Target标签,你会发现,外接的晶振默认还是8MHz,我们将外接的晶振参数修改为12MHz,确定保存,再编译,调试,你就会发现,所有的参数都回归的正常轨道,设置波特率为9600,它也不会跑到14400,设置Systick为1ms中断,它不会1.5ms中断。
现在,我们也得出了一个结论,在keil MDK编译环境的设置参数的优先级是高于原文件中的设置的。
上一篇:STM32库文件systemInit 晶振更改默认晶振8M到12M方法
下一篇:STM32F105使用固件库的时候串口乱码解决方法
推荐阅读
史海拾趣
Delta公司自1971年成立以来,始终专注于电源管理领域。最初,公司主要生产开关式电源供应器,但随着技术的不断进步和市场的不断扩大,Delta逐渐将产品线扩展到散热管理解决方案、零组件等多个领域。凭借其高效、可靠的产品,Delta在全球电源管理市场上树立了良好的口碑,并逐步成为该领域的领军企业。
在电子行业竞争日益激烈的背景下,Allianc公司深知只有不断创新才能保持竞争力。因此,公司加大了对研发创新的投入力度,建立了完善的研发体系和激励机制。通过持续的创新和优化,公司不断推出新产品和新技术,满足了市场的不断变化和消费者的多样化需求。这些创新举措不仅提升了公司的竞争力,也为公司的长期发展注入了新的动力。
Eureka在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,致力于减少生产过程中的能源消耗和废弃物排放。同时,Eureka也积极参与公益活动,为社会做出积极贡献。这些努力不仅提升了公司的社会形象,也促进了公司的可持续发展。
请注意,以上故事仅为虚构,并非Eureka公司的实际历史。如有需要,请查阅相关公开资料或联系Eureka公司以获取准确信息。
面对云计算技术的不断发展和市场竞争的加剧,ECS公司制定了面向未来的战略布局。他们将继续加大在研发方面的投入,推动ECS服务的不断升级和创新;同时,他们还将积极探索新的业务领域和市场机会,为客户提供更加全面、丰富的服务。此外,ECS公司还注重可持续发展和社会责任。他们致力于降低能耗和排放、推动绿色计算等方面的工作;同时,他们还积极参与社会公益事业和慈善活动,回馈社会。这些举措使得ECS公司不仅成为了一家领先的云服务提供商,还成为了一家具有社会责任感的企业。
随着全球化的加速,BAE Systems公司积极寻求跨国合作与拓展机会。公司与多家国际知名企业建立了紧密的合作关系,共同开展研发项目和市场拓展。这些合作不仅帮助公司获取了更多的技术和市场资源,也提升了公司在全球电子行业的地位和影响力。通过跨国合作,BAE Systems公司的产品和服务逐渐进入全球市场,为公司的持续发展注入了新的活力。
作为一家有社会责任感的企业,德欣公司始终关注环境保护和可持续发展。公司积极推广绿色生产技术和资源循环利用方案,减少生产过程中的能源消耗和废弃物排放。同时,德欣公司还积极参与社会公益活动,为社区和环境贡献自己的力量。这些举措不仅体现了德欣公司的社会责任担当,也为其赢得了更多客户和合作伙伴的信任和支持。
调试经验之---硬件篇 好多的新手在最初的硬件调试过程中,由于出现硬件故障,导致实验失败。所以所有软件实验也将无法进行下去。本人将自己从事硬件调试的一些心得写给大家,希望大家能够缩短硬件调试时间,提高实验的成功率。 第一步:在焊接 ...… 查看全部问答∨ |
Error: Design requires 1087 I/O resources -- too many to fit in 314 available in the selected device or any device in the device family Error: Cannot find device that meets Compiler settings specifications… 查看全部问答∨ |
最近使用stmf103做一个信号采集的实验板,觉得用usb传数据比较方便(主要是笔记本上都不带串口啊)。比较后打算用usb的虚拟串口功能比较好。有主机端的驱动程序,又有设备端的例程。 但是用起来有很多问题。因为是实时 ...… 查看全部问答∨ |
|
【我给xilinx资源中心做贡献】Xilinx Spartan 3E Starter Kit平台控制1602液晶程序 Xilinx Spartan 3E Starter Kit平台控制1602液晶程序Xilinx Spartan 3E Starter Kit平台上LCD1602与板载Intel Flash Memory公用四根数据线,读写命令和数据时分别写高四位和低四位 源码: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.S ...… 查看全部问答∨ |
|
zstack组网距离远远小于数据传输距离,如何实现远距离组网? 现在有两个思路一个是扩大组网距离但似乎实现起来比较困难另一个是去掉组网过程,使一定数量的节点启动后就连接一个网络,这样能避免组网距离太近的缺陷实际应用中各个节点都安装好,开机后组网,组网后可正常使用但现在的情况组网距离很近,加了CC ...… 查看全部问答∨ |