Thông báo

Collapse
No announcement yet.

STM32 timer

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • STM32 timer

    Chào toàn thể anh em của diễn đàn.
    Mình đang bước đầu tìm hiểu về dòng ARM cotex M3 STM3210D thông qua board OPENCMX-STM3210D. Giờ mình muốn dùng timer 2 để tạo ra ngắt.Cứ mỗi khi ngắt xảy ra thì sẽ làm cho đèn led chớp tắt.Nhưng mình vẫn chưa biết được cách thiết lập để được giá trị timer mong muốn (200ms chẳng hạn ).Cụ thể ở đây là các giá trị cho TIM_Period ,TIM_Prescaler và TIM_ClockDivision.AE ở đây ai có kinh nghiệm về vấn đề này có thể giúp mình được ko.

    /* Time base configuration */
    TIM_TimeBaseStructure.TIM_Period = 9999;
    TIM_TimeBaseStructure.TIM_Prescaler = 719;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  • #2
    Board OPENCMX-STM3210D sử dụng chip STM32F103RCT6, thuộc dòng Performance line của ST. Bạn nên đọc kĩ datasheet của con này và tham khảo thêm về thư viện CMSIS và bộ thư viện ngoại vi chuẩn tương thích với CMSIS của ST. Mình sẽ gửi cho bạn link 1 ví dụ sử dụng chip này làm PWM có sử dụng timer 2 biên dịch trên KEIL 4.
    Về cách thiết lập giá trị nạp vào Timer 2 bạn nên đọc kĩ datasheet, nó liên quan tới tốc độ tối đa của dòng performance line là 72MHz, MCU này có 3 bus chính đó là AHB (Advanced High performance Bus) APB1 (Low speed Advanced Peripheral Bus) APB2 (High speed Advanced Peripheral Bus) AHB và APB2 có thể đạt max speed là 72MHz, còn APB1 chỉ đạt tối đa 36MHz, do đó bạn chú ý set clock không được quá 36MHz vì Timer 2 được điều khiển bằng bus APB1.
    Về các giá trị TIM_Period, TIM_Prescaler, TIM_ClockDivision, bạn có thể set như sau để tạo ra tần số Timer 2 là 5Hz (T=200ms)
    Đầu tiên là phải set tần số của bus APB1:
    RCC_PCLK1Config(RCC_HCLK_Div16); /* PCLK1 = fAPB1, RCC_HCKL = 72MHz  fAPB1 = 72/16 = 4.5MHz, HCLK_Div16 biểu thị cho giá trị prescaler là 16. */
    Vì prescaler = 16 !=1 nên TIM2CLK=2*PCLK1 phần clock tree của tài liệu hướng dẫn sử dụng STM32 có nói rõ về điều này.
    Vậy ta có TIM2CLK=2*PCLK1=4.5*2=9MHz.
    Nếu chọn giá trị của TIM_Prescaler là 1800 thì ta sẽ có tần số Timer 2 counter clock là 9MHz/1800=5MHz.
    Giá trị của TIM_Period sẽ được nạp vào thanh ghi TIM2_ARR, với TIM_Period = 999 thì ta có tần số Timer 2 là fTIM2=Timer2 counter clock/(ARR+1) = 5MHz/(999+1) = 5Hz. 5Hz là tần số Timer 2 mà ta cần. Về TIM_ClockDivision mình chưa tìm hiểu nên chưa rõ, mình thấy để bằng 0 vẫn chạy ổn.
    Có thể dùng luôn chế độ Output Compare để điều chế độ rộng xung làm sáng tắt Led.
    Để hiểu rõ hơn mời bạn tải file project ứng dụng được trên board OPENCMX-STM32f10D
    stm32_pwm_demo.rar

    trên đây là những hiểu biết của mình về Timer STM32F103RCT6, vì mới tìm hiểu về ARM nên có thể còn nhiều thiếu sót, mọi người cứ góp ý sửa sai

    Comment


    • #3
      có bác nào biết ở Hà Nội có chỗ nào bán kit demo stm32 ko vậy?e thấy mỗi trang arm.vn bán nhưng tận HCM,

      Comment


      • #4
        bên arm.vn có thể ship ra HN cho bạn, chỉ thêm vài chục ngàn thôi.

        Comment


        • #5
          mình đã mua được rùi, cho mình hỏi code mình làm nháy led thế này, biên dịch và nạp ngon, nhưng đưa ra chân led chẳng thấy j, mình dùng kit stm32f103rdt6 của ...thinhel
          #include "stm32f10x.h"

          GPIO_InitTypeDef GPIO_InitStructure;

          /* Private function prototypes -----------------------------------------------*/
          void Delay(__IO uint32_t nCount);

          int main(void)
          {
          GPIO_InitTypeDef GPIO_InitStructure;

          /*!< At this stage the microcontroller clock setting is already configured,
          this is done through SystemInit() function which is called from startup
          file (startup_stm32f10x_xx.s) before to branch to application main.
          To reconfigure the default setting of SystemInit() function, refer to
          system_stm32f10x.c file
          */

          /* Enable GPIOB clocks */
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

          /* Configure PB.1 as output push-pull */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
          GPIO_Init(GPIOB, &GPIO_InitStructure);

          while (1)
          {

          GPIO_SetBits( GPIOB, GPIO_Pin_1);
          /* Insert delay */
          Delay(5);
          GPIO_ResetBits( GPIOB, GPIO_Pin_1);
          /* Insert delay */
          Delay(5);
          }
          }

          /**
          * @brief Inserts a delay time with resolution is 10 milisecond..
          * @param nCount: specifies the delay time length.
          * @retval None
          */
          void Delay(__IO uint32_t num)
          {
          __IO uint32_t index = 0;

          /* default system clock is 72MHz */
          for(index = (720000 * num); index != 0; index--)
          {
          }

          Comment


          • #6
            sử dụng system tick để làm delay, chuẩn nhất!

            Comment

            Về tác giả

            Collapse

            mashima0905 Tìm hiểu thêm về mashima0905

            Bài viết mới nhất

            Collapse

            • Andrea14
              Vấn đề về tốc độ quay
              bởi Andrea14
              Chào mọi người,

              Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
              Hôm qua, 12:42
            • bqviet
              Trả lời cho Đấu tắt điện cho máy tính bảng
              bởi bqviet
              Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
              06-12-2025, 17:17
            • nguyendinhvan
              Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
              bởi nguyendinhvan
              Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
              05-12-2025, 19:59
            • afrendly
              Trả lời cho Đấu tắt điện cho máy tính bảng
              bởi afrendly
              Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
              04-12-2025, 01:27
            Đang tải...
            X