1. 这里总结一下 SystemInit()函数即上电启动后中设置的默认系统时钟大小:
SYSCLK(系统时钟) | =72MHz |
AHB 总线时钟(使用 SYSCLK) =72MHz |
|
APB1 总线时钟(PCLK1) | =36MHz |
APB2 总线时钟(PCLK2) =72MHz |
|
PLL 时钟 =72MHz
2.关于STM32定时器重要寄存器说明:
1)自动重装载寄存器( TIMx_ARR):(这里所指的重装载是装到影子寄存器,与计数器没关系)该寄存器在物理上实际对应着 2 个寄存器。一个是程序员可以直接操作的,另外一个是程序员看不到的,这个看不到的寄存器在《 STM32参考手册》里面被叫做影子寄存器 ,事实上其实质作用的是影子寄存器。TIMx_CR1 寄存器中 APRE 位的设置 对这两个寄存器是否同步会有影响,当ARPE自动重装载预装载允许位为0值(默认),预装载寄存器值和影子寄存器是连通的(两者之间无缓存),同步更新;而当ARPE位为1值时,预装载寄存器值和影子寄存器是连通的(两者之间存在缓存机制),则只有在每次有“更新事件(UEV)”时,预装载寄存器值才会传到影子寄存器起作用。具体可参参考手册时序图。
2)改变时钟频率当配置完新的预分频器,定时器的时钟是在发生更新后生效
3)查看手册时序图可知,定时器当发生更新事件事,计数器会根据不同模式计数由0(向上模式)或者自动重装载值大小(向下)开始计数
2)UEV事件:(update event) ,即产生更新事件。手册当中说的很详细,简单来讲,就是CR寄存器的UDIS位设置是否是能更新事件(默认0是使能),URS位配置更新事件源。在使能情况下比如定时器溢出时则对应的SR的UIF位会置1。(关于比如UIF更新事件位通串口下状态位一样,其也是中断或者状态查询(但毕竟定时器用查询方式还是感觉没啥用)用的通一个位,这和串口使用TC或者RXNE是一样的道理,我们可通过查库函数实现验证TIM_GetFlagStatus()和TIM_GetITStatus()用的都是SR的同一个位,只不过后者会先检查中断是否使能而已)
3)TIMx_EGR寄存器:这是个实现用软件置位产生各种类型事件的寄存器,与SR不同
4)关于普通定时器内部输入时钟配置下内部时钟分频因子和分频值的关系:
参见手册关于时钟源和时钟图解释,选用内部时钟即对应的APB1时钟,二内部时钟分频因子是对APB1时钟进行分频,而预分频器的时钟就是内部时钟分频后得到的,这是两者的关系。不过一般情况下我们设置内部时钟的分频因子为1
关键字:STM32 系统时钟 定时器的
引用地址:
关于STM32系统时钟和STM32定时器的使用若干注意点
推荐阅读最新更新时间:2024-03-16 15:41
stm32之 GPIO_Remap_SWJ_Disable之后无法使用swd下载 程序解决方法
说明:库文件版本:3.5.0 软件环境:iar for arm 在系统复位的时候默认是开启JTAG与swd的,在点击下载后的2秒内按下复位键即可将程序下载进stm32 注意:在程序里边加入GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE); 来彻底解除限制,或用写寄存器的方式,SWG_CFG 写入000
[单片机]
STM32组合设备实现USB转双串口
串口及其中断初始化 void USART1Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
[单片机]
STM32经keil mdk编译产生的.map文件分析
昨天遇到堆大小不足的问题,扩大Heap的size觉得有必要去分析下整个程序的内存占用的详细情况,仅仅从生成的Code + RO + RW +ZI提示太笼统,无法清楚的看见我写的每一个函数,定义的每一个全局变量、静态变量的具体位置、大小等等,经各路大神的提示,我去仔细研究了下.map文件,上网查阅了相关的资料,本文主要受博主 非著名码农 的启示,原文地址 http://blog.csdn.net/ropai/article/details/7493168。 第一部分 Section Cross Reference 文件引用关系分析 主要是各个源文件生成的模块之间相互引用的关系 如第一句: startup_stm
[单片机]
STM32-中断应用
1、基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。 4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是
[单片机]
STM32学习:串口通讯
前言 本次通过CubeMx+proteus进行stm32串口仿真 具体功能: 1、开机后,向串口1发送“Welcome” 2、串口1接收字节指令“0xa1 ,打开LED1,回传“LED1 OPEN!” 3、串口1接收字节指令“0xa2 ,关闭LED1,回传“LED1 Close!” 4、在串口发送过程中,打开LED2作为发送数据指示灯 一、相关知识点 二、电路搭建与硬件配置 1、proteus电路搭建 1、COMPIM元件 作用:把仿真电路中的数字量映射到计算机的物理端口 接法:将stm32的TX与COMPIM的TX相连,RX与RX相连,而不是像实物那样交叉相连(RX连TX,TX连RX)。 2、VIRTUAL
[单片机]
STM32 IAP 设计实例 (一)
项目需要,需要开发一款手持设备,对产品进行软件升级。现在的产品都是使用STM32,所以可以很方便的应用STM32的 IAP功能对软件进行在线升级。 总体需求就是,主机Master通过CAN接口,发送数据给从机Slave。从机在接收到应用程序APP后,把接收的数据覆盖掉原来的应用程序区。从而实现Master对Slave的在线升级。 这里先介绍IAP,对IAP的整体实现有个了解,方便后续开发。参考了原子STM32开发板,对IAP功能的介绍。 要实现IAP,需要有两个项目代码。第一个称之为Bootloader程序,第二个称之为APP程序。Bootloader负责引导APP程序启动,以及需要在线更新APP时,接收主机发送的APP
[单片机]
proteus与keil Cx51的单片机仿真(定时器方式2应用)
用定时器1方式二计数,每计满100次,将P1.0取反。 电路图: c源程序: #include reg51.h sbit P1_0=P1^0; void main() { TMOD=0X61; TL1=0X9C; TH1=0X9C; TR1=1; for( ; ; ) { do {}while(!TF1); P1_0=!P1_0;TF1=0; } }
[单片机]
毕业设计| STM32家庭健康监测系统
系统框架 系统可以实时监测被测者的心率、体温以及周遭环境的温度,也同时可以通过姿态解算来判断被测者是否摔倒。该系统可以将被测者的心率、体温等数据既在本地显示,也可以通过WI-FI传输至云平台以实现远程显示。当被测者摔倒时会发出蜂鸣声,以便引起周围人向被测者施以援手;当被测者吸烟时则会发出警报直至香烟熄灭,可以让被测者远离不健康的生活习惯。 功能简介 该设计主要功能如下: 1) 实时的采集心率、温度、烟雾浓度等信息; 2) 实时的显示心电图以及温度数值信息; 3) 实现跌倒的判断,并且在跌倒时发出报警; 4) 实现吸烟警告,在吸烟时发出报警; 5) 实现将温度、心率、姿态解算数据、烟雾浓度等发送至云平台; 6) 通过登录云平
[单片机]