【STM32电机方波】记录3——TIM1时基初始化配置

发布者:江上HZ最新更新时间:2018-10-05 来源: eefocus关键字:STM32  TIM1  初始化配置 手机看文章 扫描二维码
随时随地手机看文章

定时器分类 :
STM32F1x 系列中,除了互联型的产品,共有 8 个定时器,分为基本定时器,通用定时器和高级定时器。

基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。

通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部 IO。

高级定时器 TIM1/8是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,每个定时器有 8 个外部 IO。 

【STM32电机方波】记录3——TIM1时基初始化配置



高级定时器TIM1的库函数:

【STM32电机方波】记录3——TIM1时基初始化配置


定时器TIM1时基结构体缺省值:

{

TIM1_Period =TIM1_Period_Reset_Mask;// 定时器周期,设定自动重载寄存器TIMx_ARR 的值

    TIM1_Prescaler = TIM1_Prescaler_Reset_Mask;//预分频器,设定TIMx_PSC 寄存器的值,

    TIM1_CKD =TIM1_CKD_DIV1;               // 时钟分频 

    TIM1_CounterMode = TIM1_CounterMode_Up; //计数模式(高级定时器有5种模式)

    TIM1_RepetitionCounter = TIM1_RepetitionCounter_Reset_Mask;//重复计数器 

}


TIM1 时基初始化及中断子程序配置:

void TIM1_TimeBaseInit(u16 arr,u16 psc)

{

 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //TIM1时基结构体

 NVIC_InitTypeDef NVIC_InitStructure;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //①时钟 TIM1 使能

 

 TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器ARR周期的值

 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟频率除数的预分频值

 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割

 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数

 TIM_TimeBaseStructure.TIM_RepetitionCounter=0; //计数频率为72MHz

 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //②初始化 TIM1

 TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //③允许更新中断  //中断优先级 NVIC 设置

 

 NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; //TIM1 中断

 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 1 级

 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级 3 级

 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能

 NVIC_Init(&NVIC_InitStructure); //④初始化 NVIC 寄存器


 TIM_Cmd(TIM1, ENABLE); //⑤使能 TIM1

}

void TIM1_IRQHandler(void) //TIM1 中断

{

    if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) //检查 TIM1 更新中断发生与否

   {

      TIM_ClearFlag(TIM1, TIM_IT_Update ); //清除 TIM1 更新中断标志

        ………………………………………………………………

    }

}

发生中断时间=(TIM_Prescaler+1)* (TIM_Period+1)/FLK


基本定时器的核心是时基,通用计时器和高级定时器也有。 对于高级定时器TIM1 来说:

1、时钟源 

定时器时钟TIMxCLK,即内部时钟CK_INT,经APB2预分频器后分频提供,如果APB2 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB2 预分频的系数是 2,即 PCLK2=36M,所以定时器时钟 TIMxCLK=36*2=72M 。 

2、计数器时钟 

定时器时钟经过 PSC 预分频器之后,即 CK_CNT,用来驱动计数器计数。PSC 是一个16 位的预分频器,可以对定时器时钟 TIMxCLK 进行 1~65536 之间的任何一个数进行分频。 

具体计算方式为:CK_CNT=TIMxCLK/(PSC+1)。 

3.计数器 

计数器 CNT 是一个 16 位的计数器,只能往上计数,最大计数值为 65535。当计数达到自动重装载寄存器的时候产生更新事件,并清零从头开始计数。 

4、自动重装载寄存器 

自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。 

5. 定时时间的计算 

定时器的定时时间等于计数器的中断周期乘以中断的次数。计数器在 CK_CNT 的驱动下,计一个数的时间则是 CK_CLK 的倒数,等于:1/(TIMxCLK/(PSC+1)),产生一次中断的时间则等于:1/(CK_CLK * ARR)。如果在中断服务程序里面设置一个变量 time,用来记录中断的次数,那么就可以计算出我们需要的定时时间等于: 1/CK_CLK *(ARR+1)*time。 



BLCD电机的起动:

按下功能键,令高级定时器TIM1 输出 PWM 方波、进入TIM1中断,通过两相通电法测定初始状态的电机。具体的操作是给任意两相通电,并控制电机电流不致过大,启动电机做一次换向,通电一段时间后,转子就会转到与该通电状态对应的预知位置,完成转子的定位

PWM输出:

PWM的配置在其结构体 TIM_Period(周期设定)、TIM_Prescaler(分频)、TIM_OCMode(输出模式)、TIM_OutputNState(互补输出状态)、TIM_Pulse(捕获比较器的值,即设定PWM的占空比)等的配置。另外对于BLDC来说,PWM波形使用TIM1产生,1、2、3三个通道产生3路PWM驱动六个MOSFET,4通道用于ADC采样,而ADC1扫描3个通道获取反电动势,其扫描结果由DMA传输。



关键字:STM32  TIM1  初始化配置 引用地址:【STM32电机方波】记录3——TIM1时基初始化配置

上一篇:【STM32电机方波】记录4——PWM输出配置
下一篇:【STM32电机方波】记录2——NVIC中断基本设置

推荐阅读最新更新时间:2024-03-16 16:14

STM32 USB 使用芯片内部flash模拟U盘
这次是实现一个使用STM32内部的flash模拟一个U盘。我使用的STM32芯片是STM32F103ZE,该芯片有512K的内部flash,本次工程,我准备用最后的400K空间来模拟一个U盘。本次的工程在之前用NAND或SD卡模拟U盘的工程基础上进行修改。 首次要做的是在外设库组中添加stm32f10x_flash.c文件,因为涉及到内部flash,所以必须添加此文件。接下去,需要修改的文件只有mass_mal.c和memory.c两个了。 先来讲讲memory.c,这个文件修改量很小。在函数的前面,我们可以看到有个:uint32_t Data_Buffer ;数组的定义,该数组的数组元素个数,跟大家所使用的存储器的块大小
[单片机]
STM32 CAN总线筛选器的四种情况
STM32CAN控制器每个筛选器组由两个32位的寄存器组成。 根据所需位宽的不同,各个筛选器可配置成16位或32位模式(如下图,当FSCx=1为32位模式,FSCx=0时为16位模式)。同时,筛选器的模式可配置成掩码模式和列表模式(FBMx=0为掩码模式,FBMx=1为列表模式)。 掩码模式:对报文ID的每一位可选择必须相同和不管它。 列表模式:只给出接收的ID,其它的一概不接收。 下面将这四种情况分别介绍一下: 1、1个32位筛选器——掩码模式 第一个筛选器写入报文ID,第二个筛选器规定对应的每个位是检查它(置1)还是不管它(置0)。 例如,第一个筛选器设置为0x0000,这时候如果第二个筛选器设置0xFFFF,就意
[单片机]
<font color='red'>STM32</font> CAN总线筛选器的四种情况
stm32最小系统完整版
采用stm32f103rc的 STM32 最小系统详细解析图,如下: 一、 STM32 主电路 二、USB转串口下载电路 注:此图中二极管D1不用接! 三、SWD模式调试仿真电路 四、指示电路 五、整体电路 注:此图中二极管D1不用接!
[单片机]
<font color='red'>stm32</font>最小系统完整版
STM32】HAL库 STM32CubeMX教程九---ADC
前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/ STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: ACD工作原理 STM32CubeMX创建ADC例程 HAL库定时器ADC函数库 什么是ADC Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。 典型的模拟数字
[单片机]
【<font color='red'>STM32</font>】HAL库 STM32CubeMX教程九---ADC
STM32的外部中断EXTI及NVIC中断优先级介绍
一、什么是中断? 打断当前的操作,执行中断需要做的事情。 中断的作用:中断机制不仅赋予了系统处理意外情况的能力,就可以“同时”完成多个任务,提高了并发“处理”能力。 和线程的区别:线程是同时执行多个任务,中断是停下来去执行其他的(注意优先级),执行完了再回来执行, 定时器才相当于线程,定一个时间,每到这个时间执行一次 二、中断概述 STM32F4并没有使用CM4内核的全部东西,而是只用了它的一部分。 STM32F40xx/STM32F41xx总共有92个中断 STM32F42xx/STM32F43xx则总共有96个中断 STM32F40xx/STM32F41xx的92个中断里面,包括10个
[单片机]
<font color='red'>STM32</font>的外部中断EXTI及NVIC中断优先级介绍
A7139 无线通信驱动(STM32) 增加FIFO扩展模式
A7139 拥有电磁波唤醒以及10mW的发射功率,非常容易实现长距离通信,目前测试有障碍物可以轻松达到300m以上. 通过几天的调试,目前可以发送任意大小的数据包,大小为1-16KB,全部使用中断收发,效率极高。 增加波特率设置2Kbps-100Kbps任意设置 增加通信信道设置0-255 增加发送功率设置0-7 底层代码 /************************************************************************************************************* * 文件名: A7139.c * 功能: STM32 A7139
[单片机]
A7139 无线通信驱动(<font color='red'>STM32</font>) 增加FIFO扩展模式
STM32_DMA 标准初始化设置解释
DMA 全称是:Direct Memory Access;根据 ST 公司提供的相关信息,DMA是STM32中一个独立于 Cortex-M3 内核的模块,有点类似于 ADC、PWM、TIMER 等模块;主要功能是起通信“桥梁”的作用,可以将所有外设映射的寄存器“连接”起来,这样就可以高速访问各寄存器,其传输不受 CPU 的支配,传输还是双向的;例如,从“表面”上看,它可以将 flash 中的数据与储存器中变量建立通讯,还可以将某一个外设的寄存器或缓冲器与另一个外设的寄存器或缓冲器建立双向通讯,有点像把外设硬件之间用“导线”连接在一起了。其间的通讯不占 CPU 资源,访问速度快,对于实时性强的应用将是一个很好的选择。下面代码是一个标
[单片机]
基于STM32模拟UART串口通信
UART工作原理 UART即通用异步收发器,是一种串行通信方式。数据在传输过程中是通过一位一位地进行传输来实现通信的,串行通信方式具有传输线少,成本底等优点,缺点是速度慢。串行通信分为两种类型:同步通信方式和异步通信方式。 但一般多用异步通信方式,主要因为接受和发送的时钟是可以独立的这样有利于增加发送与接收的灵活性。异步通信是一个字符接着一个字符传输,一个字符的信息由起始位、数据位、奇偶校验位和停止位组成。 每一个字符的传输靠起始位来同步,字符的前面一位是起始位,用下降沿通知收方开始传输,紧接着起始位之后的是数据位,传输时低位在前高位在后,字符本身由5~8位数据位组成。 数据位后面是奇偶校验位,
[单片机]
基于<font color='red'>STM32</font>模拟UART串口通信
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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