stm32外部晶振由8m换成12m系统延时函数如何更改

发布者:MagicGarden最新更新时间:2022-06-09 来源: eefocus关键字:stm32  外部晶振 手机看文章 扫描二维码
随时随地手机看文章

下面我们就通过简单的三个步骤就可以让你随意的使用4—16MHz之内任何频点的晶振,我们以STM32F10x_StdPeriph_Lib_V3.4.0为例说明。 第一步,打开stm32f10x.h,将
#define HSE_VALUE ((uint32_t)8000000) 修改为:
#define HSE_VALUE ((uint32_t)12000000)
第二步,打开system_stm32f10x.c,修改PLL参数,将

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); 修改为:

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中断。

关键字:stm32  外部晶振 引用地址:stm32外部晶振由8m换成12m系统延时函数如何更改

上一篇:STM32学习笔记:基础例子
下一篇:GPIO_Speed_50MHz的值是多少

推荐阅读最新更新时间:2024-11-06 11:52

STM32的GPIO位带操作的理解
支持了位带操作后,便可以使用普通的加载/储存指令来对单一的比特进行读写操作了。简单而言,就是可以单独的对一个比特位读和写。在F103中,有两个地方实现了位带操作, 其中一个是SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低 1MB 范围。这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。 图1.1 位带区与位带别名区的膨胀对应关系图 支持位带操作的两个内存区的范围是:0x2000_0000‐0x200F_FFFF( SRAM 区中的最低1MB); 0x4000_000
[单片机]
对<font color='red'>STM32</font>的GPIO位带操作的理解
STM32 IO模拟实现软件串口
最近项目中STM32的串口资源紧张,于是使用IO口进行模拟串口,现进行整理记录。 实现思路 IO口模拟串口的思路也比较简单,一切按照串口协议进行操作即可。 对于发送,计算好不同波特率对应的延时时间进行数据发送。 对于接收,稍微复杂。通过外部中断检测接收管脚的下降沿,检测到起始信号后开启定时器,定时器按照波特率设定好时间,每隔一段时间进入定时器中断接收数据,完成一个字节后关闭定时器。 测试Demo说明 TXD : PC13 RXD : PB14 波特率:9600 ,1-8-N Demo功能 接收11个数据,然后把接收到的数据发送出去。 程序实现 #define OI_TXD PCout(13) #define
[单片机]
关于STM32模拟IIC的理解
从书上看到STM32的硬件IIC远没有硬件SPI好用,书上给的例子也是模拟IIC的,因为之前只用过51的准双向口控制过简单的IIC器件,所以好好看了下。 IIC总线是由数据线SDA和时钟线SCL两条线构成的通信线路,既可以发送数据,也可以接收数据。在MCU和被控IC之间,IC和IC之间都可以进行双向传输。 这是一个IIC总线系统硬件结构图,SCL和SDA均需接上拉电阻。 在模拟IIC总线通信时,需写出几个关键部分的函数。 #define IIC_SCL PCout(12) //SCL #define IIC_SDA PCout(11) //SDA #define READ_SDA PCin(11) (1):总
[单片机]
关于<font color='red'>STM32</font>模拟IIC的理解
STM32关于USART的问题集锦
1、STM32103USART1死机 问:voidUSART_Receive(USART_TypeDef*USARTx) { if(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET) { USART_ClearFlag(USARTx,USART_FLAG_RXNE); s =USART_ReceiveData(USART1); delay(1000); s =USART_ReceiveData(USART1); delay(1000); s =USART_ReceiveData(USART1); delay(1000); write_c
[单片机]
stm32的swd接口的烧写协议是否公开的呢?
需要用一台好的示波器来抓才能有足够的存储深度,保证你能够过滤掉那个该死的50clock。 按照Arm的手册,每次转换发送方都需要一个TNR---但是我观察JLINK的波形却没有那个该死的TNR。 手册中说异步SWD需要,同步不需要----或者相反,但是我没有找到关于同步异步的描述。 姑且不管他,反正目前忽略掉TNR就能够读到该死IDR。 另外JLINK的复位时序很奇怪,大致是 70clk High,0xe79e(注意,SWD是LSB First), 70clk High,0xedb6(这里很奇怪,找不到描述), 70clkHigh,16clk Low,0xa5, 注意这里按照协议应该是TNR位-但是没有实际观测到这个位, 0b10
[单片机]
gd32和stm32的区别
gd32和stm32的区别 现在的市场上有很多种不同类型的微控制器,其中比较常见的有两种,即gd32和stm32。两种微控制器都是中国和欧洲的两个公司分别推出的,但是它们之间有很多区别,本文将会深入探讨这些区别。 1.起源和历史 gd32是中国的光弘科技公司于2014年推出的微控制器,因其与stm32在引脚兼容性上的相似之处而广受欢迎。而stm32则是欧洲的STMicroelectronics公司于2007年推出的一种微控制器系列,旨在替代8位的微处理器。 2.精度 gd32与stm32在精度方面有所不同。这是因为它们使用不同的时钟源,因此在使用定时器时,gd32的精度更高,在数码管和驱动方面表现也更好。 3.性能 stm32的性
[单片机]
STM32 SysTick应用注意
在STM32提供的库中,不同版本的库,代码有些差异。所以在使用相应的代码库时,一定要看相应的文档,否则会带来很多麻烦,这样也个代码的升级带来了很多问题,下面就业STM32的SysTick的应用为了说明: 由上面的资料可以看出,SysTick的函数已经变化了很多,所以在使用时一定要看相应的库函数介绍文档。 //SYSTICK 分频--1ms的系统时钟中断 if (SysTick_Config(SystemFrequency / 1000)) { /* Capture error */ while (1); }
[单片机]
<font color='red'>STM32</font> SysTick应用注意
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved