[LiteOS移植]目标芯片STM32F1 创建工程并排错

举报
樊心昊 发表于 2020/08/30 15:01:43 2020/08/30
【摘要】 到这里移植的大部分工作都做完了,可以通过IoT Link Studio创建一个工程来进行排错修改到最终能运行。创建工程打开IoT Link Studio点击左下角“home”选择“创建IoT工程”,工程名称可以自定义,我这里选择使用“STM32F103_First”,硬件平台选择之前我们创建的STM32F103RC,选择基于“hello_world_demo”,如下图所示:编译并排错点击左下...

到这里移植的大部分工作都做完了,可以通过IoT Link Studio创建一个工程来进行排错修改到最终能运行。

创建工程

打开IoT Link Studio点击左下角“home”选择“创建IoT工程”,工程名称可以自定义,我这里选择使用“STM32F103_First”,硬件平台选择之前我们创建的STM32F103RC,选择基于“hello_world_demo”,如下图所示:

image.png

编译并排错

点击左下脚“build”开始编译,出现如下图所示错误,提示缺少”stm32l4xx_hal.h”文件以及没有定义目标芯片:

image.png

删除工程中下图所示的几个头文件(.h结尾)及对应源文件(.c结尾)。

image.png

再次编译点击左下角“rebuild”,提示缺少”stm32l4xx.h”如下图所示:

image.png

修改OS_CONFIG\target_config.h文件,将#include “stm32l4xx.h”语句注释,新增#include“stm32f1xx.h”如下图所示:

image.png

当前文件夹中并没有stm32f1xx.h文件、stm32f103xe.h文件(stm32f1xx.h文件中引用了stm32f103xe.h文件)和system_stm32f1xx.h文件(stm32f103xe.h文件中引用了system_stm32f1xx.h文件),可以在之前STM32CubeMX软件生成的工程目录 STM32F103RC_Project\Drivers\CMSIS\Device\ST\STM32F1xx\Include中找到,并复制到当前工程的Inc目录下。

再次编译,出现下图所示错误,提示找不到“stm32f1xx_hal_exti.h”,该文件为外部中断相关,我们暂不使用,如下图所示:

image.png

打开“stm32f1xx_hal_conf.h”文件,将“#define HAL_EXTI_MOUDLE_ENABLE”语句注释,如下图所示:

image.png

并修改project.mk文件,之前我们将Src/stm32f103中的字母写成了大写,这里修改为小写即可,如下图所示:

image.png

       再次编译,出现如下图所示错误,提示缺少“stm32l4xx.h”文件,如下图所示:

image.png

将缺少“stm32l4xx.h”文件的这些文件中的“stm32l4xx.h”修改为“stm32f1xx.h”即可

 

删除工程中以下未使用的文件spi.c、spi.h、i2c.c和i2c.h。

image.png

       删除project.mk中对以上未使用文件编译的规则,如下图所示(删除红框中的规则):

image.png

 

删除“sys_init.h”文件中的以下语句,这些文件我们并未使用,如下图所示:

image.png

       再次编译,出现如下图所示错误,提示Instance结构体中缺少RDR成员,这是STM32L4的命名方式,这里将RDR修改为DR即可,如下图所示:

image.png

修改uart_debug.c文件中的RDR修改为DR,如下图

image.png

注释main.c中部分语句,这些语句对应的初始化外设我们并未使用,如下图所示:

image.png

再次编译,出现如下图所示错误,提示没有LPUART1这个串口,这是STM32L4才有的串口。

image.png

在uart_at\uart_at.c将LPUART1和LPUART1 _IRQn修改为USART2和USART2 _IRQn,RDR修改为DR,如下图所示:

image.png

image.png

再次编译,出现下图所示错误,提示时钟初始化部分的语句有问题。

image.png

使用之前STM32CubeMX生成的工程中的main.c文件中的SystemClock_Config函数及函数体替换sys_init.c文件中的SystemClock_Config函数及函数体,如下图所示:

image.png

再次编译,出现下图所示警告,“atiny_random”函数导致的。

image.png

注释“sysy_init.c”文件中“atiny_random”函数,如下图所示。

image.png

再次编译,提示下图错误,“PendSV_Handler”函数重复定义。

image.png

注释“stm32f1xx_it.c”文件中对该函数的实现,如下图所示。

image.png

再次编译,提示编译成功,将程序下载到STM32F1单片机中,通过USB-TTL接到单片机的串口1(PA9和PA10),即可在串口助手中看到如下图所示输出,这正是hello_world_demo中的输出,说明LiteOS_Lab跑起来了,移植成功!

image.png

       这时我们需要用STM32F103RC_First工程中修改过的文件去替换SDK/targets/STM32F103RC中的文件,下一次使用时直接创建工程就能使用,无需修改。

总结

       移植过程中的难点集中在调试排错,一个程序三分写七分调,在调试过程中你遇到的错误可能和我的不一样,因为我们的操作步骤以及开发环境不可能百分百相同,所以你需要学会灵活运用,根据具体情况具体分析去调试并解决错误,如果遇到无法解决的错误,记得先通过搜索引擎找找答案,找不到到论坛中发帖求助,带上详细截图!


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。