Bài 03 : EXTERNAL INTERRUPT với STM32F303CC

Untitled Document

EXTERNAL INTERRUPT với STM32F303CC

  1. Giới thiệu sơ lược về EXTI.
  2. GPIO_EXTI thực ra là ngắt ngoài trong thư viện chuẩn. Lưu ý là mỗi PORT(16 chân GPIO) chỉ có 6 vector:

    • Từ chân Px0 -> Px4 : mỗi chân 1 line ngắt.
    • Chân Px5 -> Px9 : chung 1 line ngắt.
    • Chân Px10 -> Px15 : chung 1 line ngắt.

    Mức ưu tiên ngắt được chia làm cấu hình bao gồm 2 thông số là PreemptionPriority và SubPriority với tổng số bit là 4. PreemptionPriority được ưu tiên số 1, càng nhỏ càng ưu tiên hơn, nếu PreemptionPriority bằng nhau thì xét đến SubPriority, SubPriority càng cao càng ưu tiên hơn.

BÀI 02: GPIO với STM32CubeMX trong STM32F303

BÀI 02: GPIO với STM32CubeMX trong STM32F303

GPIO với STM32CubeMX trong STM32F303.

  1. Cấu hình trên STM32  cubeMx.
  2. Vd : Cấu hình chân PB8 là nút nhấn(input), PB9 là chân LED(output). Khi mỗi lần có có tác động nút nhấn ở chân PB8 thì Led ở chân PB9 sẽ đảo trạng thái. Trạng thái mặc định ban đầu là tắt.

    1. New project . Cửa sổ mới được mở ra. Chọn loại MCU theo tên hoặc theo họ, loại package… Ở đây mình nhớ tên luôn nên gõ vào cho nhanh STM32F303CCT6.
    2. Chọn loại MCU, Double click vào tên MCU được tìm thấy hoặc bấm vào Start project để bắt đầu quá trình cài đặt. Cấu hình thạch anh, chuẩn nạp trước tiên như bài 01. Bài này sử dụng 1 button(mình sử dụng chân PB8, cấu hình input) và 1 led (sử dụng chân PB9, output). Click chuột trái để chọn chức năng cho ngoại vi.Click chuột phải để tạo nhãn cho chân ngoại vi cho dễ nhìn.
    3. Cấu hình clock ở tab clock configuration. Tùy thuộc vào thạch anh sử dụng và các ứng dụng khác nhau mà chỉnh tốc độ clock ở các mode khác nhau. Ở đây mình đã sử dụng thạch anh 8Mhz nên có thể điều chỉnh tốc độ tối đa của HCLK là 72Mhz. Những chỗ nào mà thay đổi giá trị được thì chỗ đó được phép thay đổi clock. Chúng ta có thể quan sát được đầu ra của tất cả các ngoại vi. Khá rõ ràng đúng không.
    4. Tab configuration . Chúng ta chỉ sử dụng GPIO mà không có ngắt nên chỉ quan tâm đến tab GPIO trong mục System. Các thông số như sau:
        • LED –PB9 :
          • GPIO output level : chỉ trạng thái mặc định khi chưa tác động đến nó(trạng thái khởi tạo chương trình).
          • GPIO mode: có 2 mode lựa chọn là Push pull và open drain khi lựa chọn ngõ ra là output. 2 mode này mình đã giải thích trong phần STM8S.
          • GPIO pull up/ pull down: lựa chọn việc nội trở bên trong MCU nối nguồn hay nối đất.
          • Maximum output speed: chỉnh tốc độ tối đa của ngõ ra high, medium, low tương ứng với 50Mhz, 20Mhz, 10Mhz.
          • Fast mode: mode này chỉ áp dụng với một số chân có chức năng I2C.
        • BUTTON – PB8:
          • GPIO mode: chỉ có 1 mode duy nhất là input.
          • GPIO pull up/ pull down : lựa chọn việc có kéo trở nối nguồn hay nối đất.

          Các tab RCC và SYS để mặc định. Nhấn OK để đóng tab.

    5. Cài đặt file xuất ra cho project : vào Project -> settings.
      • Tab project :
        • Projetc name : chứa tên gọi của project.
        • Project location : chứa nơi lưa trữ project.
        • Toolchain /IDE : chọn trình biên dịch mà mình mong muốn.
      • Tab code generate :
        • STM32Cube firmware library package : chọn Copy only the nesscessary library files… để chỉ add những file thư viện cần thiết.
        • Các thư mục khác để mặc định chưa cần quan tâm đến.
      • Tab Advanced Settings : để các thông số mặc định.
    6. Sinh ra code bằng cách nhấn vào biểu tượng hoặc vào Project -> generate code. Chờ quá trình thực hiện xong và mở code lên.
  3. Chỉnh sửa code trên keil C.
  4. Để chạy được chương trình ở lần đầu tiên, cần chọn reset and run trong options of target.

BÀI 01: Hướng dẫn tạo project với STM32CubeMX

Hướng dẫn tạo project với STM32CubeMX.

BÀI 01:
Hướng dẫn tạo project với STM32CubeMX.

  1. Giới thiệu sơ lược.
  2. STM32CubeMX là một phần mềm được cung cấp miễn phí giúp ích cho việc cấu hình ngoại vi, clock, tính toán dòng tiêu thụ, tạo project với nhiều dòng chip ARM STM32… Việc tạo project trở nên đơn giản bằng việc lựa chọn các ngoại vi cần thiết, cấp lock tùy chỉnh mà không cần liên quan đến code.

    Việc tạo project với thư viện chuẩn (standard library) là khá khó khăn vì cần nhiều bước để tạo ra project mới. STM32CubeMX ra đời như một lựa chọn để thay thế điều đó, với giao diện trực quan chúng ta sẽ dể dàng lập trình và có cái nhìn tổng quan hơn.

    Thư viện đi kèm với phần mềm này là STM32Cube HAL, gọi tắt là thư viện HAL, bộ thư viện này được chuẩn hóa, giúp đồng nhất giữa các dòng F0,F1,F2,F3,F4… Nhà sản xuất cũng cung cấp đầy đủ các ví dụ mẫu đi kèm với thư viện này. Cách tốt nhất để tự học là tự tìm hiểu các ví dụ mẫu này.

    Lưu ý: STM32CubeMX không phải là một trình biên dịch, nó chỉ là công cụ để sinh ra code, chúng ta vẫn phải dùng các trình biên dịch thông thường để quan sát, debug, lập trình, sửa lỗi…. Nếu bạn muốn tìm hiều sâu về vi điều khiển hãy bắt đầu nó bằng thư viện chuẩn(standard library) và ngược lai, nếu bạn muốn sử dụng một cách nhanh chóng hãy sử dụng thư viện HAL(STM32Cube HAL).

    Một số tính năng chính:

    • Dễ dàng quan sát các tính năng, thông số của IC.
    • Có cái nhìn tổng quan, bao quát hơn về lựa chọn, cấu hình chân, clock, ngoại vi.
    • Lựa chọn các board thí nghiệm của ST với các thông số cài đặt trước hoặc một MCU cụ thể.
    • Dễ dàng cấu hình ngoại vi, clock, các thông số và tự động sinh ra code.
    • Dễ dàng chuyển đổi giữa các loại MCU STM32 bằng cách tạo project mới một cách nhanh chóng.
    • Dễ dàng xuất file PDF các chân, tính năng… đã cấu hình.
    • Dễ dàng tạo ra project với nhiều trình biên dịch được lựa chọn.
    • Tính toán, quản lí năng lượng dễ dàng hơn.
    • Tự động cập nhật thư viện khi có bản cài đặt mới.
    • Thư viện được đồng nhất nên sẽ không có quá nhiều thay đổi khi chuyển đổi giữa các loại MCU. Ví dụ chuyển từ F1 qua F3, hay F4 và ngược lại.
  3. Cấu hình cơ bản GPIO.
  4. Dòng MCU mà mình sử dụng ở đây là  STM32F303CCT6 nên các ví dụ sẽ sử dụng loại MCU này luôn. Một vài thông số quan trọng mà dòng chip này có là  :

    • Thuộc dòng chip lập trình ARM cortex M4, 32 bit.
    • 48 chân, tốc độ lock tối đa là 72Mhz, bộ nhớ chương trình(flash) 256kbytes, SRAM 40kbytes.
    • Đầy đủ các chức năng như:
      • 4 bộ ADC 12 bit với nhiều channel, 2 kênh DAC 12 bit.
      • 13 timer :  2 watchdog timer, 1 systemtick timer, 10 timer thường với nhiều mode cấu hình.
      • Các giao tiếp : 1 CAN, 1 USB, 3 UART, 3 SPI, 2 I2C , 2 I2S.
      • 1 bộ RTC với đầy đủ chức năng.
      • Các cổng vào OPAMP, COMP.
      • Có touch sensing với 6 group với nhiều kiểu thiết kế để nâng cao hơn số nút nhấn có thể - cái này mình đã thử, khá ngon.
    1. B1 : mở STM32CubeMX, chọn new project để tạo project mới, load project để mở 1 project đã tạo.