generated from hulk/gd32e23x_template_cmake_vscode
build: 对齐模板工具链与 .vscode,APP 迁移 Bootloader 布局(0x08002000/54K)
工程编译与开发环境(参照 gd32e23x_template_cmake_vscode 模板) - cmake/arm-none-eabi-gcc.cmake:硬编码工具链路径改为 GD32_GCC_BIN 环境变量 / -DTOOLCHAIN_DIRECTORY 参数,与模板逐字一致 - .vscode:launch/tasks/settings/extensions 对齐模板,烧录与调试全部 读取 GD32_GCC_BIN / GD32_OPENOCD_BIN / GD32_OPENOCD_SCRIPTS 环境变量; 新增 J-Link 调试配置与 flash/reset/erase.jlink 脚本 - CMakeLists.txt:POST_BUILD 增加 Application/Application.hex 生成 (J-Link 烧录脚本 loadfile 依赖) - 验证:Debug / Release 编译通过(本机 ARM GCC 15.2.1) Bootloader 布局适配(与旧版独立镜像不兼容,升级需整片烧录一次) - LD/gd32e23x_flash.ld:FLASH ORIGIN=0x08002000, LENGTH=54K - Src/system_gd32e23x.c:VECT_TAB_OFFSET=0x2000——Bootloader 不写 VTOR,APP 必须自设向量表,否则中断落回 Bootloader 向量表 - 验证:.vectors 链接于 0x08002000,固件 12164B(54KB 上限 22%) 驱动修复 - Src/ldc1612.c:ldc1612_config_single_channel 各步骤 I2C 写入检查 返回值,失败立即返回错误(原审查项 L3) 文档 - README:重写本地编译/烧录/调试说明,新增"固件布局与 Bootloader"章节
This commit is contained in:
+21
-9
@@ -148,11 +148,17 @@ ldc1612_status_t ldc1612_init(void) {
|
||||
*/
|
||||
ldc1612_status_t ldc1612_config_single_channel(uint8_t channel) {
|
||||
i2c_result_t status;
|
||||
uint16_t freq_divider;
|
||||
|
||||
if (channel > 1) {
|
||||
return LDC1612_STATUS_INVALID_PARAM;
|
||||
}
|
||||
|
||||
freq_divider = ldc1612_calculate_freq_divider(channel);
|
||||
if (freq_divider == 0) {
|
||||
return LDC1612_STATUS_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* 配置顺序严格按照TI官方文档要求 */
|
||||
|
||||
/* Step 1: 确保传感器处于睡眠模式 - 配置前必须 */
|
||||
@@ -161,28 +167,34 @@ ldc1612_status_t ldc1612_config_single_channel(uint8_t channel) {
|
||||
delay_ms(10);
|
||||
|
||||
/* Step 2: 配置频率分频 - 必须在其他配置之前 */
|
||||
uint16_t freq_divider = ldc1612_calculate_freq_divider(channel);
|
||||
ldc1612_write_register(SET_FREQ_REG_START + channel, freq_divider);
|
||||
status = ldc1612_write_register(SET_FREQ_REG_START + channel, freq_divider);
|
||||
if (status != I2C_RESULT_SUCCESS) return LDC1612_STATUS_ERROR;
|
||||
delay_ms(5);
|
||||
|
||||
/* Step 3: 配置LC稳定时间 - 影响测量精度 */
|
||||
ldc1612_write_register(SET_SETTLECOUNT_REG_START + channel, LDC1612_SETTLECOUNT_CH0);
|
||||
status = ldc1612_write_register(SET_SETTLECOUNT_REG_START + channel, LDC1612_SETTLECOUNT_CH0);
|
||||
if (status != I2C_RESULT_SUCCESS) return LDC1612_STATUS_ERROR;
|
||||
|
||||
/* Step 4: 配置转换时间 - 影响测量速度和精度 */
|
||||
ldc1612_write_register(SET_CONVERSION_TIME_REG_START + channel, LDC1612_RCOUNT_TIME_CH0);
|
||||
status = ldc1612_write_register(SET_CONVERSION_TIME_REG_START + channel, LDC1612_RCOUNT_TIME_CH0);
|
||||
if (status != I2C_RESULT_SUCCESS) return LDC1612_STATUS_ERROR;
|
||||
|
||||
/* Step 5: 配置转换偏移 */
|
||||
ldc1612_write_register(SET_CONVERSION_OFFSET_REG_START + channel, SET_CONVERSION_OFFSET_CH0);
|
||||
status = ldc1612_write_register(SET_CONVERSION_OFFSET_REG_START + channel, SET_CONVERSION_OFFSET_CH0);
|
||||
if (status != I2C_RESULT_SUCCESS) return LDC1612_STATUS_ERROR;
|
||||
|
||||
/* Step 6: 配置驱动电流 - 影响传感器灵敏度 */
|
||||
ldc1612_write_register(SET_DRIVER_CURRENT_REG + channel, LDC1612_DRIVE_CURRENT);
|
||||
status = ldc1612_write_register(SET_DRIVER_CURRENT_REG + channel, LDC1612_DRIVE_CURRENT);
|
||||
if (status != I2C_RESULT_SUCCESS) return LDC1612_STATUS_ERROR;
|
||||
|
||||
/* Step 7: 配置多路复用器 - 设置通道选择和滤波 */
|
||||
// ldc1612_configure_mux_register(LDC1612_MUX_AUTOSCAN_DISABLE, LDC1612_MUX_RR_SEQUENCE_0, LDC1612_MUX_FILTER_ALL_LOW, LDC1612_MUX_FILTER_NONE);
|
||||
ldc1612_write_register(MUX_CONFIG_REG, LDC1612_MUX_CONFIG);
|
||||
status = ldc1612_write_register(MUX_CONFIG_REG, LDC1612_MUX_CONFIG);
|
||||
if (status != I2C_RESULT_SUCCESS) return LDC1612_STATUS_ERROR;
|
||||
|
||||
/* Step 8: 配置错误输出 */
|
||||
ldc1612_write_register(ERROR_CONFIG_REG, LDC1612_ERROR_CONFIG_DEFAULT);
|
||||
status = ldc1612_write_register(ERROR_CONFIG_REG, LDC1612_ERROR_CONFIG_DEFAULT);
|
||||
if (status != I2C_RESULT_SUCCESS) return LDC1612_STATUS_ERROR;
|
||||
|
||||
/* Step 9: 最后启动传感器 - 必须最后一步 */
|
||||
status = ldc1612_write_register(SENSOR_CONFIG_REG, LDC1612_SENSOR_CONFIG_CH0);
|
||||
@@ -332,4 +344,4 @@ uint16_t ldc1612_check_status_and_log_errors(void) {
|
||||
|
||||
// 读取STATUS寄存器会自动清除错误标志,但不会清除DRDY和UNREADCONV标志
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
#define __HXTAL (HXTAL_VALUE) /* high speed crystal oscillator frequency */
|
||||
#define __SYS_OSC_CLK (__IRC8M) /* main oscillator frequency */
|
||||
|
||||
#define VECT_TAB_OFFSET (uint32_t)0x00 /* vector table base offset */
|
||||
#define VECT_TAB_OFFSET (uint32_t)0x2000 /* vector table base offset */
|
||||
|
||||
/* select a system clock by uncommenting the following line */
|
||||
//#define __SYSTEM_CLOCK_8M_HXTAL (__HXTAL)
|
||||
|
||||
Reference in New Issue
Block a user