STM32F103RCT6开发板M3单片机教程05--RCC配置
前言
首先了解一下是什么RCC(Reset Clock Control),复位和时钟控制(RCC)
小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx, STM32F102xx和STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xx, STM32F102xx和STM32F103xx微控制器。
大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控制器。
除非特别说明,本章节描述的模块应用于整个STM32F103xx微控制器系列,因为我们使用是STM32F103RCT6开发板是mini最小系统板。
本教程使用是(光明谷SUN_STM32mini开发板)
一、复位
STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。
1.1 系统复位
系统复位将复位除时钟控制寄存器CSR中的复位标志和备份区域中的寄存器以外的所有寄存器
当以下事件中的一件发生时,产生一个系统复位:
1. NRST管脚上的低电平(外部复位)
2. 窗口看门狗计数终止(WWDG复位)
3. 独立看门狗计数终止(IWDG复位)
4. 软件复位(SW复位)
5. 低功耗管理复位
可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源。
软件复位
通过将Cortex™-M3中断应用和复位控制寄存器中的SYSRESETREQ位置’1’,可实现软件复位。请参考Cortex™-M3技术参考手册获得进一步信息。
低功耗管理复位
在以下两种情况下可产生低功耗管理复位:
1. 在进入待机模式时产生低功耗管理复位:
通过将用户选择字节中的nRST_STDBY位置’1’将使能该复位。这时,即使执行了进入待机模式的过程,系统将被复位而不是进入待机模式。
2. 在进入停止模式时产生低功耗管理复位:
通过将用户选择字节中的nRST_STOP位置’1’将使能该复位。这时,即使执行了进入停机模式的过程,系统将被复位而不是进入停机模式。
关于用户选择字节的进一步信息,请参考STM32F10xxx闪存编程手册。
1.2 电源复位
当以下事件中之一发生时,产生电源复位:
1. 上电/掉电复位(POR/PDR复位)
2. 从待机模式中返回
电源复位将复位除了备份区域外的所有寄存器。 (见图3)
图中复位源将最终作用于RESET管脚,并在复位过程中保持低电平。复位入口矢量被固定在地
址0x0000_0004。更多细节,参阅stm32f10xxx参考手册表36。
1.3 备份域复位
当以下事件中之一发生时,产生备份区域复位。
1. 软件复位,备份区域复位可由设置备份区域控制寄存器RCC_BDCR中的BDRST位产生。
2. 在VDD和VBAT两者掉电的前提下, VDD或VBAT上电将引发备份区域复位。
二、 时钟
三种不同的时钟源可被用来驱动系统时钟(SYSCLK):
● HSI振荡器时钟
● HSE振荡器时钟
● PLL时钟
这些设备有以下2种二级时钟源:
● 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。 RTC用于从停机/待机模式下自动唤醒系统。
● 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。
当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。
复位和时钟控制 STM32F10xxx参考手
1.3 备份域复位
当以下事件中之一发生时,产生备份区域复位。
1. 软件复位,备份区域复位可由设置备份区域控制寄存器RCC_BDCR中的BDRST位产生。
2. 在VDD和VBAT两者掉电的前提下, VDD或VBAT上电将引发备份区域复位。
更多细节,参阅 STM32F10xxx参考手册
[size=14.6667px]
RCC设置流程: 1、将RCC寄存器重新设置为默认值 RCC_DeInit 2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON) 3、等待外部高速时钟晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp(); 4、设置AHB时钟 RCC_HCLKConfig 5、设置高速APB时钟 RCC_PCLK2Config 6、设置低速APB时钟 RCC_PCLK1Config 7、设置PLL RCC_PLLConfig 8、打开PLL RCC_PLLCmd(ENABLE) 9、等待PLL工作 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET) 10、设置系统时钟 RCC_SYSCLOCKConfig 11、判断是否PLL是系统时钟 while(RCC_GetSYSCLKSource()!=0x08) 12、打开要使用的外设时钟 RCC_APB2PerphClockCmd()/RCC_APB1PeriphClockCmd()
了解基础知识下面实操吧
以前我们其实也有配置,但不具体,基本都本MCU默认的配置,真正用好STM32,还得熟悉RCC.
程序编码
复制上节工程文件夹打开(这个方法比较方便)
- 码字:编辑main.c, 在上节基础上增加RCC配置函数。
- 编译调试
保存直接编译,发现编译出错,提示FLASH_PrefetchBufferCmd 和 FLASH_SetLatency函数未定义。解决方法添加库文件stm32f10x_flash.c
重新编译,通过。
调试
方法不再重复,经过前两节练习,大家应该是会了.
效果与前一节是一样,只是我们多了RCC配置。现在效果一样,但是真正项目里RCC是配置不一样,是致命的。
课后作业
改变CPU运行频率
工程源码
(回复后,可查看 下载)
|