[N32G430] N32G430的低功耗定时器问题。

[复制链接]
790|7
 楼主| 呐咯密密 发表于 2024-11-27 09:27 | 显示全部楼层 |阅读模式
现使用N32G430的低功耗定时器的编码器模式,计数没有任何问题,但是我想在计数器达到重装载值时触发中断,但是这个中断一直触发不了。这个是怎么回事。
  1. void EncInputIoConfig(void)
  2. {
  3.     GPIO_InitType GPIO_InitStructure;
  4.     GPIO_Structure_Initialize(&GPIO_InitStructure);
  5.     /* Enable the GPIO Clock */
  6.     RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOB);

  7.     /* Configure the GPIO pin */
  8.     GPIO_InitStructure.Pin        = GPIO_PIN_5;
  9.     GPIO_InitStructure.GPIO_Mode  = GPIO_MODE_INPUT;
  10.     GPIO_InitStructure.GPIO_Alternate =  GPIO_AF3_LPTIM;
  11.     GPIO_Peripheral_Initialize(GPIOB, &GPIO_InitStructure);
  12.     /* Configure the GPIOpin */
  13.     GPIO_InitStructure.Pin        = GPIO_PIN_7;
  14.     GPIO_InitStructure.GPIO_Mode  = GPIO_MODE_INPUT;
  15.     GPIO_InitStructure.GPIO_Alternate =  GPIO_AF6_LPTIM;
  16.     GPIO_Peripheral_Initialize(GPIOB, &GPIO_InitStructure);
  17. }
  18. void LPTIMNVIC_Config(FunctionalState Cmd)
  19. {
  20.     EXTI_InitType EXTI_InitStructure;
  21.     NVIC_InitType NVIC_InitStructure;

  22.     EXTI_Flag_Status_Clear(EXTI_LINE20);
  23.     EXTI_InitStructure.EXTI_Line = EXTI_LINE20;
  24. #ifdef __TEST_SEVONPEND_WFE_NVIC_DIS__
  25.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Event;
  26. #else
  27.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  28. #endif
  29.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  30.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  31.     EXTI_Peripheral_Initializes(&EXTI_InitStructure);

  32.     /* Enable the RTC Alarm Interrupt */
  33.     NVIC_InitStructure.NVIC_IRQChannel                   = LPTIM_WKUP_IRQn;
  34.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_PER_PRIORITY_1;
  35.     NVIC_InitStructure.NVIC_IRQChannelSubPriority        = NVIC_SUB_PRIORITY_1;
  36.     NVIC_InitStructure.NVIC_IRQChannelCmd                = Cmd;
  37.     NVIC_Initializes(&NVIC_InitStructure);
  38. }
  39. void Lptim_EncInit(void)
  40. {
  41.     RCC_LPTIM_Enable();
  42.     RCC_LSI_Enable();
  43.     while(RCC_LSI_Stable_Wait() != SUCCESS);
  44.     RCC_LPTIM_Clock_Config(RCC_LPTIMCLK_SRC_LSI);
  45.         LPTIMNVIC_Config(ENABLE);
  46.        
  47.         LPTIM_Prescaler_Set(LPTIM,LPTIM_PRESCALER_DIV1);
  48.     /* Config LPTIM */
  49.         EncInputIoConfig();
  50.        
  51.     LPTIM_Clock_Source_Set(LPTIM,LPTIM_CLK_SOURCE_INTERNAL);
  52.     LPTIM->CFG &=~(LPTIM_CFG_NENC|LPTIM_CFG_ENC);
  53.     LPTIM_Encoder_Mode_Enable(LPTIM);
  54.     /* ENC MODE1 */
  55.     LPTIM_Encoder_Mode_Set(LPTIM,LPTIM_ENCODER_MODE_RISING_FALLING);

  56.     LPTIM_ON(LPTIM);
  57.     LPTIM_Auto_Reload_Set(LPTIM,65535);
  58.     LPTIM_Compare_Set(LPTIM,10000);  
  59.         LPTIM_Counter_Start(LPTIM,LPTIM_OPERATING_MODE_CONTINUOUS);
  60.         LPTIM_Interrupt_Enable(LPTIM,LPTIM_INT_ARRMIE);       
  61. }

  1. void LPTIM_WKUP_IRQHandler(void)
  2. {
  3.     if (LPTIM_Flag_Get(LPTIM, LPTIM_INTSTS_FLAG_ARRM) != RESET)
  4.     {
  5.         LPTIM_FLAG_Clear(LPTIM, LPTIM_INTSTS_FLAG_ARRM);
  6.         EXTI_Flag_Status_Clear(EXTI_LINE20);
  7.     }
  8. }
测试在计数到达65535时不会触发中断
powerantone 发表于 2024-12-5 14:42 | 显示全部楼层
可能未正确配置LPTIM的中断源或中断优先级。
flycamelaaa 发表于 2024-12-5 14:45 | 显示全部楼层
在中断服务程序(ISR)中可能存在逻辑错误,导致中断无法正确触发或处理。
flycamelaaa 发表于 2024-12-5 14:46 | 显示全部楼层
可能存在其他任务或中断干扰了LPTIM的正常工作。
probedog 发表于 2024-12-5 16:00 | 显示全部楼层
重装载值设置过大?
stormwind123 发表于 2024-12-5 17:00 | 显示全部楼层
可能未使能LPTIM的中断功能。
classroom 发表于 2024-12-5 20:00 | 显示全部楼层
编码器模式配置问题
laocuo1142 发表于 2024-12-5 20:00 | 显示全部楼层
可能未正确配置LPTIM的编码器模式参数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:苏州澜宭自动化科技嵌入式工程师
简介:本人从事磁编码器研发工作,负责开发2500线增量式磁编码器以及17位、23位绝对值式磁编码器,拥有多年嵌入式开发经验,精通STM32、GD32、N32等多种品牌单片机,熟练使用单片机各种外设。

568

主题

4086

帖子

56

粉丝
快速回复 在线客服 返回列表 返回顶部