OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9388|回复: 8

TIM6定时器使用问题

[复制链接]

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2014-11-1
在线时间
0 小时
发表于 2014-11-9 23:48:20 | 显示全部楼层 |阅读模式
5金钱
TIM6定时器初始化完成后,计数寄存器设置为0,怎么一启动TIM6计数使能位后就立即产生了一个中断?怎么让它启动计数后,计数到一定值再产生中断?
#include "main.h"
#include "timer67.h"
void TIM6_Init(unsigned short arr,unsigned short psc)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
TIM6_ARR = arr;
TIM6_PSC = psc;
TIM6_CR1 |= (CR1_URS | CR1_ARPE);
TIM6_DIER |= DIER_UIE;
}

int main()
{
TIM6_Init(0x2710,0x13e0);
TIM7_Init(0x3600,0x1520);
Usart_Init(115200);
printf("初始化完成\r\n");
printf("%d\r\n",TIM6_CNT);
TIM6_Start();
while(1)
}
void TIM6_IRQHandler(void)
{
TIM6_SR = 0;
printf("TIM6_IRQ\r\n");
}


最佳答案

查看完整内容[请看2#楼]

回复【2楼】正点原子: --------------------------------- 可以了,初始化TIM6时,清零CR1_URS位,然后把EGR_UG位置1(SR_UIF位会同时置1),然后清零SR_UIF位。启动TIM6后不会立即产生一个中断了。 #include "main.h" #include "timer67.h" void TIM6_Init(unsigned short arr,unsigned short psc) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGrou ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2014-11-1
在线时间
0 小时
 楼主| 发表于 2014-11-9 23:48:21 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
可以了,初始化TIM6时,清零CR1_URS位,然后把EGR_UG位置1(SR_UIF位会同时置1),然后清零SR_UIF位。启动TIM6后不会立即产生一个中断了。
#include "main.h"
#include "timer67.h"
void TIM6_Init(unsigned short arr,unsigned short psc)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
TIM6_ARR = arr;
TIM6_PSC = psc;
TIM6_EGR |= EGR_UG;
TIM6_CNT = 0;
TIM6_SR = 0;
TIM6_DIER |= DIER_UIE;
}
int main()
{
TIM6_Init(0x3710,0x13e0);
Usart_Init(115200);
printf("初始化完成\r\n");
TIM6_Start();
while(1);
}
void TIM6_IRQHandler(void)
{
TIM6_SR = 0;
printf("TIM6_IRQ\r\n");
}
我找到坛友的方法是:
     在定时器初始化的最后阶段采用如下的操作顺序:
 1.产生一次软件更新时间;
 2. 打开定时器;
 3. 清除更新中断;
 4. 使能定时器更新中断。

TIM_GenerateEvent(TIM6,TIM_EventSource_Update);    // 产生软件更新事件,立即更新数据
2
TIM_Cmd(TIM6, ENABLE);                           // 使能TIM6. 先开定时器,再开中断
3
TIM_ClearFlag(TIM6,TIM_FLAG_Update);              //清除标志位。定时器一打开便产生更新事件,若不清除,将会进入中断
4
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);      //打开TIM6更新中断               

第二步可以不需要
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-11-9 23:54:01 | 显示全部楼层
这个问题论坛有朋友说解决了,你搜索下看看。
我是没有测试过,我现在的用法和你一样,不过进入第一次中断对我的结果并不影响。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-11-10 19:46:39 | 显示全部楼层
回复【3楼】wlff:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-4-24
在线时间
19 小时
发表于 2017-5-24 19:37:27 | 显示全部楼层
有TIM6_IRQn这个参数吗?为什么我在stm32f4××.h文件里面看到的是TIM6_DAC_IRQn这个参数呢?
回复

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2017-10-30 21:14:01 | 显示全部楼层
FJZ669 发表于 2017-5-24 19:37
有TIM6_IRQn这个参数吗?为什么我在stm32f4××.h文件里面看到的是TIM6_DAC_IRQn这个参数呢?

同问
回复

使用道具 举报

0

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-18
在线时间
21 小时
发表于 2018-6-9 19:01:04 | 显示全部楼层
FJZ669 发表于 2017-5-24 19:37
有TIM6_IRQn这个参数吗?为什么我在stm32f4××.h文件里面看到的是TIM6_DAC_IRQn这个参数呢?

这个问题是否解决了?想用TIM6中断,却发现没有TIM6_IRQn这个参数,你最后是咋整的?直接写TIM6_DAC_IRQn可以?
回复

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2021-4-26
在线时间
13 小时
发表于 2021-7-20 17:28:50 | 显示全部楼层
FJZ669 发表于 2017-5-24 19:37
有TIM6_IRQn这个参数吗?为什么我在stm32f4××.h文件里面看到的是TIM6_DAC_IRQn这个参数呢?

同问,我什么到TIM6就变得不一样了呢,中断服务函数
回复

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2021-4-26
在线时间
13 小时
发表于 2021-7-20 17:32:10 | 显示全部楼层
正点原子 发表于 2014-11-9 23:54
这个问题论坛有朋友说解决了,你搜索下看看。
我是没有测试过,我现在的用法和你一样,不过进入第一次中断 ...

void TIM6_IRQHandler(void) 有这个中断服务函数吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 07:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表