打印
[STM32F1]

请教各位前辈用HAl怎样关闭定时器和清除

[复制链接]
6120|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccccccssssssss|  楼主 | 2018-3-13 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ccccccssssssss 于 2018-3-13 15:40 编辑

定时器已经开启并能用了  用的是比较输出的反转输出  ;但
现在我想用一个按键中断服务函数关掉其
我本来用的是这两个函数 因为在初始化
中用到了相反函数START
{
                HAL_TIM_Base_Stop(&htim1);// 停止定时器
        __HAL_TIM_DISABLE_IT(&htim1, TIM_IT_CC4);//关闭通道4
}
上面注释的是我本意 结果...
// 停止定时器 -----> 不生效
//关闭通道4 ----> 把我其他定时器也关了 并且还是有持续低脉冲输出
还有定时器该怎样清除 外部中断关闭后还有另一个按键继续启动  不能影响下次整个执行,
下次在按键开启后执行又该怎样初始化....

另外请前辈 大神们说具体点 半个小白一枚



沙发
sky.sun.zz| | 2018-3-13 21:38 | 只看该作者
stop改成Start

使用特权

评论回复
板凳
ccccccssssssss|  楼主 | 2018-3-14 08:06 | 只看该作者

Start不是开始的意思吗? 我要停止耶。而且
要影响指定定时器   关闭指定定时器  并清除相关位 接着马上开启定时器   并且是指定定时器和通道  其他定时器继续

使用特权

评论回复
地板
sky.sun.zz| | 2018-3-14 10:08 | 只看该作者
ccccccssssssss 发表于 2018-3-14 08:06
Start不是开始的意思吗? 我要停止耶。而且
要影响指定定时器   关闭指定定时器  并清除相关位 接着马上 ...

我试过,Start可使能定时器,Stop可以失能定时器,但CNT任然在计数。你应该在Stop后读cnt并清零CNT供下次读取。

使用特权

评论回复
5
ccccccssssssss|  楼主 | 2018-3-14 11:08 | 只看该作者
我现在要用外部中断的内容 去清除掉定时器本来正在运行的内容   怎么才能做得到?试过了 只是初始化不行 ,还得清除相关位

请前辈 大神们告知下 在HAL中应该怎么办

使用特权

评论回复
6
蝴蝶泉2018| | 2018-3-14 11:55 | 只看该作者
不会吧,我下面的代码百试百灵....你是OC输出?如果是-->HAL_TIM_OC_Stop

            HAL_TIM_Base_Stop_IT(&htim7);
            __HAL_TIM_SET_COUNTER(&htim7,0);

使用特权

评论回复
7
香水城| | 2018-3-14 12:21 | 只看该作者
定时器的启停通过   __HAL_TIM_ENABLE(htim); /__HAL_TIM_DISABLE()控制,最终是操作 TIMx_CR1_CEN位。
定时器关闭了计数器是不会计数的。
而比较通道的关闭,需通过TIM_CCxChannelCmd( )来控制,最终是操作TIMXx_CCER_CCxE位。【这里的函数基于stm32cube库,你弄清操作哪些就好】

使用特权

评论回复
8
ccccccssssssss|  楼主 | 2018-3-14 12:49 | 只看该作者
蝴蝶泉2018 发表于 2018-3-14 11:55
不会吧,我下面的代码百试百灵....你是OC输出?如果是-->HAL_TIM_OC_Stop

            HAL_TIM_Base_Stop_IT ...

他好像给我其他定时器也关掉了

使用特权

评论回复
9
ccccccssssssss|  楼主 | 2018-3-14 12:50 | 只看该作者
香水城 发表于 2018-3-14 12:21
定时器的启停通过   __HAL_TIM_ENABLE(htim); /__HAL_TIM_DISABLE()控制,最终是操作 TIMx_CR1_CEN位。
定 ...

停止方法找到了  但是中断结束后他好像还继续执行定时器中断服务函数  怎样把他清除掉

使用特权

评论回复
10
ccccccssssssss|  楼主 | 2018-3-14 12:50 | 只看该作者
蝴蝶泉2018 发表于 2018-3-14 11:55
不会吧,我下面的代码百试百灵....你是OC输出?如果是-->HAL_TIM_OC_Stop

            HAL_TIM_Base_Stop_IT ...

停止方法找到了  但是中断结束后他好像还继续执行定时器中断服务函数  怎样把他清除掉

使用特权

评论回复
11
ccccccssssssss|  楼主 | 2018-3-14 14:52 | 只看该作者
香水城 发表于 2018-3-14 12:21
定时器的启停通过   __HAL_TIM_ENABLE(htim); /__HAL_TIM_DISABLE()控制,最终是操作 TIMx_CR1_CEN位。
定 ...

我现在主要想清除定时器那边在运行的程序  定时器中断服务中有很多程序
我想用外部中断清除掉  再马上重新打开定时器

使用特权

评论回复
12
ccccccssssssss|  楼主 | 2018-3-15 09:00 | 只看该作者

Start不是开始的意思吗  另外我在中断中还把定时器初始化加进去也没用

使用特权

评论回复
13
ccccccssssssss|  楼主 | 2018-3-15 09:01 | 只看该作者
sky.sun.zz 发表于 2018-3-14 10:08
我试过,Start可使能定时器,Stop可以失能定时器,但CNT任然在计数。你应该在Stop后读cnt并清零CNT供下次 ...

那具体代码该怎样实现呢   hal不懂 且没中文手册  词典翻译的关键词几乎一个意思

使用特权

评论回复
14
sky.sun.zz| | 2018-3-15 10:24 | 只看该作者
ccccccssssssss 发表于 2018-3-15 09:01
那具体代码该怎样实现呢   hal不懂 且没中文手册  词典翻译的关键词几乎一个意思
...

HAL_TIM_Base_Start(&htim1);       
HAL_TIM_Base_Stop(&htim1);

使用特权

评论回复
15
幸福小强| | 2018-3-15 21:19 | 只看该作者
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);
/* Non-Blocking mode: Interrupt */
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);
/* Non-Blocking mode: DMA */
HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim);

看头文件啊,这一堆。

使用特权

评论回复
16
ccccccssssssss|  楼主 | 2018-3-16 09:06 | 只看该作者
幸福小强 发表于 2018-3-15 21:19
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);
HAL_Stat ...

呃呃  大哥感谢你贴出来  但麻烦能翻译下吗? 这些我在手册都有看到  但是呢,用词典翻译出来都基本一个意思

使用特权

评论回复
17
冷冷清清的什么| | 2019-9-18 11:34 | 只看该作者
清问楼主 ,你的第二个问题后来是怎么解决的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

27

帖子

0

粉丝