移植正点原子LCD屏程序

一、开发环境介绍+参考视频

笔者使用的是cubemx + cmake + arm-none-eabi-gcc +openocd的开发环境。

b站视频

注:移植之前一定要找到对应芯片的LCD程序,F1和F4的结构体定义不统一,跨芯片移植需要改的东西很多

二、具体流程

1、拷贝四个 .c 和 .h 文件到自己的BSP文件夹

2、在cmakelist中定义include,source和define

# Add sources to executable
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
    # Add user sources here
    ${CMAKE_SOURCE_DIR}/User/BSP/LCD/Src/lcd.c
    ${CMAKE_SOURCE_DIR}/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.c
    ${CMAKE_SOURCE_DIR}/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.c
)

# Add include paths
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
    # Add user defined include paths
    ${CMAKE_SOURCE_DIR}/User/BSP/LCD/Inc
)

# Add project symbols (macros)
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
    # Add user defined symbols
    HAL_SRAM_MODULE_ENABLED
)

其中 HAL_SRAM_MODULE_ENABLED是一定要定义的,而且在cubemx中生成的代码一定不要勾选只生成必要文件 ,不然 lcd.c 中就会缺少文件。

3、修改拷贝的四个文件

去除所有不必要的引用

1、lcd.c

去掉多余文件,这些函数我们在cubemx中已经定义了,引用main.h就能使用了

2、lcd_ex.c

在该文件中,除了需要去除多余include,还有重定义下delay_ms,不然也会编译报错:未定义函数。这里是简单封装成HAL_Delay();

void delay_ms(int32_t t){
    HAL_Delay(t);
}

三、实验效果

笔者在F103ZET6和F407IGT6上都成功移植了。如果有报错,可以借助claude code解决。

posted @ 2026-03-26 13:37  alanala  阅读(13)  评论(0)    收藏  举报