• 替代STM32的GD32,替代KEIL的Eclipse配置---连载3


    前言

        下面一步一步的介绍怎么改写程序。

        前提:(1)已经安装好Eclipse的全部东西,什么gcc什么link,都已经装备完毕;(2)已经编写好GD32F103的程序。

        步骤:能说明的就说明,一些基本具备的就直接带过,当然还会遇到一些新的情况,这个调试只能靠小伙伴自己去解决,可能我的遇不到这些问题。

    第一章:准备程序

        (1)先准备GD32F103的程序。

         这个是GD103的基本文件架构。里面为了图小点,将lib里面的内容删掉了一些。总结一下如下:

         这个是GD的基本文件,系统相关的就那几个。自己的文件time和usart两个文件。这几个文件直接拷出来就行。

        (2)生成Eclipse的103的程序,当然生成的是STM的。结构图如下:

         然后对应替换。替换好之后,编译,会出现下面错误。

         这个因为全局变量里面没有选择这款芯片,所以直接报错。因为生成的是STM的程序,现在文件已经替换掉了,所以这个全局变量需要修改,修改为GD32F10X_MD。

         然后编译,再次报错:

         点击stm32 no such这行错误,是因为这个h文件已经替换成gd的了,就没有这个h文件了,修改这个,变成gd。再次编译,还是出现同样的错误,并且提示缺少main.h文件,继续修改,并添加h文件。至于.h放的位置,随意放就行,只要头文件包含在自己的include里面了,至于怎么包含头文件,这个属于eclipse的基本操作,就不再多说了。切记:只要包含进来就行,位置不限。

        注:保证gd的程序是正确的才行。这个切记,gd的程序必须能正常跑。这时,程序仅仅剩下一个错误:

         这个是因为vector的文件没有替换,因为没有这个文件。所以修改这个文件,利用原有gd里面的s文件。修改以后,就不会出现错误了。这时就可以编译通过了。当然这个修改过程非常需要耐心,需要一点一点的弄。细心的小伙伴应该没什么问题。

        总结一下具体修改步骤:

        (1)替换关键文件,差不多也就6个;

        (2)包含对应头文件,加入对应全局变量;

        (3)改编译错误中的include语句;

        (4)修改vector中断向量表。

    第二章:点灯,串口程序

        上述程序仅仅是做好了基础,至于能不能运行还是得有个标志,因为现在没有加入debug程序,所以只能用定时器中断的点灯和串口来测试。当然这也是最好的测试芯片的方法。

    1. #include "gd32f10x.h"
    2. #include "gd32f10x_eval.h"
    3. #include "time123.h"
    4. #include "usart.h"
    5. int main(void)
    6. {
    7. gd_eval_led_init(LED3);
    8. timer1_config();
    9. timer1_nvic_config();
    10. timer3_config();
    11. timer3_nvic_config();
    12. nvic_irq_enable(USART1_IRQn, 0, 0);
    13. gd_eval_com_init(EVAL_COM1);
    14. usart_interrupt_enable(USART1, USART_INT_RBNE);
    15. while(1)
    16. {
    17. }
    18. }

        加入main中的代码,至于什么作用,应该没明显,不做过多解释了。gd103的头文件必须包含进去,要不没有办法初始化gpio和其他函数,这个小伙伴在改写gd103的时候应该都经历过。

    1. void TIMER3_IRQHandler(void)
    2. {
    3. if(SET == timer_interrupt_flag_get(TIMER3, TIMER_INT_FLAG_UP))
    4. {
    5. timer_interrupt_flag_clear(TIMER3, TIMER_INT_FLAG_UP);
    6. gd_eval_led_toggle(LED3);
    7. usart_data_transmit(EVAL_COM1, 0x11);
    8. }
    9. }

        在time中断里点灯和串口发送就好。

        没有办法做视频,所以只能用串口给大家截个图:

         可以看出串口接受是正确的。修改time的参数,灯亮的频率也不同,发送的串口数据时间也不同。可以得出程序正确并且能够正确烧写,正常运行。

       再看看编译的时候得打印输出:

          可以看出eclipse在生成文件的时候又三种,elf,bin和hex。用本身烧写的时候,烧写的是elf文件。编译时间差不多3s。

    第三章:感受

        改写程序之前确实不知道程序怎么修改才能正确运行,大概分成了2个阶段:

        (1)根据兆易创新的网站里面的gd32的eclipse的改写PDF,不用eclipse产生的文件,仅仅用现存的gd32程序,一步一步的改写,仅仅加入gd32的程序,发现最后能正确编译,因为加入的都是gd32的程序。eclipse是可以编译通过的,但是却没有办法运行。发现没有ld文件和中断向量表。而里面教程说是加入S文件,也就是gcc的编译链接文件。但是这个startup.S文件网上却没有。找到半天只有非eclipse的S文件,加入后不能运行,遂放弃;

        (2)根据eclipse自己产生的文件,一点一点的换。其实前面显示将STM32F103的程序先换成了407的程序,虽然eclipse能自己产生407的程序,但是是基于HAL库的。所以针对103和407直接换比较熟悉,最后换的很成功。这才有了stm32换成gd32。换的前几次并没有成功,主要是:1是卡在了vector上了,因为中间移植错了几个量,一直报错,2是卡在了h文件的修改上。前期报的错很多,却不知道怎么下手,有错误是纠结在一起的,所以不知道怎么去改。慢慢的一次又一次才知道是这样修改。过程挺煎熬的。

        所以,不知道问题在哪里才是最大的问题,当找到问题出在哪里了,就很好解决了。

        最后再强调一句:改的过程很煎熬,并且焦虑!

        从前面做的LINUX和FPGA,感觉每次学习新的东西都很煎熬,以前学习新的东西感觉是一种享受,并且做出来之后还会有兴奋的感觉慢慢的对整个系统和整个机理明白之后,就没有那么多兴奋度了。就像买电动车的时候,前面有个显示速度的LED,很大很漂亮,但是自己知道他的工作原理,怎么数码管显示等等,就感觉买了多那几百块钱,没啥意思,就买了黑屏的!没劲。

    第四章:后记

        这篇文章介绍了stm103怎么移植到gd103上,过程走下来之后很简单,就修改几个文件。这个部分是没有HAL库的改写。下篇文章主要介绍STM32F407移植到STM32H750上,都是基于HAL库的程序。当然自己也从103的非HAL库程序移植到了H750上,这个暂不说了,当然是移植成功了。既然有了HAL库现成的程序,为啥去用没有HAL库的去移植的。当然为了自己的学习和一步一步的来,没有办法,必须那样做。现在小伙伴有了前面的铺垫,应该可以直接移植了,就不用一步一步的来了。

        有需要源码的小伙伴请参看下面文章里面的,关注一波公众号。因为没有办法贴出图片,所以只能让小伙伴移步了。到时候可以私信留言,会给出百度网盘的链接的全部源代码。敬请关注。

    QT串口动态实时显示大量数据波形曲线(四)========“界面的美化与处理”_透明的光的博客-CSDN博客_qt实时显示曲线

       可以通过这篇文章关注下。

  • 相关阅读:
    React中的Fiber更新机制如何执行的setState
    xindong科技面试回顾
    【MySQL】insert相关SQL语句
    【产品面试】产品面试总结出了这三类面试题
    grafana 画富集多个指标 label 的表格
    【优化模型】求无约束多元函数最小值
    Mendix发布全球低代码报告,中国软件与低代码发展远超全球
    如何解决段转储问题
    小程序随机生成文字卡片文案海报,带分享保存
    jmeter压力测试的辅助插件和实操技巧
  • 原文地址:https://blog.csdn.net/weixin_45426095/article/details/126627221