Chia sẻ STM32_Study: #02-SysTick module

Thảo luận trong 'Họ ARM'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. dungvt

    dungvt VIP

    Tham gia ngày:
    15/4/13
    Bài viết:
    582
    Đã được thích:
    905
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nơi ở:
    HCM
    System Tick là một bộ Timer 24 bit count down, auto-reload. Timer này là chuyên biệt của core ARM nhưng cũng có thể sử dụng như một bộ downcounter thông dụng. SysTick sẽ gây một sự kiện ngắt khi giá trị xung clock về 0. Ta thường hay dùng SysTick làm bộ đếm của hệ thống và delay một khoảng thời gian với độ chính xác cao.
    Xét ví dụ sau: Có 4 led nối lần lượt vào PA0, PA1, PA2, PA3. Viết chương trình sáng lần lượt PA0, PA1, PA2, PA3 theo chu kỳ 500ms (dùng SysTick Timer).
    P3.
    Với ví dụ này thì chúng ta sử dụng lại "LED module" của bài tập trước
    1. SysTick module - Delay in milisecond
    SysTick module cung cấp hàm
    Mã:
    void SysTick_DelayMs(uint32_t nTime)
    để delay một khoảng thời gian có timebase là 1 milisecond. Vì vậy muốn delay một khoảng thời gian 500ms (theo ví dụ) thì ta chỉ việc gọi SysTick_DelayMs(500)
    Lời giải của ví dụ trên như sau:
    Mã:
    /* Function to turn off all leds */
    void TurnOffAllLeds(void)
    {
      LED1_OFF;
      LED2_OFF;
      LED3_OFF;
      LED4_OFF;
    }
    
    int main(void)
    {
      /* Configure SysTick module */
      SysTick_Configuration();
      /* Configure LEDs module */
      LED_Configuration();   
     
      while (1)
      {
         /* Only LED1 ON */
         TurnOffAllLeds();
         LED1_ON;
         SysTick_DelayMs(500);
         
         /* Only LED2 ON */
         TurnOffAllLeds();
         LED2_ON;
         SysTick_DelayMs(500);
         
         /* Only LED3 ON */
         TurnOffAllLeds();
         LED3_ON;
         SysTick_DelayMs(500);
         
         /* Only LED4 ON */
         TurnOffAllLeds();
         LED4_ON;
         SysTick_DelayMs(500);
      }
    }
    
    2. SysTick module - Timeout
    Timeout thường hay sử dụng khi chúng ta làm về truyền thông, hay chờ đợi một sự kiện nào đó mà ta không biết trước là nó có xảy ra hay không.
    Ví dụ khi ta làm về truyền thông 2 con STM32 bằng I2C, ta hay viết:
    P5.
    viết vòng lặp while khi check sự kiện thực sự nguy hiểm, vì có thể một lúc nào đó bộ I2C của chú STM32 bị problem thì chương trình của ta sẽ chết cứng ở đây.
    Thay vào đó ta dùng Timeout của SysTick:
    P6.
    Như vậy ta thấy sau Timeout 10ms mà không có gì chuyển biến thì ta thoát được vòng lặp while :D
    Okie, với module này mình xin kết thúc ở đây. Các bạn down module ở file đính kèm nhé.
     

    Các file đính kèm:

    ga_cong, mbed, Dewdrops10 others thích bài này.
  2. bibacky

    bibacky Học sinh trung cấp

    Tham gia ngày:
    3/7/13
    Bài viết:
    55
    Đã được thích:
    9
    Điểm thành tích:
    8
    Giới tính:
    Nam
    anh ơi! Anh có project nào viết về kết nối usb không. Hướng dẫn em với :).Em đang nghiên cứu mà thấy bế tắc quá ạ
    Em cảm ơn
     
  3. vietthai

    vietthai Kỹ sư

    Tham gia ngày:
    14/11/13
    Bài viết:
    170
    Đã được thích:
    87
    Điểm thành tích:
    28
    Giới tính:
    Nam
    rất cám ơn bác vì cách viết rất sáng sủa và luôn đi thẳng vào trọng tâm của vấn đề nhờ bác em tiết kiệm đc khối thời gian
     
  4. tam762410

    tam762410 Sinh viên đại học

    Tham gia ngày:
    20/2/13
    Bài viết:
    45
    Đã được thích:
    31
    Điểm thành tích:
    18
    Giới tính:
    Nam
    có thể sử dụng cho STM32F4 không bạn.. Với lại có thể giải thích cho mình hiểu phần cấu hình của nó được không.. Xung Clock Systick có giá trị bao nhiêu trong ví dụ trên...
     
  5. tam762410

    tam762410 Sinh viên đại học

    Tham gia ngày:
    20/2/13
    Bài viết:
    45
    Đã được thích:
    31
    Điểm thành tích:
    18
    Giới tính:
    Nam
    à mình đã tìm ra.. Cám ơn sự chia sẽ của bạn.........
    SysTick interrupt period = the Reload Value register divided by clock frequency
    = (SystemCoreClock/1000)/SystemCoreClock = 1/1000 = 1m
     
  6. vietthai

    vietthai Kỹ sư

    Tham gia ngày:
    14/11/13
    Bài viết:
    170
    Đã được thích:
    87
    Điểm thành tích:
    28
    Giới tính:
    Nam
    her tự nói tự trả lời lun cha
     
    tam762410 thích bài này.
  7. tam762410

    tam762410 Sinh viên đại học

    Tham gia ngày:
    20/2/13
    Bài viết:
    45
    Đã được thích:
    31
    Điểm thành tích:
    18
    Giới tính:
    Nam
    ngồi mò móc tí ra đó mà..:3
     
  8. vietthai

    vietthai Kỹ sư

    Tham gia ngày:
    14/11/13
    Bài viết:
    170
    Đã được thích:
    87
    Điểm thành tích:
    28
    Giới tính:
    Nam
    cái món stm nầy nó có tốc độ lấy adc là bao nhiêu j giờ mình thấy sao nó rẻ quá
     
  9. kakaducsy

    kakaducsy Kỹ sư

    Tham gia ngày:
    13/10/12
    Bài viết:
    150
    Đã được thích:
    54
    Điểm thành tích:
    28
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên
    Anh ơi,sự khác nhau của system tick và ngắt timer là gì,em thấy nó giống nhau mà
     
  10. ga_cong

    ga_cong Kỹ sư

    Tham gia ngày:
    14/10/12
    Bài viết:
    295
    Đã được thích:
    121
    Điểm thành tích:
    43
    Giới tính:
    Nam
    dungvt bài viết của bác rất hay, tôi chỉ có 1 góp ý rất nhỏ là những bức ảnh có code thì lại bị che mất vài chữ quan trong.
     

Chia sẻ trang này