OpenEdv-开源电子网

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

定时器3和定时器7同时使用导致定时器3无法正常使用

[复制链接]

80

主题

268

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2014-8-11
在线时间
84 小时
发表于 2016-11-18 12:23:54 | 显示全部楼层 |阅读模式
1金钱
代码直接黏贴的,备注有点乱码,以前插入c文本的现在没有了额。。。

问题:这两个定时器我是用来做串口1和485的超时接收用的,
         在我调usart1和timer3的时候就收完一串数据超时就强制标记接收完成;
         后来我添加了usart2和timer7就导致timer3在接收完一串数据后无法进入更新中断。
         为什么不能同时用????

#include "timer.h"
#include "led.h"
#include "RS485.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////     
//¶¨Ê±Æ÷ÖжÏÇý¶¯´úÂë      
//All rights reserved                                      
//////////////////////////////////////////////////////////////////////////////////     



TIM_HandleTypeDef TIM3_Handler;      //¶¨Ê±Æ÷¾ä±ú 3
TIM_HandleTypeDef TIM7_Handler;      //¶¨Ê±Æ÷¾ä±ú 7

//ͨÓö¨Ê±Æ÷3Öжϳõʼ»¯
//arr£º×Ô¶¯ÖØ×°Öµ¡£
//psc£ºÊ±ÖÓÔ¤·ÖƵÊý
//¶¨Ê±Æ÷Òç³öʱ¼ä¼ÆËã·½·¨:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=¶¨Ê±Æ÷¹¤×÷ƵÂÊ,µ¥Î»:Mhz
//ÕâÀïʹÓõÄÊǶ¨Ê±Æ÷3!(¶¨Ê±Æ÷3¹ÒÔÚAPB1ÉÏ£¬Ê±ÖÓΪHCLK/2)
void TIM3_Init(u16 arr,u16 psc)
{  
    TIM3_Handler.Instance=TIM3;                          //ͨÓö¨Ê±Æ÷3
    TIM3_Handler.Init.Prescaler=psc;                     //·ÖƵϵÊý
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //ÏòÉϼÆÊýÆ÷
    TIM3_Handler.Init.Period=arr;                        //×Ô¶¯×°ÔØÖµ
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//ʱÖÓ·ÖƵÒò×Ó
    HAL_TIM_Base_Init(&TIM3_Handler);
   
    HAL_TIM_Base_Start_IT(&TIM3_Handler); //ʹÄܶ¨Ê±Æ÷3ºÍ¶¨Ê±Æ÷3¸üÐÂÖжϣºTIM_IT_UPDATE
      __HAL_TIM_CLEAR_IT(&TIM3_Handler, TIM_IT_UPDATE);//Çå¸üÐÂÖжÏ
    __HAL_TIM_DISABLE(&TIM3_Handler);   
}



//¶¨Ê±Æ÷3ÖжϷþÎñº¯Êý
void TIM3_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&TIM3_Handler);
}

void TIM7_Init(u16 arr,u16 psc)
{  
    TIM3_Handler.Instance=TIM7;                          //ͨÓö¨Ê±Æ÷7
    TIM3_Handler.Init.Prescaler=psc;                     //·ÖƵϵÊý
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //ÏòÉϼÆÊýÆ÷
    TIM3_Handler.Init.Period=arr;                        //×Ô¶¯×°ÔØÖµ
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//ʱÖÓ·ÖƵÒò×Ó
    HAL_TIM_Base_Init(&TIM7_Handler);
   
    HAL_TIM_Base_Start_IT(&TIM7_Handler); //ʹÄܶ¨Ê±Æ÷7ºÍ¶¨Ê±Æ÷7¸üÐÂÖжϣºTIM_IT_UPDATE
    __HAL_TIM_CLEAR_IT(&TIM7_Handler, TIM_IT_UPDATE);//Çå¸üÐÂÖжÏ
    __HAL_TIM_DISABLE(&TIM7_Handler);   
}



//¶¨Ê±Æ÷3ÖжϷþÎñº¯Êý
void TIM7_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&TIM7_Handler);
}


//»Øµ÷º¯Êý£¬¶¨Ê±Æ÷ÖжϷþÎñº¯Êýµ÷ÓÃ
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim==(&TIM3_Handler))
    {
        LED1=!LED1;        //LED1·´×ª
              USART2_RX_STA|=1<<15;//±ê&#188;&#199;&#180;&#174;&#191;&#218;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
              __HAL_TIM_DISABLE(htim);//&#202;§&#196;&#220;TIM3
    }
        if(htim==(&TIM7_Handler))
    {
        LED0=!LED0;        //LED1·&#180;×&#170;
              USART_RX_STA|=1<<15;//±ê&#188;&#199;&#180;&#174;&#191;&#218;&#189;&#211;&#202;&#213;&#205;ê&#179;&#201;
              __HAL_TIM_DISABLE(htim);//&#202;§&#196;&#220;TIM7
    }
}


//&#182;¨&#202;±&#198;÷&#181;×&#178;á&#199;&#253;&#182;&#175;&#163;&#172;&#191;&#170;&#198;&#244;&#202;±&#214;&#211;&#163;&#172;&#201;è&#214;&#195;&#214;&#208;&#182;&#207;&#211;&#197;&#207;&#200;&#188;&#182;
//&#180;&#203;&#186;&#175;&#202;&#253;&#187;á±&#187;HAL_TIM_Base_Init()&#186;&#175;&#202;&#253;&#181;÷&#211;&#195;
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim->Instance==TIM3)
    {
        __HAL_RCC_TIM3_CLK_ENABLE();            //&#202;&#185;&#196;&#220;TIM3&#202;±&#214;&#211;
        HAL_NVIC_SetPriority(TIM3_IRQn,1,3);    //&#201;è&#214;&#195;&#214;&#208;&#182;&#207;&#211;&#197;&#207;&#200;&#188;&#182;&#163;&#172;&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;1&#163;&#172;×&#211;&#211;&#197;&#207;&#200;&#188;&#182;3
        HAL_NVIC_EnableIRQ(TIM3_IRQn);          //&#191;&#170;&#198;&#244;ITM3&#214;&#208;&#182;&#207;   
    }
        if(htim->Instance==TIM7)
    {
        __HAL_RCC_TIM7_CLK_ENABLE();            //&#202;&#185;&#196;&#220;TIM7&#202;±&#214;&#211;
        HAL_NVIC_SetPriority(TIM7_IRQn,1,2);    //&#201;è&#214;&#195;&#214;&#208;&#182;&#207;&#211;&#197;&#207;&#200;&#188;&#182;&#163;&#172;&#199;&#192;&#213;&#188;&#211;&#197;&#207;&#200;&#188;&#182;1&#163;&#172;×&#211;&#211;&#197;&#207;&#200;&#188;&#182;2
        HAL_NVIC_EnableIRQ(TIM7_IRQn);          //&#191;&#170;&#198;&#244;ITM7&#214;&#208;&#182;&#207;   
    }
}


我是一只菜鸟,但我会大鹏展翅
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

80

主题

268

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2014-8-11
在线时间
84 小时
 楼主| 发表于 2016-11-18 12:56:24 | 显示全部楼层
复制黏贴是硬伤,tim7的初始化里面结构体还是写的tim3
我是一只菜鸟,但我会大鹏展翅
回复

使用道具 举报

3

主题

32

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2010
金钱
2010
注册时间
2016-8-7
在线时间
152 小时
发表于 2016-11-18 17:55:37 | 显示全部楼层
写错了吧。。。。
回复

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2015-9-16
在线时间
39 小时
发表于 2016-11-22 08:47:14 | 显示全部楼层
为啥我按照这样的配置,一个定时器管用一个不管用
回复

使用道具 举报

80

主题

268

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2014-8-11
在线时间
84 小时
 楼主| 发表于 2016-11-22 14:08:27 | 显示全部楼层
swallow_sw 发表于 2016-11-22 08:47
为啥我按照这样的配置,一个定时器管用一个不管用

这个配置函数我写错了,copy没注意
void TIM7_Init(u16 arr,u16 psc)
{  
    TIM3_Handler.Instance=TIM7;                          //&#205;¨&#211;&#195;&#182;¨&#202;±&#198;÷7
    TIM3_Handler.Init.Prescaler=psc;                     //·&#214;&#198;&#181;&#207;&#181;&#202;&#253;
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //&#207;ò&#201;&#207;&#188;&#198;&#202;&#253;&#198;÷
    TIM3_Handler.Init.Period=arr;                        //×&#212;&#182;&#175;×°&#212;&#216;&#214;&#181;
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//&#202;±&#214;&#211;·&#214;&#198;&#181;&#210;ò×&#211;
    HAL_TIM_Base_Init(&TIM7_Handler);
   
    HAL_TIM_Base_Start_IT(&TIM7_Handler); //&#202;&#185;&#196;&#220;&#182;¨&#202;±&#198;÷7&#186;&#205;&#182;¨&#202;±&#198;÷7&#184;ü&#208;&#194;&#214;&#208;&#182;&#207;&#163;&#186;TIM_IT_UPDATE
    __HAL_TIM_CLEAR_IT(&TIM7_Handler, TIM_IT_UPDATE);//&#199;&#229;&#184;ü&#208;&#194;&#214;&#208;&#182;&#207;
    __HAL_TIM_DISABLE(&TIM7_Handler);   
}
我是一只菜鸟,但我会大鹏展翅
回复

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2015-9-16
在线时间
39 小时
发表于 2016-11-30 16:40:00 | 显示全部楼层
战舰水手 发表于 2016-11-22 14:08
这个配置函数我写错了,copy没注意
void TIM7_Init(u16 arr,u16 psc)
{  

为啥我也是跟你同样的配置,一个定时器工作,一个不工作呢?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-3-1 16:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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