你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】stm32f2xx与stm32f10x 在正交编码器应用关于定时器初始化中的区别

[复制链接]
STMCU小助手 发布时间:2021-12-2 15:53
如题,送给自己做警醒。

注意:

如果stm32f2xx系列上面的网址的代码要做适当修改。
以下说重点:stm32f2xx系列,在调试中对GPIO的初始化,切记选择GPIO_Mode_AF模式,即端口复用。

随后,要做端口映射处理,即调用:GPIO_PinAFConfig()函数。
这2个方式不选择,timer是不会有反应的

本人是stm32f207,花了4天惨痛代价。

以下贴代码:
  1. /* Private define ------------------------------------------------------------*/
  2. #define ENCODER_TIMER                TIM3  // Encoder unit connected to TIM3
  3. #define ENCODER_PPR           (u16)(1000)   // number of pulses per revolution
  4. #define SPEED_BUFFER_SIZE               8

  5. #define COUNTER_RESET   (u16)10
  6. #define ICx_FILTER      (u8) 6 // 6<-> 670nsec

  7. #define TIMx_PRE_EMPTION_PRIORITY 0x0F
  8. #define TIMx_SUB_PRIORITY 0x0F



  9. *******************************************************************************
  10. * Function Name  : ENC_Init
  11. * Description    : General Purpose Timer x set-up for encoder speed/position
  12. *                  sensors
  13. * Input          : None
  14. * Output         : None
  15. * Return         : None
  16. *******************************************************************************/
  17. void Encoder_Init(void)
  18. {
  19.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  20.   TIM_ICInitTypeDef TIM_ICInitStructure;

  21. /* Encoder unit connected to TIM3, 4X mode */   
  22.   GPIO_InitTypeDef GPIO_InitStructure;
  23.   NVIC_InitTypeDef NVIC_InitStructure;

  24.   /* TIM3 clock source enable */
  25.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  26.   /* Enable GPIOC, clock */
  27.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
  28.   //GPIO_Init
  29.   GPIO_StructInit(&GPIO_InitStructure);
  30.   /* Configure PC.06,07 as encoder input */
  31.   GPIO_InitStructure.GPIO_Pin = INTA_PIN | INTB_PIN;
  32.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;              //这个地方注意
  33.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  34.   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  35.   GPIO_Init(GPIOC, &GPIO_InitStructure);

  36.    /* Connect TIM3 pins to AF2 */  
  37.   GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3);   //这个地方注意
  38.   GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3);   //这个地方注意


  39.   /* Enable the TIM3 Update Interrupt */
  40.   NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  41.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = TIMx_PRE_EMPTION_PRIORITY;
  42.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIMx_SUB_PRIORITY;
  43.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  44.   NVIC_Init(&NVIC_InitStructure);

  45.   /* Timer configuration in Encoder mode */
  46.   TIM_DeInit(ENCODER_TIMER);
  47.   TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

  48.   TIM_TimeBaseStructure.TIM_Prescaler = 0x0;  // No prescaling
  49.   TIM_TimeBaseStructure.TIM_Period = 0x0F;//(4*ENCODER_PPR)-1;  
  50.   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  51.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   
  52.   TIM_TimeBaseInit(ENCODER_TIMER, &TIM_TimeBaseStructure);

  53.   TIM_EncoderInterfaceConfig(ENCODER_TIMER, TIM_EncoderMode_TI1,
  54.                              TIM_ICPolarity_Falling, TIM_ICPolarity_Falling);
  55.   TIM_ICStructInit(&TIM_ICInitStructure);
  56.   TIM_ICInitStructure.TIM_ICFilter = ICx_FILTER;                //--?--
  57.   TIM_ICInit(ENCODER_TIMER, &TIM_ICInitStructure);

  58. // Clear all pending interrupts
  59.   TIM_ClearFlag(ENCODER_TIMER, TIM_FLAG_Update);
  60.   TIM_ITConfig(ENCODER_TIMER, TIM_IT_Update, ENABLE);
  61.   //Reset counter
  62.   //ENCODER_TIMER->CNT = COUNTER_RESET;

  63.   ENC_Clear_Speed_Buffer();

  64.   TIM_Cmd(ENCODER_TIMER, ENABLE);  
  65. }

  66. /*******************************************************************************
  67. * Function Name  : TIM3_IRQHandler
  68. * Description    : This function handles TIMx Update interrupt request.
  69.                    Encoder unit connected to TIM3
  70. * Input          : None
  71. * Output         : None
  72. * Return         : None
  73. *******************************************************************************/
  74. void TIM3_IRQHandler(void)
  75. {  
  76.     /* Clear the interrupt pending flag */
  77.     TIM_ClearFlag(ENCODER_TIMER, TIM_FLAG_Update);

  78. }

复制代码

收藏 评论0 发布时间:2021-12-2 15:53

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版