stm32定时器运行和调试不同处

2019-07-14 18:38发布

STM32f103c8中使用定时器,在外部中断服务函数中开启定时器,定时器中断服务函数中关闭定时器中断,遇到问题:调试时可以进入定时器中断服务函数,在实际运行的时候不能进入中断服务函数,很揪心的问题,以前也遇到类似的问题,到底是在什么情况下会产生这种状况,如何避免?
  1. void EXti1_IRQHandler(void)
  2. {
  3.   /* USER CODE BEGIN EXTI1_IRQn 0 */
  4.   /* USER CODE END EXTI1_IRQn 0 */
  5.   HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
  6.   /* USER CODE BEGIN EXTI1_IRQn 1 */
  7. //estimate DIM1 and DIM2 state
  8. //if DIM1 ON,initialize tim3,begin count
  9. //if DIM2 ON,initialize tim4,begin count

  10. if(dim1state)
  11. {
  12.   DIM1 = DIM1_ON;
  13. //  TIM3->CNT = 0;
  14.   TIM3->ARR = set1v;
  15.   TIM3->DIER |= 1;
  16.   TIM3->CR1 |= (1<<0);
  17. }
  18. if(dim2state)
  19. {
  20.   DIM2 = DIM2_ON;
  21. //  TIM4->CNT = 0;
  22.   TIM4->ARR = set2v;
  23.   TIM4->DIER |= 1;
  24.   TIM4->CR1 |= (1<<0);
  25. }
  26. // Tragflog = 1;

  27.   /* USER CODE END EXTI1_IRQn 1 */
  28. }
  29. void TIM3_IRQHandler(void)
  30. {
  31.   /* USER CODE BEGIN TIM3_IRQn 0 */

  32.   /* USER CODE END TIM3_IRQn 0 */
  33.   HAL_TIM_IRQHandler(&htim3);
  34.   /* USER CODE BEGIN TIM3_IRQn 1 */
  35. if(TIM3->SR&0x0001)
  36. {
  37.   //DIM1_OFF
  38.   //stop tim3
  39.   TIM3->DIER &= ~(1<<0);
  40.   DIM1 = DIM1_OFF;
  41.   
  42. }TIM3->SR &= ~(1<<0);
  43.   /* USER CODE END TIM3_IRQn 1 */
  44. }
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
晗曦丶寒惜
1楼-- · 2019-07-14 23:09
 精彩回答 2  元偷偷看……
晗曦丶寒惜
2楼-- · 2019-07-14 23:56
重新弄了一个新程序,只有定时器功能,目测还是有这个问题,使用的是HAL库,判断sr的最低位为1是否有错误,求大神
晗曦丶寒惜
3楼-- · 2019-07-15 05:51
重新使用寄存器配置了一番,目测结果没有出现上述情况,估计HAL库中有什么隐蔽操作,不可而知
晗曦丶寒惜
4楼-- · 2019-07-15 08:50
不要使用HAL库,直接操作寄存器或使用标准库
晗曦丶寒惜
5楼-- · 2019-07-15 09:14
不要使用HAL库,直接操作寄存器或使用标准库。。。。。。。。。。。。。
li_dawn
6楼-- · 2019-07-15 12:46
 精彩回答 2  元偷偷看……

一周热门 更多>