STM32F103基本定时器使用

发布者:BlissfulJourney最新更新时间:2021-12-28 来源: eefocus关键字:STM32F103  基本定时器 手机看文章 扫描二维码
随时随地手机看文章

  STM32F103单片机中定时器分为3种,高级定时器、通用定时器、基本定时器。


  基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。这2个定时器是互相独立的,不共享任何资源。


TIM6和TIM7定时器的主要功能包括:


16位自动重装载累加计数器

16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值分频

触发DAC的同步电路

在更新事件(计数器溢出)时产生中断/DMA请求

  这个可编程定时器的主要部分是一个带有自动重装载的16位累加计数器,计数器的时钟通过一个预分频器得到。软件可以读写计数器、自动重装载寄存器和预分频寄存器,即使计数器运行时也可以操作。


  通过上面的介绍可以看出,基本定时器的功能很简单,就只是提供一个简单的定时功能。下面通过代码演示基本定时器的定时功能:


// 中断优先级配置

static void TIM6_NVIC_Config(void)

{

    NVIC_InitTypeDef NVIC_InitStructure; 

  

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);   // 设置中断组为0

    NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn ; // 设置中断来源

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 设置主优先级为 0   

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // 设置抢占优先级为3

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

}

/*

 * 注意:TIM_TimeBaseInitTypeDef结构体里面有5个成员,TIM6和TIM7的寄存器里面只有

 * TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的时候只需初始化这两个成员即可,

 * 另外三个成员是通用定时器和高级定时器才有.

 *-----------------------------------------------------------------------------

 *typedef struct

 *{ TIM_Prescaler            都有

 * TIM_CounterMode      TIMx,x[6,7]没有,其他都有

 *  TIM_Period               都有

 *  TIM_ClockDivision        TIMx,x[6,7]没有,其他都有

 *  TIM_RepetitionCounter    TIMx,x[1,8,15,16,17]才有

 *}TIM_TimeBaseInitTypeDef; 

 *-----------------------------------------------------------------------------

 */

static void TIM6_Mode_Config(u16 arr, u16 psc)

{

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); // 开启定时器时钟,即内部时钟CK_INT=72M

    TIM_TimeBaseStructure.TIM_Period = arr; // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断   

    TIM_TimeBaseStructure.TIM_Prescaler= psc;   // 时钟预分频数为

      //TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; // 时钟分频因子 ,基本定时器没有,不用管

      //TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; // 计数器计数模式,基本定时器只能向上计数,没有计数模式的设置

     //TIM_TimeBaseStructure.TIM_RepetitionCounter=0; // 重复计数器的值,基本定时器没有,不用管   

    TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); // 初始化定时器

    TIM_ClearFlag(TIM6, TIM_FLAG_Update);         // 清除计数器中断标志位

    TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);     // 开启计数器中断

    TIM_Cmd(TIM6, ENABLE);                                // 使能计数器

}


void TIM6_Init(void)

{

TIM6_NVIC_Config();

TIM6_Mode_Config(10-1,72-1);

}


void  TIM6_IRQHandler ( void )

{

    if ( TIM_GetITStatus( TIM6, TIM_IT_Update ) != RESET )

    {

        LED0=!LED0;

        TIM_ClearITPendingBit( TIM6, TIM_FLAG_Update );

    }

}


  基本定时器的初始化高级定时器和通用定时器简单很多,只需要设置定时器的周期值和时钟分频系数就可以了。如果要使用中断功能时,需要设置NVIC寄存器,这个寄存器主要是用来设置中断优先级。


int main(void)

{

    u8 key = 0;

    delay_init();       //延时函数初始化

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    LED_Init();

    KEY_Init();  

    TIM6_Init();    

    while(1)

    {      

    }

}


  在主函数中调用定时器初始化函数后,定时器就开始工作了。定时器时间计算公式为(arr+1)*(psc+1)/72MHz,将参数9、71带入公式后,计算出定时器的定时周期值为10us。

关键字:STM32F103  基本定时器 引用地址:STM32F103基本定时器使用

上一篇:STM32F103自定义的printf函数的实现
下一篇:STM32F103通用定时器使用

推荐阅读最新更新时间:2024-11-11 17:13

基于STM32F103RB单片机的、细分度可调的步进电机驱动器设计
步进电机是一种运用广泛的控制电机,其特征是不使用位置反馈回路就能进行速度控制及定位控制,即所谓的电机开环控制。相对于伺服电机,步进电机有着成本低廉,控制简单等优点,尤其是两相混合式步进电机,在工业运动控制系统中有着广泛的应用。然而,传统的驱动方式,比如单电压驱动、高低电压驱动、斩波恒流驱动等等,虽然已经应用十分成熟,但是只限于低速运行,并且细分度一般限制在1/2步距,无法很好消除低频振荡,以及定位精度差等缺点。细分驱动的出现很好地弥补了这一缺点。 常见的细分控制器一般由MCU、专用逻辑驱动芯片以及功率驱动模块组成,这样的驱动器虽然能满足多细分驱动,但由于细分数量和效果会受到逻辑驱动芯片的影响,并且无法调整细分数和限流值、从
[单片机]
基于<font color='red'>STM32F103</font>RB单片机的、细分度可调的步进电机驱动器设计
采用stm32f103rc的STM32最小系统
采用stm32f103rc的STM32最小系统详细解析图,如下: 一、STM32主电路 二、USB转串口下载电路 注:此图中二极管D1不用接! 三、SWD模式调试仿真电路 四、指示电路 五、整体电路 注:此图中二极管D1不用接!
[单片机]
采用<font color='red'>stm32f103</font>rc的STM32最小系统
STM32F103程序设计-9-USB转TTL串口(收发)
在上一个例程USB转TTL串口(printf)的基础上进行修改。主要修改了以下几点内容: 1.由于不要使用printf了,所以把PUTCHAR_PROTOTYPE的定义部分去掉。 2.从官网例程中找到串口收发数据的代码,并融合到新定义的串口收、发数据的函数中。 例程中串口发数据的代码(已进行细微改动): /* Send one byte from USARTy to USARTz */ USART_SendData(USART1, data); /* Loop until USARTy DR register is empty */ while(USART_GetFlagStatus(USART1, USART_FLAG_TX
[单片机]
stm32f103c8t6引脚图及功能
STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制器,程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ 85°C。 引脚图与功能 STM32F103C8T6引脚图 STM32F103C8T6功能表
[单片机]
<font color='red'>stm32f103</font>c8t6引脚图及功能
不同stm32f103芯片内部外设资源
由表可知,芯片内部的外设资源除了跟stm32f103后面的第一个字母有关外,还和flash的大小有关。上面的表中只有一部分,具体的可以参考Keil的芯片型号选择部分。 下面是stm32f103c8t6的资源: TIM1_BRK_IRQn = 24, TIM1_UP_IRQn = 25, TIM1_TRG_COM_IRQn = 26, TIM1_CC_IRQn = 27, TIM2_IRQn = 28, TIM3_IRQn = 29, TIM4_IRQn 可以知道c8t6有一个高级定
[单片机]
不同<font color='red'>stm32f103</font>芯片内部外设资源
STM32F103ZET6 时钟(2)—— 代码篇
基于特定的开发板上的时钟策略: 倍频/分频系数需要在使能 PLL 之前进行配置,所以需要在 Open PLL 之前将所有系统的时钟分频器系数以及PLL的倍频系数配置好。整个时钟的配置流程如下所示: (1) 开启HSE,等待HSE稳定 (2) 设置APB2、APB1、AHB分频系数 (3) 设置PLL的时钟来源和PLL的倍频系数 (4) 开启PLL,等待PLL稳定 (5) 设置SYSCLK源为 PLL 的输出,读取时钟切换状态,确保PLLCLK被选为系统时钟 (1) OSC_IN/OSC_OUT 上外接 8M 晶振。要使用外接晶振,上电后(默认使用 8M 的HSI),首先需要使能 HSE,位于RCC_CR寄存器的 bi
[单片机]
stm32F103的systick时间不准终于找到原因了
主函数已经定义SysTick_Config(72000000/1000);但是中断void SysTick_Handler(void) 中PIO引脚闪烁的时间总感觉不对,最后在sdk中观察systick寄存器发现 ctrl一直为0x00000003,本来默认的是系统时钟/8为systick的时钟,我已经在主函数中更改为SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);了, 但是CTRL就是没有改变,看SysTick_Config,“systick_ctrl _clksource_msk”(红色部分)已经指出需要添加SysTick_CLKSource_HCLK,害得我搞了一晚
[单片机]
<font color='red'>stm32F103</font>的systick时间不准终于找到原因了
STM32F103做从机SPI通信SPI3中断异常
在做AM335D板子与STM32F103使用SPI通信时,需要用到STM32的从机模式,所以特别对于ST的从机模式进行了研究,由于硬件上使用的是STM32F103的SPI3,所以过程中遇到了一点麻烦,这里记录一下过程,以备查阅: 使用SPI3通信时,从机时钟产生不了中断,经过查阅资料,是因为spi3的nss口与JTAG有共用引脚,所以配置错误会导致SPI3无法使用。需要注意以下两点就可以了: 1.开启GPIO时钟的同时,开启AFIO时钟,如下: RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE ); 2.关闭JTAG功能,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved