在制作过程中遇到了不少问题在这里记录一下。
首先我是使用CubeMX(6.13.0)生成了外设初始化及其代码。
我使用的是STM32H7S7,生成代码前,勾选只生成BOOT以及不生成main函数
其次,不编译启动文件(stm32xxxxx.s)
在Keil的底层文件夹中,把下面图中框出来的文件,放入生成的项目中,其中Target.lin是分散加载文件。
在MDK中在设置一些
再往后就是修改FlashDev.c的内容以及实现FLashPrg.C中的函数。在system_stm32xxxx.c中可以把SCB->VTOR那一行注释掉
值得注意的是:
1.使用HAL库的话,一些函数需要重定向
[C] 纯文本查看 复制代码 HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
return HAL_OK;
}
uint32_t HAL_GetTick (void)
{
static uint32_t ticks = 0U;
uint32_t i;
for (i = (SystemCoreClock >> 14U); i > 0U; i--) {
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
__NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
}
return ++ticks;
}
void HAL_Delay(uint32_t Delay)
{
uint32_t tickstart = HAL_GetTick();
uint32_t wait = Delay;
/* Add a period to guaranty minimum wait */
if (wait < HAL_MAX_DELAY)
{
wait += (uint32_t)(1U);
}
while((HAL_GetTick() - tickstart) < wait)
{
__NOP();
}
}
2.注意变量的地址,可以从map文件查看,发现一些变量地址有冲突,我自己定义了一个不使用的空buffer
3.一些全局变量并不是0初始化,因此,在一些初始化中会出现错误,比如下面这个(我选择了注释掉)
最终是能完成烧录,但会显示Verify Fail,但是查看数据是对的,这里可以把Verify函数默认返回成功。
项目代码如下
FLM_Make_2.7z
(1.66 MB, 下载次数: 3)
|