Bài 09: RTC với STM32F303CC

Bài 08: RTC với STM32F303CC trong MXCUBE

Bài 09: RTC với STM32F303CC.

  1. Giới thiệu sơ lược về ADC.
  2. RTC(Real time clock ) là bộ thời gian thực được tích hợp sẵn trong STM32F303CC. Thay vì phải gắn thêm IC thời gian thực để đọc được ngày tháng năm, giờ phút giây thì không phải dùng nó khi dùng STM32F303CC. Một số ứng dụng chính như làm đồng hồ, mạch kiểm soát thời gian, báo thức, bộ đếm thời gian…

    Bộ RTC này sử dụng timer độc lập, tách biệt với các timer khác. Việc cài đặt thời gian, đọc thời gian cũng trở nên dễ dàng hơn bằng cách tác động trực tiếp vào các thanh ghi thời gian của MCU.

Export library from existing project in altium

Export library from existing project in altium

Export library from existing project in altium

  1. Giới thiệu.
  2. Lấy thư viện từ schematic hay layout có sẵn. Giải thích cho anh em nào chưa hiểu:

    • Schematic : là sơ đồ nguyên lí tức là sơ đồ kết nối các đường dây với nhau dưới dạng biểu đồ, giản đồ…. Hay được hiểu là cách kết nối để mạch điện được chạy đúng.
    • Layout : là file bố trí, sắp đặt linh kiện, đi các đường dây, chú thích, số lớp di dây … và cũng là nơi được xuất ra file GERBER để các nhà sản xuất mạch có thể gia công chúng.

Bài 08: DAC với STM32F303CC

Bài 08: DAC với STM32F303CC trong MXCUBE

Bài 08: DAC với STM32F303CC.

  1. Giới thiệu sơ lược về ADC.
  2. DAC – Digital to Analog Converter là bộ chuyển đổi số ra tín hiệu tượng tự. Tạm hiểu nôm na là : chân GPIO của STM32 chỉ xuất được 2 giá trị là 0 hoặc 3V3, nếu ta cần 1 giá trị điện áp nằm giữa 0 – 3V3 và có thể thay đổi được thì dùng DAC là cách hữu hiệu nhất.

    Ứng dụng : DAC chủ yếu được ứng dụng trong các thiết bị âm thanh, audio. Ngoài ra nó còn được sử dụng để điều khiển tốc độ của một số driver, tạo các sóng sin, sóng bậc thang….

Bài 07: ADC với STM32F303CC.

Bài 07: ADC với STM32F303CC.

Bài 07: ADC với STM32F303CC.

  1. Giới thiệu sơ lược về ADC.
  2. ADC – Analog to digital Converter là bộ chuyển đổi tín hiệu tương tự sang tín hiệu số. ADC được ứng dụng rất nhiều như đo nhiệt độ, đọc giá trị điện áp, cường độ dòng điện, đọc phím nhấn, đọc giá trị biến trở, bảo vệ động cơ…. Khi tìm hiểu về ADC chúng ta cần tìm hiểu bộ ADC đó là bao nhiêu bit, các phương pháp chuyển đổi. ADC có số bit càng cao tức là độ phân giải của bộ ADC càng lớn, bộ ADC đó càng xịn.

    ADC trong STM32F303CC là bộ ADC có 12 bit - tức là giá trị đọc về nằm trong khoảng 0 ->2^12-1= 4095. Giá trị điện áp đầu vào bộ ADC được cung cấp trên chân VDDA và thường lấy bằng giá trị cấp nguồn cho vi điều khiển VDD(+3V3) nên với các ứng dụng quan trọng sử dụng ADC phần cứng cần được thiết kế khối nguồn với chân VDDA cẩn thận. STM32F103C8 có 4 kênh ADC đó là ADC1, ADC2, ADC3 và ADC4; số lượng channel của mỗi kênh là khác nhau với nhiều mode hoạt động như: single, continuous, scan hoặc discontinuous. Kết quả chuyển đổi được lưu trữ trong thanh ghi 16 bit với 2 dạng data là MSB là bit cao nhất hoặc LSB là bit cao nhất. Đọc biến trở là ví dụ đơn giản nhất của chức năng ADC:

    Số lượng các chanel ADC của các kênh cho dòng STM32F3:

    Một số tính năng chính được liệt kê như sau:

    • Độ phân giải 12 -10 - 8 - 6 bit tương ứng với giá trị maximum là 4096 – 1024 – 256 - 32.
    • Được chia là các loại phụ thuộc vào tốc độ chuyển đổi như fast channel(5.1 Ms/s) hoặc slow channel(4.8 Ms/s).
    • Thời gian chuyển đổi phụ thuộc vào clock của hệ thống cũng như clock chia cho bộ ADC được sử dụng.
    • Có các ngắt hỗ trợ như End conversion, End of Injected Conversion and Analog Watchdog Event.
    • Single mode hay Continuous mode.
    • Tự động calib và có thể điều khiển hoạt động ADC bằng xung Trigger.
    • Điện áp cung cấp cho bộ ADC là 2.4V -> 3.6V. Nên điện áp Input của thiết bị có ADC 2.4V ≤ VIN ≤ 3.6V.
    • Có bộ DMA giúp tăng tốc độ xử lí.
    • Các tính năng bổ trợ như: hoạt động ở chế độ low-power, kênh cảm biến nhiệt nội bên trong chip, kênh đo điện áp tham chiểu Vref, kênh đo điện áp trên chân Vbat….
  3. Cấu hình trên STM32 CubeMx.
  4. VD: Viết chương trình đọc điện áp trên chân PA0, với độ phân giải là 12 bit, Continuous conversion. Dùng UART2 để hiển thị giá trị ADC lên mà hình máy tính.

    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 STM32F303CC.

Bài 06: UART với STM32F303CC trong MXCUBE


Bài 06: UART với STM32F303CC trong MXCUBE

UART với STM32F303CC

  1. Giới thiệu sơ lược về UART.
  2. UART - Universal synchronous asynchronous receiver transmitter là một ngoại vi cơ bản và thường dùng trong các quá trình giao tiếp với các module như : Xbee, Wifi, Blutooth…. Khi giao tiếp UART kết hợp với các IC giao tiếp như MAX232CP, SP485EEN…. thì sẽ tạo thành các chuẩn giao tiếp RS232, RS485. Đây là các chuẩn giao tiếp thông dụng và phổ biến trong công nghiệp từ trước đến nay.

    Khi ta sử dụng chân UART_CLK thì giao tiếp UART sẽ trở thành giao tiếp đồng bộ và không dùng sẽ là chuẩn giao tiếp không đồng bộ. Các bạn để ý là với bất cứ 1 chuẩn truyền thông nào, khi có sử dụng 1 chân tín hiệu làm chân CLK thì chuẩn giao tiếp đó sẽ là chuẩn giao tiếp đồng bộ và ngược lại. Ở đây mình chỉ đề cập đến giao tiếp UART không đồng bộ.

    Ưu điểm của giao tiếp UART không đồng bộ: tiết kiệm chân vi điều khiển(2 chân), là ngoại vi mà bất kì 1 VĐK nào cũng có, có khá nhiều module, cảm biến dùng UART để truyền nhận data với VĐK. Nhược điểm của loại ngoại vi này là tốc độ khá chậm, tốc độ tối đa tùy thuộc vào từng dòng, quá trình truyền nhận dễ xảy ra lỗi nên trong quá trình truyền nhận cần có các phương pháp để kiểm tra(thông thường là truyền thêm bit hoặc byte kiểm tra lỗi). UART không phải là 1 chuẩn truyền thông, khi muốn nó là 1 chuẩn truyền thông hoặc truyền data đi xa, chúng ta cần phải sử dụng các IC thông dụng để tạo thành các chuẩn giao tiếp đáng tin cậy như RS485 hay RS232....

    Thông thường chúng ta sẽ dùng ngắt nhận UART để nhận dữ liệu vì sử dụng ngắt sẽ tiện lợi, không tốn thời gian chờ cũng như mất dữ liệu.Các tốc độ thường dùng để giao tiếp với máy tính: 600,1200,2400,4800,9600,14400,19200,38400,56000,57600,115200.

    Một số phần mềm giao tiếp với máy tính: hercules_3-2-5,teraterm, Serial-Oscilloscope-v1.5...Một số modulde dùng để giao tiếp với máy tính: CP2102 USB 2.0, USB ra UART dùng PL2303, USB to UART dùng TTL FT232RL, USB ra UART dùng CH340G…

    STM32F303CC có 3 bộ UART với nhiều mode hoạt động, với nhiều bộ UART ta có thể sử dụng được nhiều ứng dụng hơn so với 1 chip điều khiển so với STM8S. Một số tính năng nổi bật như sau:

    • Đầy đủ các tính năng của bộ giao tiếp không đồng bộ.
    • Điều chỉnh baud rate bằng lập trình và tốc độ tối đa lên đến 9Mb/s.
    • Cấu hình với nhiều mode hoạt động.
    • Có lựa chọn khi cấu hình với RS232 hoặc RS485.
    • Độ dài được lập trình là 7, 8 hoặc 9 bit.
    • Cấu hình bit stop hỗ trợ là 1 hoặc 2.
    • Có chân clock nếu muốn chuyển giao tiếp thành đồng bộ.
    • Cấu hình sử dụng 1 dây hoặc 2 dây.
    • Có bộ DMA nếu muốn giảm thời gian truyền nhận.
    • Bit cho phép truyền nhận riêng biệt.
    • Có cờ báo giao tiếp và cớ báo lỗi.
    • Cờ báo ngắt có thể lên đến 14 loại khác nhau.
  3. Cấu hình trên STM32 cubeMx.
  4. Vd: Viết chương trình VĐK nhận được kí tự nào từ máy tính thì gửi lại kí tự đó lên lại máy tính. Sử dụng phần mềm hescules để gửi và quan sát kí tự nhận được. Sử dụng UART2, tốc độ baud là 9600, sử dụng ngắt nhận UART. Led ở chân PB9 sẽ đảo trạng thái mỗi khi nhận được 1 kí tự mới.

    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 STM32F303CC.

Bài 05: PWM với STM32F303CC trong MXCUBE


Bài 05: PWM với STM32F303CC trong MXCUBE

PWM với STM32F303CC

  1. Giới thiệu sơ lược về PWM.
  2. PWM(pulse- with modulation) hay còn gọi nôm na là “băm xung” hay “điều khiển độ rộng xung” là ứng dụng phổ biến và thường dùng trong lĩnh vực điều khiển động cơ. Với động cơ, chúng ta có 3 loại điều khiển chính đó là : điều khiển vị trí, điều khiển vận tốc, điều khiển torque(moment). Khi dùng PWM để điều khiển động cơ chúng ta chú ý các khái niệm cần nắm rõ:

    • Duty cycle : tỷ lệ phần trăm xung ở mức cao.
    • Period : là chu kì xung(bao gồm tổng thời gian mức cao + mức thấp).
    • Pulse width là giá trị của mức cao so với period.
    • PTO là xung vuông có 50% thời gian cao, 50% thời gian thấp.
    • Biên độ xung: là giá trị điện áp của xung khi ở mức cao.
    • Cái khái niệm về tần số, chu kì.

    Các timer có thể phát xung trên vi điều khiển này là :TIM1, TIM2, TIM3,TIM4, TIM8, TIM15, TIM16, TIM17. Mỗi timer có 1 hay nhiều kênh phát xung độc lập. Riêng TIM1 và TIM8 là 2 timer đặc biệt, nhà sản xuất đã ưu tiên nó với nhiều chế độ phát xung hơn, hỗ trợ hiệu quả tối đa cho việc phát xung, bảo vệ… 2 timer này có các kênh PWM đảo (vd: CH1 – CH1N) giúp tránh tình trạng trùng dẫn với nửa cầu H trên và nửa cầu H dưới của mạch driver điều khiển động cơ. Nó có chế độ one-pulse để xuất ra 1 xung hay nhiều xung với số xung đếm được, ngắt input để bảo vệ động cơ, có mode hỗ trợ encoder và cảm biến Hall…

    Sử dụng PWM chủ yếu là để điều khiển động cơ, khi điều khiển cần chú ý là mỗi loại động cơ đều có cơ cấu điều khiển khác nhau, tần số điều khiển cũng khác nhau. Cần chú ý về mục đích điều khiển là tốc độ, vị trí, moment… để xuất xung với số lượng xung, tần số và chu kì thích hợp.

    Trên STM32F303CC thì cần chú ý là sử dụng PWM của timer nào thì cần tra datasheet để biết ngõ ra của timer đó là chân nào, có Remap hay trùng với các chân đặc biệt, các chân timer khác không.

  3. Cấu hình trên STM32 cubeMx.
  4. Cấu hình TIM4 channel 4 với chu kì 1s, duty cycle là 30%.

    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 STM32F303CC.

Bài 04: TIMER BASE VỚI MXCUBE SỬ DỤNG STM32F303CC

Bài 04: TIMER BASE VỚI MXCUBE SỬ DỤNG STM32F303CC

  1. Giới thiệu sơ lược về EXTI.
  2. STM32f303CC có tất cả 13 timer nhưng trong đó đã bao gồm 1 systick timer, 2 watchdog timer. Vậy có 10 timer dùng cho các chức năng như ngắt, timer base, PWM, Encoder, Input capture…. Trong đó TIM1 và TIM8 là Timer đặc biệt, chuyên dụng cho việc xuất xung với các mode xuất xung, các mode bảo vệ đầy đủ hơn so với các timer khác. TIM1, TIM2, TIM3, TIM4, TIM8 là các timer có đầy đủ 4 channel còn các timer còn lại là timer nội hoặc không đầy đủ các channel.

    Có 3 vấn đề về thanh ghi cơ bản cần tìm hiểu trong bài này đó là :

    • Timer clock.
    • Prescaler.
    • Auto Reload Value.

    Prescaler là bộ chia tần số của timer. Bộ chia này có giá trị tối đa là 16 bit tương ứng với giá trị nạp vào là 65535. Các giá trị này có thể được thay đổi và điều chỉnh bằng lập trình. Tần số sau bộ chia này sẽ được tính là:

    fCK_CNT = fCK_PSC/(PSC+1).

    • FCK_CNT: tần số sau bộ chia.
    • fCK_PSC: tần số clock đầu vào cấp cho timer.
    • PSC: chính là giá trị truyền vào được lập trình bằng phần mềm.

    Auto Reload value là giá trị bộ đếm tối đa có thể được điều chỉnh để nạp vào cho timer. Giá trị bộ đếm này được cài đặt tối đa là 32 bit tương ứng với giá trị nạp vào là 4294967295. Tuy nhiên chỉ có timer 2 có được giá trị này, các timer khác đều có tối đa là 16 bit tương ứng với giá trị nạp vào là 65535. Từ các thông số trên ta rút ra công thức cần tính cuối cùng đó là:

    FTIMER= fSYSTEM/[(PSC+1)(Period+1)]

    • Ftimer : là giá trị cuối cùng của bài toán, đơn vị là hz.
    • F system : tần số clock hệ thống được chia cho timer sử dụng, đơn vị là hz.
    • PSC : giá trị nạp vào cho bộ chia tần số của timer. Tối đa là 65535.
    • Period : giá trị bộ đếm nạp vào cho timer. Tối đa là 65535.

    Ngắt tràn timer: khi giá trị đếm của bộ đếm timer(thanh ghi CNT) vượt qua giá trị của Auto Reload Value thì cờ báo tràn sẽ được kích hoạt. Trình phục vụ ngắt tràn sẽ xảy ra nếu được cấu hình cho phép trước đó.

  3. Tạo project với MXCUBE.
  4. Vd: chớp tắt led với chu kì 2s, 1 giây sáng, 1s tắt trên chân PB9, sử dụng ngắt tràn timer1.

    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 STM32F303CC.

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.