OpenEdv-开源电子网

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

求助:STM32F103定时器TIM2、TIM3中断偶尔出现IO控制异常,什么原因?

[复制链接]

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
发表于 2020-5-8 21:33:18 | 显示全部楼层 |阅读模式
5金钱
程序要实现的端口在TIM2中断中控制LED输出高和TIM3中断中控制LED输出低,程序大部分时间都是正常的,但偶尔出现LED输出在本来没有TIM3中断到来的时候输出低。有没有解决办法?
Main()
{
         Stm32_Clock_Init(9);  //系统时钟设置
         delay_init(72);                  //延时初始化
         LED_Init();                         //初始化与LED连接的硬件接口
         uart_init(72,9600);       //采用原子的例程的代码 MY_NVIC_Init(2,2,USART1_IRQn,2);//组2,最低优先级
         TIM3_Int_Init(200,71);//1Mhz的计数频率,计数到200 us
         TIM2_Int_Init(200,71);// 1Mhz的计数频率,计数到200 us
         TIM2->CR1|=0x01;    //使能定时器2
         delay_us(170);
         TIM3->CR1|=0x01;  //使能定时器3  
while(1)
         {
     If(5ms)
    {printf("\n%d%d %d %d %d %d\r", A [0],A [1],A [2], A[3],A[4],A [5]);    //每5ms uart1输出}}
}
////////////
voidTIM3_Int_Init(u16 arr,u16 psc)
{
         RCC->APB1ENR|=1<<1;    //TIM3时钟使能   
        TIM3->ARR=arr;       //设定计数器自动重装值
         TIM3->PSC=psc;      //预分频器设置            
         TIM3->DIER|=1<<0;   //允许更新中断      
       MY_NVIC_Init(1,1,TIM3_IRQn,2);//抢占1,子优先级3,组2                                                                          
}
voidTIM2_Int_Init(u16 arr,u16 psc)
{
         RCC->APB1ENR|=1<<0;    //TIM2时钟使能   
        TIM2->ARR=arr;       //设定计数器自动重装值
         TIM2->PSC=psc;      //预分频器设置        
         TIM2->DIER|=1<<0;   //允许更新中断                                 
       MY_NVIC_Init(1,2,TIM2_IRQn,2);//抢占1,子优先级3,组2                                                                                    
}
voidTIM2_IRQHandler(void)
{
         if(TIM2->SR&0X0001)//溢出中断
                   {
            TIM2->SR&=~(1<<0);//清除中断标志位   1
                          LED3=1;   
         }
}
void TIM3_IRQHandler(void)
{
         if(TIM3->SR&0X0001)//溢出中断
                   {
            TIM3->SR&=~(1<<0);//清除中断标志位   1
                          LED3=0;   
         }
}

无标题.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2020-5-3
在线时间
0 小时
发表于 2020-5-8 21:33:20 | 显示全部楼层
不懂,帮顶,勇于提问总是好的!!
回复

使用道具 举报

0

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2020-5-6
在线时间
0 小时
发表于 2020-5-8 22:54:24 | 显示全部楼层
帮顶!!!!!!!!!!!!!
回复

使用道具 举报

0

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2019-3-24
在线时间
17 小时
发表于 2020-5-9 01:09:01 | 显示全部楼层
定时器优先级问题吧
回复

使用道具 举报

22

主题

2254

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4486
金钱
4486
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-5-9 10:28:37 | 显示全部楼层
不知道你这么做有什么意义,但是你那异常不是异常,时间交错了
回复

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
 楼主| 发表于 2020-5-9 10:34:16 来自手机 | 显示全部楼层
三叶草 发表于 2020-5-9 10:28
不知道你这么做有什么意义,但是你那异常不是异常,时间交错了

感谢你的回答,其实程序是为了时间精确的控制开关,你说的时间交错是指中断时间吗?
回复

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
 楼主| 发表于 2020-5-9 10:35:51 来自手机 | 显示全部楼层
姓温的 发表于 2020-5-9 01:09
定时器优先级问题吧

定时器按照时序的话是不会冲突的
回复

使用道具 举报

22

主题

2254

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4486
金钱
4486
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-5-9 10:52:12 | 显示全部楼层
niatcx 发表于 2020-5-9 10:35
定时器按照时序的话是不会冲突的

你说是哪一个快,哪一个慢?这个不好说,所以从一开始初始化就有问题了,这么写肯定不行的
回复

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
 楼主| 发表于 2020-5-9 10:52:42 来自手机 | 显示全部楼层
补充:TIM2的中断服务程序时间经示波器测试为21us,TIM3的中断服务程序为3us
回复

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
 楼主| 发表于 2020-5-9 14:47:09 来自手机 | 显示全部楼层
原子哥帮忙看看
回复

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
 楼主| 发表于 2020-5-9 16:20:16 来自手机 | 显示全部楼层
三叶草 发表于 2020-5-9 10:52
你说是哪一个快,哪一个慢?这个不好说,所以从一开始初始化就有问题了,这么写肯定不行的

有什么好方法吗?定时器同步?
回复

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
 楼主| 发表于 2020-5-11 16:24:41 来自手机 | 显示全部楼层
大神们啊!
回复

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
 楼主| 发表于 2020-5-11 16:31:02 来自手机 | 显示全部楼层
原子哥帮忙看看
回复

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
 楼主| 发表于 2020-5-13 16:10:25 来自手机 | 显示全部楼层
RMB悬赏!!!
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2020-5-13 19:53:55 来自手机 | 显示全部楼层
一个定期器不就搞定了吗,为啥用两个?
回复

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2020-5-13 19:55:18 来自手机 | 显示全部楼层
我用一个timer控制八个IO模拟38K的NEC编码红外发射,也没啥问题!我猜是你逻辑问题,不是定时器或者GPIO问题
回复

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
 楼主| 发表于 2020-5-17 11:06:40 来自手机 | 显示全部楼层
一个定时器怎么做到精确时间控制?有兴趣可以联系我微信:wxid_c1b1h5la5u4422。感谢!
回复

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-17
在线时间
10 小时
 楼主| 发表于 2020-5-17 11:07:47 来自手机 | 显示全部楼层
无痕幽雨 发表于 2020-5-13 19:55
我用一个timer控制八个IO模拟38K的NEC编码红外发射,也没啥问题!我猜是你逻辑问题,不是定时器或者GPIO问 ...

一个定时器怎么做到精确时间控制,还不占用其它时间?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 11:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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