Hỏi về ngắt timer trong STM32F4

AE cho hỏi cái biến time trong hàm xử lý ngắt timer 4 của STM32F4 này có chức năng là gì???

void TIM4_IRQHandler(void)
  {
    static uint32_t time=0;
    if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
    {
      if(++time>1000)
      {
        GPIO_ToggleBits(GPIOD,GPIO_Pin_12);
        time = 0;
      }
     TIM_ClearITPendingBit(TIM4, TIM_IT_Update); 
    }
  }

Biến time này dùng để đếm số lần xảy ra ngắt, nếu lớn hơn 1000 thì nháy ở Pin_12 (chắc là led).
Nhưng theo như code thì có vẻ sai, vì vừa vào hàm đã gán bằng 0 mất rồi nên sẽ không bao giờ nháy được đâu. :sweat_smile:

các này dùng timer đếm biến time, thì time cứ đến 1000 thì đảo bit

hình như bỏ static đi là đc

opps, code vẫn chạy bình thường nha, mình quên để ý đã khai báo static [quote=“Tran_Anh_Vu, post:1, topic:24014”]
static uint32_t time=0
[/quote]
Nếu bỏ static thì biến time sẽ luôn bằng 0.
Thêm nữa, trong lập trình nhúng, nhất là các biến trong xử lý ngắt thì nên khai báo là volatile để tránh khi optimize code biến này không được cập nhật. Do đó chúng ta nên khai báo biến time là: volatile static uint32_t time = 0;

Trong ngắt nào mà có khai báo biến thì luôn luôn nên Volatile à bạn? Tiện thể có phải bạn dev nhúng à, có tài liệu gì hay, or kinh nghiệm, project gì stm32f4 f1 code về CAN/LIN, USB xin với? Tks

Những biến trong xử lý ngắt thì nên thêm volatile
Các project thì trên mạng nhiều lắm, bạn tìm kiếm thêm xem. Các chuẩn truyền thông cơ bản thì có nhiều tài liệu rồi, bạn làm quen 1 cái dần dần đọc hiểu sẽ nhanh hơn.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?