1、单片机为STM32F103最快运行速度72MHz,系统默认使用8MHz外部时钟晶振,如果硬件采用24MHz晶振,软件就需要修改时钟配置,修改方法如下,我们用的硬件为STM32F10X_MD,并不是STM32F10X_CL,在static void SetSysClockTo72(void)函数中:
#ifdef STM32F10X_CL
// Configure PLLs ------------------------------------------------------
// PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz
// PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz
RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
// Enable PLL2
RCC->CR |= RCC_CR_PLL2ON;
// Wait till PLL2 is ready
while((RCC->CR & RCC_CR_PLL2RDY) == 0)
{
}
// PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz
RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
RCC_CFGR_PLLMULL9);
#else
// 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);
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL3);
#endif // STM32F10X_CL
2、单片机为STM32F100最快运行速度24MHz,系统默认使用8MHz外部时钟晶振,如果硬件采用24MHz晶振,软件就需要修改时钟配置,修改方法如下,我们用的硬件为STM32F10X_MD_VL,并不是STM32F10X_CL,在static void SetSysClockTo24(void)函数中:
#ifdef STM32F10X_CL
// Configure PLLs ------------------------------------------------------
// PLL configuration: PLLCLK = PREDIV1 * 6 = 24 MHz
RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
RCC_CFGR_PLLMULL6);
// PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz
// PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz
RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10);
// Enable PLL2
RCC->CR |= RCC_CR_PLL2ON;
// Wait till PLL2 is ready
while((RCC->CR & RCC_CR_PLL2RDY) == 0)
{
}
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
// PLL configuration: = (HSE / 2) * 6 = 24 MHz
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
//RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLMULL6); //8MHz外部晶振
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLMULL3); //24MHz外部晶振
#else
// PLL configuration: = (HSE / 2) * 6 = 24 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_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL6); //8MHz外部晶振
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL3); //24MHz外部晶振
#endif // STM32F10X_CL
3、修改MDK编译环境
把原本编译STM32F103的keil工程修改为STM32F100的工程需要修改工程配置,如下:
上一篇:stm32库函数在gcc下的开发环境配置完成
下一篇:Linux下如何搭建stm32开发环境(一)
推荐阅读最新更新时间:2024-03-16 16:16
设计资源 培训 开发板 精华推荐
- 助推电动时代,与英飞凌一起探索电动汽车三大产品技术
- 【TI.com线上采购专场——智能楼宇篇】畅聊火爆的智能电子锁、可视化门铃、智能传感器和网络摄像头方案
- 邀请好友加入19国赛交流群,瓜分千元现金大礼!
- 有奖直播|TI毫米波雷达在汽车领域的最新应用
- ADI•世健工业嘉年华——电子书下载 活动开始啦
- 电源情报站 MPS小程序干货推荐,下载有好礼!
- Follow me第3期来袭,与得捷一起解锁Seeed Studio XIAO ESP32C3!
- 免费申请 | DFRobot盖革计数器模块
- 有奖问答|ADI应用之旅——烟雾检测篇
- 答题赢礼! | 如何利用PI Expert 电源设计工具快速搭建PD充电器