STM32F103定时器的单脉冲模式

1.什么是单脉冲模式

        单脉冲模式就是定时器启动后,发送一个占空比可调的波形,发送完后,定时器又自动关闭了。而定时器的启动条件,可以通过从模式触发。

2.什么是从模式

        通俗一点讲,从模式其实就是允许其他外设通过触发条件"控制自己"。

        “控制自己”的方式有三种:

        1.复位模式:选中的触发输入(TRGI)的上升沿重新初始化计数器,并且产生一个更新寄存 器的信号。

        2.门控模式:当触发输入(TRGI)为高时,定时器的时钟开启。一旦触发输入变为低,则定时器停止(但不复位)。计数器的启动和停止都是受控的。

        3.触发模式:计数器在触发输入TRGI的上升沿启动(但不复位),只有计数器的启动是受控的。

        触发输入可以选择4个输入通道,如下图的TI1~TI4,与之对应的就是TIMx_CH1~CH4。

 3.实现思路

开启定时器的从模式,并将其设置成触发模式,触发输入通道选择TI2(对应选择的gpio是PB7),开启输入比较;输出通道则选用CH1(对应选择的gpio是PB8),开启输出比较。这样就可以通过PB7输入一个矩形波,随后定时器启动,输出一个一个占空比由软件设置的波形。

(注:下图是TM1,代码是TM4)

代码如下:

void TIM4_IC_Configuration(void)
{
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_ICInitTypeDef  TIM_ICInitStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	uint16_t PrescalerValue = 0;
	  /* TIM4 使能时钟 */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

  /* GPIOB 使能时钟*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
  GPIO_InitTypeDef GPIO_InitStructure;

  /* TIM4_CH1 pin (PB.06) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* TIM4_CH2 pin (PB.07) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(GPIOB, &GPIO_InitStructure);
	

  PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
  /* 配置定时器的时钟 */
  TIM_TimeBaseStructure.TIM_Period = 65535;
  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

  /* 配置定时器的输出比较 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 16383;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  TIM_OC1Init(TIM4, &TIM_OCInitStructure);

  /* 配置定时器输入比较 */

  TIM_ICStructInit(&TIM_ICInitStructure);

  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0;

  TIM_ICInit(TIM4, &TIM_ICInitStructure);

  /* 设置单脉冲模式 */
  TIM_SelectOnePulseMode(TIM4, TIM_OPMode_Single);

  /* 设置从模式触发输入 */
  TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);

  /* 设置从模式为触发模式 */
  TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Trigger);
}

记录学习过程,欢迎各位大佬批评指正

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
STM32F103系列微控制器中,定时器的编码器模式是通过两个输入通道(通常称为A相和B相)来读取旋转编码器的输入信号。编码器通常是一种用于测量转动位置和速度的设备。 在编码器模式下,定时器通过检测A相和B相的脉冲信号的变化来计算转动方向和计数值。下面是STM32F103定时器编码器模式的工作原理: 1. 定时器设置: - 定时器配置为边沿对齐模式(TIM_CounterMode_Up),计数值在每个周期内递增。 - 选择合适的预分频因子(TIM_Prescaler)来控制计数频率。 - 设置适当的计数周期(TIM_Period)来确定计数器溢出前的计数范围。 2. 编码器模式配置: - 使用TIM_EncoderInterfaceConfig函数将定时器配置为编码器模式。 - 选择合适的编码器模式(TIM_EncoderMode_TI1或TIM_EncoderMode_TI2)。 - 设置A相和B相输入通道的极性(上升沿、下降沿或双边沿)。 3. 读取编码器计数值: - 使用TIM_GetCounter函数读取编码器的当前计数值。 - 编码器计数值的变化表示旋转方向和步长。 当旋转编码器的A相和B相输入信号发生变化时,定时器将根据输入信号的状态变化自动更新计数器的值。通过读取定时器的计数值,可以获得编码器的当前位置和速度信息。 需要注意的是,具体的编码器模式配置和计数值解释可能因不同的编码器类型和应用而有所不同。以上是一般的工作原理,具体实现时还需参考相关的编码器规格和STM32F103系列微控制器的参考手册。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值