Vậy là đã qua 2 bài viết với STM32CubeMonitor, các bạn đã biết cách để đọc dữ liệu và ghi dữ liệu xuống dưới kit STM32F4 discovery thông qua những hình minh họa trực quan sinh động sướng mắt rồi, không biết anh em có còn thắc mắc gì không nhỉ ? Nếu không hôm nay mình qua bài mới, đọc ghi trực tiếp thanh ghi ngoại vi

Đọc ghi vào địa chỉ

Như chúng ta đã biết thì tất cả các địa chỉ của thanh ghi đều có thể truy cập được, tuy nhiên một số thanh ghi sẽ không có biến ở trong file elf. Vậy làm thế nào mà chúng ta có thể đọc nó mà không có tên cụ thể ?

Xét một ví dụ ở kit F407 discovery chúng ta có schematic như sau

https://www.st.com/resource/en/user_manual/dm00039084-discovery-kit-with-stm32f407vg-mcu-stmicroelectronics.pdf

4 LED có sẵn trong đó 2 LED gắn với chân PD12 màu xanh lá, PD13 màu cam.

Những LED này sẽ ON khi trạng thái I/O của nó là 1 và ngược lại

Theo tài liệu RM https://www.st.com/resource/en/reference_manual/dm00031020-stm32f405-415-stm32f407-417-stm32f427-437-and-stm32f429-439-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf

GPIOD base address là 0x40020C00

Thanh ghi ODR sẽ có offset 0x14, lowest byte của thanh ghi ODR là 0x40020C14

Ta sẽ có bảng để control value output của các LED thông qua các thanh ghi như sau

Green LED PD12 Orange LED PD13 ODR(bin) ODR(hex) ODR(dec)
ON ON 0b11000000000000 0x3000 12288
OFF ON 0b01000000000000 0x1000 4096
ON OFF 0b10000000000000 0x2000 8192
OFF OFF 0b00000000000000 0x0000 0

Thêm địa chỉ vào variable list

Click chuột vào myVarConfig node để chỉnh lại thuộc tính như hình

Điều chỉnh source code CubeIDE

Các bạn cần khởi tạo GPIO lại như hình dưới với PD12 PD13 là GPIO_Output và comment out lại phần blink LED

Sau khi generate thì chương trình chính chỉ còn như này

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

    /* USER CODE BEGIN 3 */
  }
    // ....

Kết quả

Giờ thì mở Dashboard lên và ấn vào Start Acquisition. Ta có thể điều khiển được LED tắt sáng thông qua dashboard, bạn có thể nhập các giá trị tương ứng vào ô GPIOD_ODR và quan sát LED sáng tắt trên kit.

Lưu ý: Nếu file elf của chúng ta có thay đổi do build lại code thì các bạn nhớ click vào node để update lại nhé

Kết

Vậy là chúng ta đã biết được cách để cấu hình flow, làm sao để kết nối được với board STM32 thông qua ST-Link, làm sao để lấy được tên variable name trong file excecutable. Làm sao để truy cập được bộ nhớ của STM32, cách đọc ghi sử dụng tên biến và sử dụng địa chỉ. Cách để kéo thả widget vào dashboard cũng như thêm các flow mới cũng như kết nối các node lại với nhau. Thế cũng là đủ xài để tiếp tục phát triển rồi anh chị em ơi.