打印
[MM32软件]

时钟源

[复制链接]
79|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wilhelmina2|  楼主 | 2024-12-25 20:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在灵动官网下载的示例程序系统时钟源是通过system_MM32F031x4x6_q.c中的宏选择的,如下图:

  • SYSCLK_FREQ_HSE:选择为外部高速时钟,默认是8M
  • SYSCLK_HSI_48MHz选择为内部时钟(这一款单片机的默认内部时钟就是48M,跟ST不同)
  • SYSCLK_HSI_72MHz选择并配置时钟为内部72M

如果是使用的是外部时钟8M,官方示例程序是没有倍频到48M的,所以系统时钟就是8M,如果你需要倍频到48M,使用我这个函数替换掉原来的即可:

static void SetSysClockToHSE(void){        /* 使能HSE */        RCC->CR |= RCC_CR_HSEON;                /* 等待HSE准备就绪 */        while(!(RCC->CR & RCC_CR_HSERDY));                /* 启用预取缓冲区并设置闪存延迟 */        FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY_1;                /* 设置HCLK时钟分频为1分频 */        RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;                /* 设置PCLK1时钟分频1分频 */        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;                /* 设置PCLK2时钟分频1分频 */        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;                /* 设置HSE作为PLL输入时钟 */        RCC->CFGR |= (1 << 16);                /* 设置HSE不分频输入PLL */        RCC->CFGR &= (~(1 << 17));                /* 设置PLL倍频6倍到48M */        RCC->CR &= (~(1 << 26));        RCC->CR |= (5 << 26);            // PLLDN = 5        RCC->CR &= (~(1 << 20));         // PLLDM = 0                /* 使能PLL */        RCC->CR |= (1 << 24);                /* 等到PLL就绪 */        while(((RCC->CR & (1 << 25)) == 0));                /* 设置PLL输出作为系统时钟 */        RCC->CFGR &= (~RCC_CFGR_SW);        RCC->CFGR |= RCC_CFGR_SW_1;                /* 等待系统时钟切换就绪 */        while(((RCC->CFGR & (RCC_CFGR_SW_1 << 2)) == 0));}

还一个问题是我使用ST-LINK的SWD模式下载程序时,第一次下载成功,但是无法下载第二次,并且程序没有运行,按住复位、下载程序、瞬间松开复位,执行这三个步骤才可以下载,后来我换成了DAP仿真器,没有上述问题。

我还准备了一个工程模板,如下图:



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

1307

帖子

1

粉丝