STM32定时器学习
高级寄存器TIM1和TIM8
通用寄存器TIM2,TIM3,TIM4,TIM5
基本寄存器TIM6,TIM7
通用寄存器是由 时钟、时基单元、输入、输出组成。
计数器时钟可以由下列时钟源提供:
内部时钟(CK_INT)
外部时钟模式1:外部输入脚(TIx)
外部时钟模式2:外部触发输入(ETR)
内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。
TIM2-7的内部时钟来自于低速APB1总线,如果APB1分频系数为1,则定时器时钟等于APB1的时钟,若不是,则定时器时钟为APB1时钟的两倍。
TIM1和TIM8的内部时钟来自于APB2。
TIMX_PSC预分频寄存器是把时钟频率进行1~65536进行任意值分频。
CK_INT---->预分频寄存器---->CK_CNT
那么一个时钟周期的时间
T=1CK_CNT=PSC[15:0]+1Fck_pscT=1CK_CNT=PSC[15:0]+1Fck_psc
由于计数器溢出会产生一次中断,故
T(溢出时间)=(ARR+1)*(PSC+1)/F(ck_psc)
上述公式为何计数器ARR和时钟分频PSC都要加1,因为这两个值是配置在寄存器中的,其实从0开始计数,故要加1。
一般使用默认系统时钟72MHz,则F(ck_psc)=72MHz
关键字:STM32 通用定时器 中断
引用地址:
STM32学习之通用定时器中断
推荐阅读最新更新时间:2024-03-16 16:19
MSP430学习笔记-低功耗与中断系统
年前忙于项目都有段时间没更新博客了,趁年后有点时间更新了一篇,在这篇学习笔记里我们来探讨一下MSP430系列单片机的低功耗模式与中断系统,从下一篇开始,将会开始更新MSP430外设部分的学习笔记。 一、低功耗模式 MSP430系列单片机的一大特色便是其优秀的低功耗运行能力,据说德州仪器曾经演示过使用水果电池来作为MSP430的电源驱动MSP430正常工作,足以见得其功耗之低。 1、低功耗设计的三个基本原则 在介绍低功耗模式的配置之前,先明确低功耗设计的三个基本原则,即:1、工作频率与功耗成正比;2、工作电压与功耗成正比;3、工作模块数与功耗成正比。通过这三个原则我们可以得出以下结论:为了尽量降低单片的功耗,应在满足设计需求
[单片机]
STM32 USART 串口简单使用
STM32 的库实在强大~!函数长的像句子...... 好了开始了: 使用查询方式的USART: 设置时钟: RCC_APB2Periph_AFIO功能复用IO时钟 RCC_APB2Periph_GPIOAGPIOA时钟 RCC_APB2Periph_USART1 USART1时钟 你可以用 //使能串口1,PA,AFIO总线RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_USART1,ENABLE); 或直接 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AL
[单片机]
MSP430F5438学习笔记 TA1溢出中断加比较匹配中断
// 时钟默认情况 // FLL时钟 FLL选择 XT1 // 辅助时钟 ACLK选择 XT1 32768Hz // 主系统时钟 MCLK选择 DCOCLKDIV 8000000Hz // 子系统时钟 SMCLK选择 DCOCLKDIV 8000000Hz // TA1选择ACLK,最大计数值为65535 // 比较匹配值为 32768 // 在TIMER1_A0_VECTOR中 CCR0中断 P4.0 = 0 // 在TIMER1_A1_VECTOR中 OVF中断 P4.0 = 1 // 实际效果 P4.0 1s为高电平,1s为低电平,交替进行 #include msp430.h
[单片机]
基于STM32开发板的UART收发空闲中断设计
有人在使用STM32的UART收发并开启空闲中断时,有时会发现空闲中断相比预期多进一次的情况。比方,本来以为只会进3次空闲中断的结果进了4次;或者说根本没开启接收,一使能空闲中断就立即进一次中断服务程序;有时即使在使能空闲中断之前还特意做了空闲事件标志的清零也会发生类似情况。 下面我找了块STM32开发板,选择USART1做自发自收的测试。也的确可以重现问题。 下面是我的测试代码的main程序: #define Length (25) uint8_t Data_RX ={0}; uint32_t UART_Rx_Len; //the Number of received data by DMA uint32_t UART_
[单片机]
stm32 pwm实现过程
如果要从某IO端口输出PWM脉冲,相应的工作如下: 1.需要一个定时器实现周期循环计数 2.设置每个循环周期的比较值,从而实现占空比 3.配置某个IO口味定时器的PWM复用功能 例如:实现STM32 的 GPIOB_5 管脚输出PWM脉冲: (stm32的定时器都有4个通道,PWM有4种模式,主要区别在于高低电平变化的时刻不同) 1.查询芯片手册,GPIOB_5 的复用功能对应定时器3的通道二 2.设置GPIOB_5 端口为复用推挽输出功能 3.设置定时器3的对应的GPIO复用重映射,即可以将定时器的4个通道,通过映射方式设置到不同的io管脚,这里选择部分映射后,通道二就映射到了GPIOB_5 管脚 4.设置定时器3工作在重载
[单片机]
ubuntu中安装配置STM32开发环境
笔者做嵌入式开发的,主要用到linux系统来做开发,有时候遇到既要开发arm linux,又要挂载MCU的情况(主要是STM32这款),这两个芯片跨平台,指令不兼容。以前开发STM32是在windows下的IDE,使用keil或者IAR来开发,自从搞arm linux以来,很少开windows系统,两个系统切来切去着实麻烦。这篇文章主要针对长期使用Linux系统的用户,有什么不对的地方,欢迎指正。 接下教教大家怎么在linux下部署STM32开发环境 首先安装一个stm32cubemx,该软件可以在st官网下载,要注册账号,还要搞邮件的乱七八糟的步骤就不说了,自行解决 下载下来的文件中就用到下面两个文件 Setup
[单片机]
STM32串口配置(基于uC/OS)
在uC/OS下,串口配置与不使用uC/OS基本相同,但中断处理有些差别。在uC/OS下取消了固件库中的stm32f10x_it.c文件,去而代之的是app_vect_v5.c. 下面是几个中断处理的函数: bsp_int.c提供几个关键的中断操作函数: void BSP_IntDis (CPU_DATA int_id) //关闭指定中断 void BSP_IntDisAll (void) //关闭所有中断 void BSP_IntEn
[单片机]
51单片机-中断
#include <reg52.h> #include <intrins.h> unsigned int dd, i; void key() interrupt 0{ if(i == 0) P2 = dd; else{ dd = _crol_(dd,1); P2 = dd; } i++; } void main(){ EA = 1; //中断允许总控制位使能 EX0 = 1; //外部中断0中断允许位 IT0 = 1
[单片机]