Trong bài trước chúng ta đã làm quen với STM32CubeMonitor, tìm hiểu được các chức năng của nó, cũng như cách nó làm việc  và kèm theo vài ví dụ đơn giản, hôm nay mình tiếp tục nghiên cứu thêm 1 chút với thanh niên này để xem nó có thể làm được thêm gì nữa. Ở bài viết này mình sẽ tìm hiểu về cách read variable từ MCU RAM.

Chuẩn bị

  • Phần cứng STM32F407 kit là đồ mình dùng trong bài viết này
  • Dây cáp
  • Môi trường cài đặt

Nếu mọi thứ chưa sẵn sàng mời bạn back về lại bài viết sau trước khi chúng ta bắt đầu

Hướng dẫn sử dụng STM32CubeMonitor | Học ARM
Hôm nay trong quá trình tìm lại tool STMStudio thì vô tình mình đã thấy nó đã quá cũ và không còn được khuyến khích sử dụng nữa, thay vào đó lại là một tool rất mới nhưng không hề xa lạ với chúng ta. STM32CubeMonitor. Nay chia sẻ cho anh em cùng tìm hiểu về tool này xem nó ngon lành như thế nào nhé…

Viết chương trình cơ bản với STM32CubeIDE

Tạo variable

Để có thể truy cập vào biến trong firmware, mình sẽ viết một chương trình cơ bản define biến basicCounter kiểu dữ liệu Unsigned 16-bit, chương trình sẽ tăng giá trị basicCounter 500ms một lần

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint16_t basicCounter = 0;
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_Delay(500);
	  HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
	  basicCounter += 1;
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

Lấy tên biến từ file

Sau khi generate code cũng như build hoàn thành, ta sẽ có file thực thi elf như hình dưới

Với STMCubeIDE ta sẽ có file thực thi dạng elf, tuy nhiên CubeMonitor vẫn support file .out và .axf của keil C nên thoải mái con gà mái nhá
Thêm 1 lưu ý nữa là sau khi build ae nhớ flash file xuống kit luôn nha

Cấu hình với STM32CubeMonitor

Thêm mới exe-config...

  1. Click đôi chuột vào “myVariables”, sau đó chỉnh sửa thuộc tính của nó như hình bên dưới
  2. Click vào biểu tượng bút của “Executable"

Tạo exe-config

  1. Điền tên vào trong config
  2. Điền “Folder” mà chứa file elf file ở đây là C:\STM32CubeMonitor_Lab01
  3. Chọn file elf từ danh sách
  4. Chọn Add/Update

Chọn variable trong “Variable List”

  1. Chọn basicCounter
  2. Click vào “Add” để thêm “myVariables” vào danh sách quan sát

Giờ thì danh sách variable đã hiển thị thông tin

  • Tên: basicCounter
  • Địa chỉ: 0x20000028
  • Kiểu dữ liệu: Unsigned 16-bit

Lưu và monitor

Sau khi hoàn thành các bước trên ta cần lưu flow lại. Dấu chấm xanh trên “myVariables” chỉ cho chúng ta biết rằng cấu hình đã được thay đổi. Giờ thì click vào “Deploy” để hương thành quả thôi

Xem dashboard

Sau khi có thông báo “Successfully deployed” ta có thể click vào nút Dashboard để quan sát

Có vẻ là có chút lỗi, do đổi tên biến từ myVarConfig thay cho myVariables nên ta phải có một chút thay đổi  như sau, sau đó deploy lại và quan sát dashboard thôi

Chạy acquisition

Click vào nút  “START ACQUISITION” ta sẽ thấy  “basicCounter” sẽ được đọc tuần tự từ MCU RAM memory và giá trị của nó sẽ tăng dần.

Để dừng việc đọc bạn chỉ cần click vào nút “STOP ACQUISITION”

Để quan sát thời gian và giá trị được hiển thị

  • Click vào “Show Points” checkbox, ta sẽ thấy "basicCounter" được tăng lên 1 và tăng mỗi 500ms như trong code ban đầu.
  • Bạn có thể sử dụng tính năng thu phóng để có độ chính xác cao hơn. Ta có thể chọn Zoom hoặc Brush. Trong chế độ Zoom, ta còn có thể phóng to đường cong bằng cách sử dụng chuột để chọn một vùng.
Lưu ý nhỏ: không đồng thời sử dụng stlink để flash và dùng monitor cùng 1 lúc, do đó chỉ sử dụng được 1 trong 2, nếu có hiện tượng không flash được thì bạn phải tắt STM32CubeMonitor và ngược lại.

Kết

Bài này đơn giản nhẹ nhàng hơn, bạn có thể biết được cách lập trình STM32 để tạo ra một biến tăng dần và đọc giá trị của biến đó thông qua STM32CubeMonitor. Chuẩn bị tinh thần nghỉ ngơi để tiếp tục với bài ghi giá trị xuống dưới variable nhé