DMA 发表于 2016-5-30 00:11:19

HAL库 TIM slave mode -> reset mode

本帖最后由 DMA 于 2016-5-31 00:49 编辑

使用硬体: STM32F411 Nucleo
本来要问有关 UART 相关问题,不过我现在把问题缩小了
我在cube里设置了TIM5
Slave Mode: Reset Mode
Trigger Source: ITR0
Channel2: Input Capture direct mode(脚位PA1)


然后我在程序开始前调用了
HAL_TIM_Base_Start_IT(&htim5);
HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_2);


运作时可以触发
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);

但是无论PA1给予怎样的输入,都没办法复位TIM5计数器,是不是我哪里搞错了?

Dylan疾风闪电 发表于 2016-5-30 11:15:07

/*Configure GPIO pin : PA0 */
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;//GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


1、尽量不要使用同一个引脚,作为多种功能。
2、实在要用的话,请关心一下不同功能时 对引脚的配置要求。
定时器(输出比较模式/PWM)------推挽复用输出
EXTI输入线------浮空输入或带上拉输入或带下拉输入

DMA 发表于 2016-5-30 13:21:36

本帖最后由 DMA 于 2016-5-30 23:24 编辑

已经缩小问题,麻烦各位大神帮我看看

xmshao 发表于 2016-5-31 15:01:24

你的触发输入是ITR0,跟PA1没什么关系啊。你PA1设计为输入捕捉。

你的TIM5设计成复位模式,触发输入可以是ITRx,或者TI1,TI2,ETRF.

你现在ITR0没有信号过来。 要不可以把触发输入改完TI2FP2.

DMA 发表于 2016-5-31 22:57:20

谢谢,大神。
我已经大概了解TIM框架图。

现在我遇到另一个问题是,每次触发TIM5复位会直接进入中断函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

但是我希望他是真的计数到周期上限才中断这个函数,
请问这样有什么寄存器可以设定吗?

我稍为研究过TIM的所有寄存器似乎没看到这个功能。
页: [1]
查看完整版本: HAL库 TIM slave mode -> reset mode