下面一步一步的介绍怎么改写程序。
前提:(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程序,所以只能用定时器中断的点灯和串口来测试。当然这也是最好的测试芯片的方法。
- #include "gd32f10x.h"
- #include "gd32f10x_eval.h"
- #include "time123.h"
- #include "usart.h"
-
- int main(void)
- {
- gd_eval_led_init(LED3);
-
- timer1_config();
- timer1_nvic_config();
- timer3_config();
- timer3_nvic_config();
-
- nvic_irq_enable(USART1_IRQn, 0, 0);
- gd_eval_com_init(EVAL_COM1);
- usart_interrupt_enable(USART1, USART_INT_RBNE);
-
- while(1)
- {
- }
- }
加入main中的代码,至于什么作用,应该没明显,不做过多解释了。gd103的头文件必须包含进去,要不没有办法初始化gpio和其他函数,这个小伙伴在改写gd103的时候应该都经历过。
- void TIMER3_IRQHandler(void)
- {
- if(SET == timer_interrupt_flag_get(TIMER3, TIMER_INT_FLAG_UP))
- {
- timer_interrupt_flag_clear(TIMER3, TIMER_INT_FLAG_UP);
- gd_eval_led_toggle(LED3);
- usart_data_transmit(EVAL_COM1, 0x11);
- }
- }
在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实时显示曲线
可以通过这篇文章关注下。