外部从12M晶振换8M晶振,如果还想是72MHZ时钟,只需要改三个地方:
首先:stm32f10x.h和system_gd32f10x.c文件可以通过下图找到
1、stm32f10x.h中,将#define HSE_VALUE ((uint32_t)12000000)改为#define HSE_VALUE ((uint32_t)8000000)
在stm32f10x.h中,改后如下图
2、system_gd32f1x0.c中,使用72M的那个宏,即改为如下:
//#define SYSCLK_FREQ_HSE HSE_VALUE
//#define SYSCLK_FREQ_24MHz 24000000
//#define SYSCLK_FREQ_36MHz 36000000
//#define SYSCLK_FREQ_48MHz 48000000
//#define SYSCLK_FREQ_56MHz 56000000
#define SYSCLK_FREQ_72MHz 72000000
在stm32f10x.h文件中改后如下图数据
3、如果是在keil中调试下载,工程选项中修改如下,Xtal(MHz)标签旁从12.0改为8.0。
最后,一定要注意,在时钟配置的时候不要忘了改动倍频系数,在时钟初始化函数void RCC_Configuration(void)中,将 RCC_PLLMul_6改为RCC_PLLMul_9,即为:
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
当然,如果将8M改为12M或其他晶振,方法类似
关键字:STM32 晶振 相关设置
引用地址:
STM32将12M晶振换8M晶振后Keil及程序的相关设置
推荐阅读最新更新时间:2024-03-16 16:11
STM32入门系列-CMSIS标准
使用寄存器点亮开发板上LED,这种开发方式显然是不适合大众,对于STM32这样庞大的芯片,内部寄存器实在太多,如果操作的外设比较多,那么就需要花很多时间查询底层寄存器内容,而且即使程序写好,如果要换其他端口或者外设的话,修改起来非常麻烦,而且容易出错,移植性也差。基于这些原因,ST公司推出了一套固件库,内部已经将STM32的全部外设寄存器的控制封装好,给用户提供一些API函数,用户只需要学习如何使用这些API函数即可。 CMSIS标准 CMSIS标准英文全称是Cortex MicroController Software Interface Standard,翻译为中文意思就是ARM Cortex微控制器软件接口标准。由于基于
[单片机]
stm32位带操作中对内存的浅显理解
基础知识 进制 计算机以二进制代码储存信息,每个二进制数表示一位 (bit),每8个二进制数表示一个字节 (Byte) , 而再往上的KB,就是210倍的字节,总结有以下进制关系。 1 Byte = 8 bit 1 KB = 1024Byte(210=1024) 1 MB = 1024KB 1 GB = 1024MB 1 GB = 230Byte 内存地址 内存地址使用16进制数表示,内存地址只是一个编号表示,一个内存空间,计算机以字节存储数据,所以一个内存地址对应的应该是一个字节(8 bit)的大小,这个之后会详细解释。 这里用32位机的内存做一个图例。32位机的内存地址用8位16进制数表示。 0x00000
[单片机]
STM32硬件IIC驱动设计
前言 stm32的硬件IIC一直是令人诟病的地方,以至于很多情况下我们不得不选择使用模拟IIC的方式来在stm32上进行iic通讯。我在stm32 iic通讯上也浪费了几多青春。。。经过不断地探索最终还是成功了(可喜可贺啊),现在把我的探索成功的经验分享出来,如果能减少读者在硬件iic上面浪费的时间,那真是太棒了! 关于IIC通讯 众所周知IIC是一种通讯方式。。。所以有必要先介绍一下IIC通信,省的下面不知道不知道我在写什么。当然这些都是基础,你可以选择跳过,直接看第三部分STM32的IIC IIC是什么 说实话这个问题有点难,我就百度了一下,描述如下 IIC 即Inter-Integrated Circ
[单片机]
STM32 正交编码器代码
/******************** (C) COPYRIGHT 2007 STMicroelectronics ******************** * File Name : stm32f10x_encoder.c * Author : IMS Systems Lab * Date First Issued : 21/11/07 * Description : This file contains the software implementation for the * encoder unit ***********************************
[单片机]
STM32 TIM触发ADC 定时采样-笔记
用TIM3的update触发adc,只需勾选Internal clock就可以了 ADC设置,关键是选TIM3 TRIGGER OUT TIM3 设置时间间隔然后关键选Update event 程序代码 记得开启TIM3 HAL_ADCEx_Calibration_Start(&hadc1); //STM32F1 HAL_TIM_Base_Start(&htim3); HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_Value,1024); 然后重写callback 函数 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* h
[单片机]
STM32基础4--中断系统
为什么需要中断 在使用单片机时,最开始我们会使用一个Main函数,然后所有的功能都往里丢。在任务少的时候,并没有什么问题。例如在main函数添加点亮LED,添加延时函数,添加KEY扫描。 一切都好像完美运行,但是如果我们将延时的时间加长,然后去KEY,这时候我们可以发现,我们按的KEY时好是坏。这时候我们就会很痛苦了,我们需要长时间的延时,但是又想我们的KEY功能正常,我们不得不想办法解决这个问题,如果每次按下KEY时,我们都让单片机先去响应KEY的功能,我们就不会有按键时好时坏的感觉了,响应完KEY的功能后,我们在回来执行延时。 为了清除的描述上面的情况,我们取了新的词语描述整一个过程 KEY按下 --中断源请求
[单片机]
STM32之I2C_FLAG_BUSY置位解决办法
stm32f429-disco上的触摸屏IC是STMPE811,使用I2C通信,该ic的使用还不算难,里面包括8通道12bit AD,8个GPIO口,加128set FIFO以及几个寄存器。 问题是出在STM32 的I2C IP核上,网上大家也吐槽了不少,最主要的就是各种当机,当当当当,哈哈。 我第一次出现当机的地方是在 if(__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) == SET) { return HAL_BUSY; } 返回的BUSY值是一直置H的,这就奇怪了,用的是官方的STM32CubeMX生成的初始化代码,刚初始完就BUSY,太坑了吧。 查看dat
[单片机]
一文了解STM32启动过程
1 概述 说明 每一款芯片的启动文件都值得去研究,因为它可是你的程序跑的最初一段路,不可以不知道。通过了解启动文件,我们可以体会到处理器的架构、指令集、中断向量安排等内容,是非常值得玩味的。 STM32作为一款高端 Cortex-M3系列单片机,有必要了解它的启动文件。打好基础,为以后优化程序,写出高质量的代码最准备。 本文以一个实际测试代码--START_TEST为例进行阐述。 整体过程 STM32整个启动过程是指从上电开始,一直到运行到 main函数之间的这段过程,步骤为(以使用微库为例): ①上电后硬件设置SP、PC ②设置系统时钟 ③软件设置SP ④加载.data、.
[单片机]