toilet

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. Đăng 29/6/14 #1

    dungvt VIP

    Số bài viết: 571
    Đã được thích: 888
    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.
    #1
  2. Đăng 30/6/14 #2

    bibacky Học sinh trung cấp

    Số bài viết: 55
    Đã được thích: 9
    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
    #2
  3. Đăng 30/6/14 #3

    vietthai Kỹ sư

    Số bài viết: 170
    Đã được thích: 87
    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
    #3
  4. Đăng 30/6/14 #4

    tam762410 Sinh viên đại học

    Số bài viết: 45
    Đã được thích: 31
    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...
    #4
  5. Đăng 30/6/14 #5

    tam762410 Sinh viên đại học

    Số bài viết: 45
    Đã được thích: 31
    à 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
    #5
  6. Đăng 30/6/14 #6

    vietthai Kỹ sư

    Số bài viết: 170
    Đã được thích: 87
    her tự nói tự trả lời lun cha
    tam762410 thích bài này.
    #6
  7. Đăng 30/6/14 #7

    tam762410 Sinh viên đại học

    Số bài viết: 45
    Đã được thích: 31
    ngồi mò móc tí ra đó mà..:3
    #7
  8. Đăng 30/6/14 #8

    vietthai Kỹ sư

    Số bài viết: 170
    Đã được thích: 87
    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á
    #8
  9. Đăng 20/9/15 #9

    kakaducsy Kỹ sư

    Số bài viết: 151
    Đã được thích: 54
    Anh ơi,sự khác nhau của system tick và ngắt timer là gì,em thấy nó giống nhau mà
    #9
  10. Đăng 20/9/15 #10

    ga_cong Kỹ sư

    Số bài viết: 290
    Đã được thích: 119
    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.
    #10

Chia sẻ trang này