OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 779|回复: 5

关于定时器定时1秒时间求解

[复制链接]

17

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
277
金钱
277
注册时间
2023-5-29
在线时间
106 小时
发表于 2024-3-1 15:43:10 | 显示全部楼层 |阅读模式
10金钱
需求描述:想通过按键按下的同时,LED亮1秒,1秒钟到了就灭掉,下一次再按下再亮1秒,也就是按键按下LED只亮1秒就停止。
问题描述:用CubeMX生成的代码,主函数初始化后调用:HAL_TIM_Base_Start_IT启动定时器,然后while循环里检测到按键按下则LED亮,再中断回调函数中HAL_TIM_PeriodElapsedCallback关闭LED,我不知道我这样写是否有问题,下载后现象就是,按键按下后有时候LED亮的时间长大概是1秒,但有时候就闪一下就灭了,时间很短根本没到1秒就灭了。
按键换成USMARTPC端给指令控制亮1秒则灭,现象还是有时候到1秒了,有时候没到1秒,闪一下就灭了。
求大佬指导一下

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
277
金钱
277
注册时间
2023-5-29
在线时间
106 小时
 楼主| 发表于 2024-3-1 15:43:11 | 显示全部楼层
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2024-3-4 15:28:37 | 显示全部楼层
上代码
回复

使用道具 举报

17

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
277
金钱
277
注册时间
2023-5-29
在线时间
106 小时
 楼主| 发表于 2024-3-5 17:05:27 | 显示全部楼层

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM5_Init();

  /* USER CODE BEGIN 2 */
        usart_init(115200);
        usmart_dev.init(84);
//        HAL_TIM_Base_Start_IT(&htim5);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
                        text_init(0);
                 HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
       
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

void text_init(uint16_t flag)
{

        if(flag == 1)
        {
                HAL_TIM_Base_Start_IT(&htim5);
                HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
       
        }

}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if (htim->Instance == TIM5)
  {
    HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
  }


}


回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8205
金钱
8205
注册时间
2020-5-11
在线时间
3700 小时
发表于 2024-3-5 17:11:10 | 显示全部楼层
"while循环里检测到按键按下" 是哪几句?
能否加一些中文注释?
发帖里的代码要点击尖括号插入代码.
专治疑难杂症
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2024-3-5 17:15:17 | 显示全部楼层
代码不全,只看到text_init(0);地方,按键在哪处理的,text_init(1);在哪?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 09:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表