找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2218|回復(fù): 3
收起左側(cè)

請(qǐng)問(wèn)HAL庫(kù)開(kāi)啟定時(shí)器中斷后,自動(dòng)進(jìn)入一次中斷的原因

[復(fù)制鏈接]
ID:585428 發(fā)表于 2022-7-22 10:31 | 顯示全部樓層 |閱讀模式
我在做stm32的定時(shí)器TIM8  PWM輸出實(shí)驗(yàn)時(shí),配置完后,在TIM8_UP_TIM13_IRQHandler中斷上打了斷點(diǎn),發(fā)現(xiàn)每次執(zhí)行完HAL_NVIC_EnableIRQ(ATIM_TIMX_NPWM_IRQn);這個(gè)語(yǔ)句后,都會(huì)自動(dòng)進(jìn)入一次中斷。清除更新中斷標(biāo)志位也不行。因?yàn)镠AL_NVIC_EnableIRQ(ATIM_TIMX_NPWM_IRQn);執(zhí)行完后會(huì)自動(dòng)將相關(guān)標(biāo)志位置1.
請(qǐng)問(wèn)有什么好的辦法,可以讓定時(shí)器配置完后,不自動(dòng)進(jìn)一次中斷。

  1. //PWM輸出初始化配置
  2. void atim_timx_npwm_chy_init(uint16_t arr, uint16_t psc)
  3. {
  4.     GPIO_InitTypeDef gpio_init_struct;

  5.     ATIM_TIMX_NPWM_CHY_GPIO_CLK_ENABLE();                                           /* TIMx通道IO時(shí)鐘使能 */
  6.     ATIM_TIMX_NPWM_CHY_CLK_ENABLE();                                                /* TIMx時(shí)鐘使能 */

  7.     gpio_init_struct.Pin = ATIM_TIMX_NPWM_CHY_GPIO_PIN;                             /* 通道y的GPIO */
  8.     gpio_init_struct.Mode = GPIO_MODE_AF_PP;                                        /* 復(fù)用推挽輸出 */
  9.     gpio_init_struct.Pull = GPIO_PULLUP;                                            /* 上拉 */
  10.     gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;                                  /* 高速 */
  11.     gpio_init_struct.Alternate = ATIM_TIMX_NPWM_CHY_GPIO_AF;                        /* 端口復(fù)用 */
  12.     HAL_GPIO_Init(ATIM_TIMX_NPWM_CHY_GPIO_PORT, &gpio_init_struct);                 /* 初始化IO */
  13.    
  14.     g_timx_npwm_chy_handle.Instance = ATIM_TIMX_NPWM;                               /* 定時(shí)器x */
  15.     g_timx_npwm_chy_handle.Init.Prescaler = psc;                                    /* 定時(shí)器分頻 */
  16.     g_timx_npwm_chy_handle.Init.CounterMode = TIM_COUNTERMODE_UP;                   /* 遞增計(jì)數(shù)模式 */
  17.     g_timx_npwm_chy_handle.Init.Period = arr;                                       /* 自動(dòng)重裝載值 */
  18.     g_timx_npwm_chy_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;  /* 使能TIMx_ARR進(jìn)行緩沖 */
  19.     HAL_TIM_PWM_Init(&g_timx_npwm_chy_handle);                                      /* 初始化PWM */


  20.     timx_oc_npwm_chy.OCMode = TIM_OCMODE_PWM1;                                      /* 模式選擇PWM1 */
  21.     timx_oc_npwm_chy.Pulse = ( arr + 1 )/2;                                         /* 比較值為重裝載值的50%,即占空比為50% */
  22.     timx_oc_npwm_chy.OCPolarity = TIM_OCPOLARITY_HIGH;                              /* 輸出比較極性為高 */
  23.     HAL_TIM_PWM_ConfigChannel(&g_timx_npwm_chy_handle, &timx_oc_npwm_chy, ATIM_TIMX_NPWM_CHY); /* 配置TIMx通道y */
  24.     HAL_TIM_PWM_Start(&g_timx_npwm_chy_handle, ATIM_TIMX_NPWM_CHY);                 /* 開(kāi)啟對(duì)應(yīng)PWM通道 */

  25.                 __HAL_TIM_ENABLE_IT(&g_timx_npwm_chy_handle, TIM_IT_UPDATE);                    /* 開(kāi)啟更新中斷 */
  26.                   
  27.     HAL_NVIC_SetPriority(ATIM_TIMX_NPWM_IRQn, 1, 3);                                /* 設(shè)置中斷優(yōu)先級(jí),搶占優(yōu)先級(jí)1,子優(yōu)先級(jí)3 */
  28.                 HAL_NVIC_EnableIRQ(ATIM_TIMX_NPWM_IRQn);                                        /* 開(kāi)啟ITMx中斷 */
  29. //使能中斷后,會(huì)進(jìn)入到中斷中,然后判斷后,關(guān)閉定時(shí)器(ATIM_TIMX_NPWM->CR1 &= ~(1 << 0); )
  30. }


  31. //定時(shí)器中斷
  32. void TIM8_UP_TIM13_IRQHandler(void)
  33. {
  34.     uint16_t npwm = 0;

  35.     /* 以下代碼沒(méi)有使用定時(shí)器HAL庫(kù)共用處理函數(shù)來(lái)處理,而是直接通過(guò)判斷中斷標(biāo)志位的方式 */
  36.     if(__HAL_TIM_GET_FLAG(&g_timx_npwm_chy_handle, TIM_FLAG_UPDATE) != RESET)
  37.     {}

  38. }
復(fù)制代碼




回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-7-22 19:17 | 顯示全部樓層
用到的時(shí)候再打開(kāi)中斷,或者加一個(gè)標(biāo)志位放棄第一次中斷操作。
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2022-7-29 15:47 | 顯示全部樓層
本帖最后由 yzwzfyz 于 2022-8-1 08:50 編輯

原因是,的確中斷條件具備了。
雖然你清了標(biāo)記,但你無(wú)法證明,清除之后中斷條件消失了。
回復(fù)

使用道具 舉報(bào)

ID:139866 發(fā)表于 2022-8-10 17:54 | 顯示全部樓層
這跟你用不用hal庫(kù)沒(méi)關(guān)系,用標(biāo)準(zhǔn)庫(kù)有時(shí)候也會(huì)這樣,對(duì)程序基本不影響,可以試試這樣,先清除中斷標(biāo)志,然后使能定時(shí)器中斷
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表