stm32 高级定时器1配置注意

发布者:DreamyEclipse最新更新时间:2017-09-26 来源: eefocus关键字:STM32  高级定时器 手机看文章 扫描二维码
随时随地手机看文章

void TIM1_Int_Init(u16 arr,u16 psc)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

NVIC_InitTypeDef NVIC_InitStructure;

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

//定时器 TIM1 初始化

TIM_TimeBaseStructure.TIM_Period = 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; //高级定时器1是用定时器功能配置这个才可以是正常的计数频率一开始的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_UP_IRQHandler(void) //TIM1 中断

{

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

{

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

LED1=!LED1;

}

}

上面红字必须注意 因为高级定时器的时基是四个 比通用定时器多一个:





顺便再来一个通用定时器的配置:

void TIM4_Int_Init(u16 arr,u16 psc)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

NVIC_InitTypeDef NVIC_InitStructure;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能

//定时器TIM4初始化

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值

TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值

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

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

TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位

TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能指定的TIM4中断,允许更新中断


//中断优先级NVIC设置

NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; //TIM3中断

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

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

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

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



TIM_Cmd(TIM4, ENABLE); //使能TIMx

}

//定时器4中断服务程序

void TIM4_IRQHandler(void) //TIM3中断

{

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

{

TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); //清除TIMx更新中断标志

LED0=!LED0;

// Get_Angle();

}

}


关键字:STM32  高级定时器 引用地址:stm32 高级定时器1配置注意

上一篇:stm32f103 adc采集 程序配置
下一篇:stm32f103 pwm模式配置总结

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

STM32的ADC编程方法总结
这里的ADC转换也来使用DMA---这个也是STM32的ADC转换最常见的方式。 第一步是了解STM32的ADC对应的GPIO口如下图不用记住,可以查询,我是将它剪下来粘贴到书本的相应章节! 第二步是配置相应ADC转换的GPIO口这里使用PC0--PC1 static void ADC1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //打开DMA1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 “ RCC_APB
[单片机]
STM32单片机-增量式PID
一、什么是增量式PID 虽然PID不是什么牛逼的东西,但是真心希望以后刚刚接触这块的人能尽快进入状态。特地分享一些自己如何实现的过程。 PID控制算法介绍与C程序实现 首先说说增量式PID的公式,这个关系到MCU算法公式的书写,实际上两个公式的写法是同一个公式变换来的,不同的是系数的差异。 【教程】如何在STM32上实现增量式PID - STM32/STM8技术论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛! 资料上比较多的是: 还有一种的算法是: 这里主要介绍第二种,具体会分析比例、积分、微分三个环节的作用。 ----------------------------------------------
[单片机]
<font color='red'>STM32</font>单片机-增量式PID
寒假学习之stm32(16)----IIC通信协议
背景知识: https://zh.wikipedia.org/wiki/I%C2%B2C stm32中的IIC描述: I2C功能描述: I2C模块接收和发送数据,并将数据从串行转换成并行,或并行转换成串行。可以开启或禁止中断。接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线。允许连接到标准(高达100kHz)或快速(高达400kHz)的I2C总线 模式选择 默认情况下,I2C接口总是工作在从模式。从从模式切换到主模式,需要产生一个起始条件。 接口可以下述4种模式中的一种运行: ● 从发送器模式 ● 从接收器模式 ● 主发送器模式 ● 主接收器模式 该模块默认地工作于从模式。接口在生成起始条件后自动地从从模
[单片机]
寒假学习之<font color='red'>stm32</font>(16)----IIC通信协议
基于STM32平台的BMP180测试(模拟IIC)
1.测试描述: 使用模拟IIC,从BMP180中获取ID号、温度值、气压值以及计算海拔高度。 2.测试准备: 硬件平台:原子战舰V3开发板 测试工具:逻辑分析仪、串口调试工具 3.数据手册解读: (1) 首先是多个字节的读取时序图,从这里也可以看出BMP180芯片的地址+写信号是0xEE,地址+读信号为0xEF,当然手册前面也有提到过,有兴趣的可以自己去查看一下手册。 (2) 然后本人测试时默认使用的是下图画横线部分的部分,也就是气压这块使用的是低功耗模式。OSS的值要注意,因为后期的计算需要这个,并且读取UT值时也要做对应的处理。 (3) 下图就是手册里给出的利用BMP180里的参数计算气压和温度的
[单片机]
基于<font color='red'>STM32</font>平台的BMP180测试(模拟IIC)
STM32编程之软件模拟IIC对24C02存储器读写操作
1、主程序 #include stm32f10x_conf.h #include led.h #include key.h #include usart.h #include lcd.h #include 24cxx.h #include myiic.h #include delay.h u8 tabel = write data is:0 1 2 3 4 5 6 7 8 9 ; /* 程序功能:STM32实现24C02读写操作 当按下KEY1时,向24C02写入数组中的数据; 当按下KEY2时,从24C02中读出数据到数组。 用LCD液晶显示操作过程; 用串口显示写入和读
[单片机]
STM32 HAL库 +freeRTOS+Keil 移植
STM32 HAL库 +freeRTOS+Keil 移植 官方freeRTOS移植教程很多,本文不做赘述。本文基于Keil 5提供的freeRTOS库,进行移植。 Keil 版本:Keil MDK uVision5 首先准备好一个可以用的HAL库工程,为了方便调试,选择了原子哥的开发板上提供跑马灯工程。 打开工程, 点击 ,下载freeRTOS库, 我的已经安装过了 最新的版本10.3.1 下载完成后关闭,点击 ,在这个界面下,按下图选择对应的选项 选择完成后点击OK( 如果没有先下载),可以看到工程中已经添加RTOS 点击 编译下, 有一个错误先不用管,接下来开始修改文件,先打开RTE_Com
[单片机]
<font color='red'>STM32</font> HAL库 +freeRTOS+Keil 移植
STM32库函数详解----(通用输入/输出GPIO)
初始化和配置相关函数 1.void GPIO_DeInit (GPIO_TypeDef* GPIOx) 函数解释:gpio的反初始化函数,该函数的作用是把GPIO相关的寄存器配置成上电复位后的默认状态,在第一次初始化前或者不在使用某一接口后,可以调用该函数。 参数:GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。 2.void GPIO_Init (GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct) 函数解释:GPIO的初始化函数,该函数的作用是对io进行初始化。 参数:(1)GPIOx,GPIO的分组,如 GPI
[单片机]
STM32的硬件I2C设计有BUG
坊间一直流传着一个传说~STM32的硬件I2C设计有BUG,最好不要用,用软件I2C比较靠谱。长久以来,为了不必要的麻烦,我也一直没有用过硬件I2C,主要是软件I2C也比较方便,基本上任意端口都可以用。 最近画了块板子,正好用到了I2C,就顺便来测试一下硬件I2C是不是真的像有些人说的不好用。 测试硬件:STM32F407VET6+AT24C64测试软件:STM32CubeMX v6.1.1HAL库:STM32CubeF4 Firmware Package V1.25.2 STM32CubeMX配置 使用STM32CubeMX配置很方便,时钟等基础配置不再详细介绍,直接看I2C配置如下: 这里的速度模式选择为标准模式,
[单片机]
<font color='red'>STM32</font>的硬件I2C设计有BUG
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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