目录

  • Nwatch在stm32上的移植
    • 前言
    • 实验目的
    • 移植
    • game1_task任务相关代码片段
    • 结果
    • 本文中使用的工程

Nwatch在stm32上的移植

本文目标:Nwatch在stm32上的移植

按照本文的描述,应该可以跑通实验并举一反三。

先决条件:装有编译和集成的开发环境,比如:Keil uVision5、STM32CubeMX

使用外设:USART、IIC

前言

NWatch是一个很漂亮的、基于STM32的开源手表项目,我这次学习是为了配合使用FreeRTOS而进行学习的。

官方链接为:

  • GITHUB:https://github.com/ZakKemble/NWatch

  • 作者博客:https://blog.zakkemble.net/diy-digital-wristwatch/

    实验目的

在stm32的平台上移植NWatch的代码,出于学习目的,移植一个游戏进行学习,方便后期继续进行学习FreeRTOS的相关知识点。

移植

移植这3个文件可以在我自己的硬件平台上进行实战,移植的难点就是关于lcd的显示,显示的驱动写得好,移植就顺畅,写得不好移植费劲。

工程中的相关驱动:

开一任务,进行游戏,运行如下的代码:

game1_task任务相关代码片段

void game1_task(void *params){uint8_t dev, data, last_data;g_framebuffer = LCD_GetFrameBuffer(&g_xres, &g_yres, &g_bpp);draw_init();uptMove = UPT_MOVE_NONE;ball.x = g_xres / 2;ball.y = g_yres - 10;ball.velX = -0.5;ball.velY = -0.6;//ball.velX = -1;//ball.velY = -1.1;blocks = pvPortMalloc(BLOCK_COUNT); memset(blocks, 0, BLOCK_COUNT);lives = 3;score = 0;platformX = (g_xres / 2) - (PLATFORM_WIDTH / 2);while (1){/* 读取红外遥控器 */if (0 == IRReceiver_Read(&dev, &data)){if (data == 0x00){data = last_data;}if (data == 0xe0) /* Left */{btnLeft();}if (data == 0x90)/* Right */{btnRight();}last_data = data;}game1_draw();draw_end();// vTaskDelay(5);}}
extern void game1_task(void *params);xTaskCreate(game1_task, "GameTask", 128, NULL, osPriorityNormal, NULL);

结果

这里的核心就是要绘制那些点,哪些地方显示,哪些地方隐藏,球碰到了砖块会怎么样,碰到墙会怎么样,都是在处理这些逻辑。可以看到我这里按下我手里的遥控器,按下向左键时,挡球板向左移动,按下右键时,挡球板向右移动,当然我这里都是学习了前人的经验进行的实战,此次工程为我后面学习更多的freertos知识点提供一些思路,后续会继续学习。

本文中使用的工程