STM32CubeMonitor - Đọc giá trị biến từ RAM
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
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...
- 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
- Click vào biểu tượng bút của “Executable"
Tạo exe-config
- Điền tên vào trong config
- Điền “Folder” mà chứa file elf file ở đây là
C:\STM32CubeMonitor_Lab01
- Chọn file elf từ danh sách
- Chọn Add/Update
Chọn variable trong “Variable List”
- Chọn
basicCounter
- 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é