基于正点原子将单片机是STM32F103C8T6修改为内部时钟,最后时钟为36M

本文介绍了如何将STM32F103C8T6单片机的时钟源从外部8M晶振改为内部RC振荡器,通过修改`system_stm32f10x.c`文件的`SystemInit()`函数,并利用条件编译设置时钟源。经过配置,内部RC振荡器频率达到36MHz,实际测试验证了设置的正确性。
摘要由CSDN通过智能技术生成

平时在做项目的时候都用的是外部晶振做为时钟源,想试试用内部RC振荡器做为时钟源,在网上搜了一下如何设置内部时钟,发现资料比较少的。决定将设置内部RC振荡器做为时钟源的方法记录下来。
用的单片机是STM32F103C8T6,项目工程是在正点原子的示例代码上修改来的。用一个LED工程测试,在主程序中闪烁LED灯。

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
int main ( void )
{
    delay_init();       //延时函数初始化
    LED_Init();         //初始化与LED连接的硬件接口
    while ( 1 )
    {
        LED = 0;
        delay_ms ( 100 ); //延时300ms
        LED = 1;
        delay_ms ( 100 ); //延时300ms
    }
}

首先使用默认时钟设置,也就是外部8M晶振做为时钟源。LED灯灭100ms,然后再亮100ms。
下来看默认时钟设置的代码:
在 system_stm32f10x.c 文件里面, SystemInit()函数设置时钟。

void SystemInit (void)
{
    /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
    /* Set HSION bit */
    RCC->CR |= (uint32_t)0x00000001;
    /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
    RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
    RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */
    /* Reset HSEON, CSSON and PLLON bits */
    RCC->CR &= (uint32_t)0xFEF6FFFF;
    /* Reset HSEBYP bit */
    RCC->CR &= (uint32_t)0xFFFBFFFF;
    /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
    RCC->CFGR &= (uint32_t)0xFF80FFFF;
#ifdef STM32F10X_CL
    /* Reset PLL2ON and PLL3ON 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值