- 驱动来自小华的3.3.0版本,修改了部分代码,添加了部分功能.
- 支持配置为
bootloader,app,normal三种模式.
- 还支持是否有
rt-thread系统.
- bootloader模式下,flash前128KB为bootloader,其余为app.
- 添加了
printf支持浮点打印.
- 当使用gcc-arm-none-eabi,11及以上版本的编译器时,编译时会出现
LOAD segment with RWX permissions 警告,toolchain中可以忽略这个警告,但是忽略参数11版本以下的又不支持,所以保留了这个警告,修改链接脚本也可以消除此警告,但是同样不支持11版本以下的编译器,固没做修改.
- 使用严格的编程模式,任何警告都视为错误,停止编译,可以养成好编程习惯.
hc32_ll_can.c中const static uint8_t m_au8DLC2WordSize[16U]修改为static const uint8_t m_au8DLC2WordSize[16U] 将static放在最前面,以规范代码,去除警告.
- 当有
rt-thread
- 修改了
startup_hc32f460.S中bl main修改为bl entry来支持rt-thread系统.
- 修改了
hc32f460xI.ld和hc32f460xG.ld链接脚本,来支持rt-thread系统相关自动初始化函数,来保证不被编译器优化.
- 去除了usb驱动,需要其它文件,还没研究.
- Cmake下载
- 安装Cmake,会自动将cmake安装到环境变量中,如果
cmake提示未找到要手动将cmake的bin目录加入到环境变量中.
- MinGW下载
- 安装MinGW编译器,如果是是解压类型,解压后把bin目录加入到环境变量中.
- gcc-arm-none-eabi下载
- 安装gcc-arm-none-eabi,如果是解压型的,解压后把bin目录加入到环境变量中.
- pyOCD安装方法,这是下载和调试mcu的工具,只编译的话,不需要.
- 还可以安装libusb,来显示更多调试信息,比如断言.
git submodule add https://github.com/nczyw/hc32f460-drivers.git drivers
cmake_minimum_required(VERSION 3.27)
# Setup compiler settings
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
# Define the build type
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Debug")
endif()
# Set the project name
set(CMAKE_PROJECT_NAME myproject)
# Driver function selection
set(MCU_TYPE "HC32F460xC" CACHE STRING "Set MCU Type")
set(BOOTLOADER OFF CACHE BOOL "Set to ON if bootloader is enabled")
set(APP OFF CACHE BOOL "Set to ON if app is enabled")
set(RT-THREAD OFF CACHE BOOL "Set to ON if RT-Thread is enabled")
# Include toolchain file
include("drivers/toolchain/gcc-arm-none-eabi.cmake")
# Enable compile command to ease indexing with e.g. clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
# Core project settings
project(${CMAKE_PROJECT_NAME} VERSION 1.0.0)
message("Build type: " ${CMAKE_BUILD_TYPE})
# Enable CMake support for ASM and C languages
enable_language(C ASM)
# Create an executable object type
add_executable(${CMAKE_PROJECT_NAME})
# "Generate hex and bin files and associate them with the clean target."
add_custom_command(
TARGET ${CMAKE_PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${CMAKE_PROJECT_NAME}> ${CMAKE_PROJECT_NAME}.hex
COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${CMAKE_PROJECT_NAME}> ${CMAKE_PROJECT_NAME}.bin
BYPRODUCTS
${CMAKE_PROJECT_NAME}.hex
${CMAKE_PROJECT_NAME}.bin
)
# Include the drivers,Drivers can be loaded using the submodule management method, which is recommended.
add_subdirectory("drivers")
set(DEFINES
# Add user defines
)
file(GLOB SOURCES
# Add user source files
)
set(HEADERS
# Add user headers
)
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
${DEFINES}
)
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
${SOURCES}
)
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
${HEADERS}
)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
# Add user defined libraries
)