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

前言

    经过一周的努力,终于把程序下载到相应的芯片里了,完成了while点灯,时间定时器点灯,串口发送。主要是完成了STM32F103,GD32F103,STM32F407,STM32H750的程序编写和下载。只是现在仅仅是编写和下载程序,并且程序能跑,至于调试阶段还没有加进去。程序仅仅是点灯,复杂运算的话,debug还得加进去,要不不知道编写的逻辑是不是正确。现在先将程序跑起来,剩下的应该很好办。

    芯片心得:只要完成以上三个功能,差不多这款芯片就算搞定了:

    (1)while点灯:主循环可以跑,硬件配置可以跑,基本配置可以用;

    (2)定时器点灯:定时器中断可以跑,中断配置可以跑,中断配置可以用;

    (3)串口发送:外设可以跑,外设配置可以跑,其他外设可以用。

    其实这三个完成之后,其他的功能就可以按照这个直接往上面复制粘贴了。

第一章:程序原则

    程序一步一步的来,没有跳过任意一步,没办法,最终的目的出了问题没有办法解决,所以只能一步一步的来,步子大了会扯着淡,然后还得回来一步一步的搞。

    编写程序原则:一步一步的来,一个输入一个输出的来。无论搭建Matlab和Psim仿真,硬件电路,还是程序,都得一点一点的来。

    编写程序步骤:一个功能一个功能的实现。无论是仿真还是硬件电路,都需要一个输入一个输出的来,这块正确了,再来下一个。先把东西分为很多块块,然后一块一块的。如果全部堆在一起,弄好之后一下子调试,肯定会出现错误,但是并不知道错误出现在哪里,还得回头来一块一块的找。

    教训:以前搭建硬件电路,有电源,驱动电路,功率电路,DSP,信号驱动电路,负载电路等等,全部弄好了,一调试,结果没出来,然后还得一个一个的来。保证每一个都正确了,才能往下面走,这样心理也有底,并且汇报的时候还好说

    回过来说Eclipse代替Keil的思路:

第一阶段:

    (1)Eclipse产生STM32F103程序,下载到STM32F103芯片中,保证产生程序正确。作用:初步了解程序结构。

    (2)STM32F103程序下载到GD32F103中,保证程序正确。作用:保证GD32F103能正常工作,并且能运行Eclipse产生的STM程序。注:程序兼容。

    (3)改写STM32F103程序,改为GD32F103的程序,下载到GD中,保证改写程序正确。作用:初步改写原有的Eclipse程序,使之在GD32F103上能跑。

    这样就从原有的Eclipse的Stm程序改写为gd程序了,完成了第一阶段。

第二阶段:

    (1)Eclipse产生STM32F407程序,下载到STM32F407芯片中,保证产生程序正确。作用:初步了解程序结构。这种结构是基于HAL库的。

    (2)将原有KEIL的带HAL库的407程序改写为Eclipse的HAL库407程序,下载。作用:完成原有HAL库407到Eclipse的HAL库407程序改写。

    (3)将Eclipse产生的F103程序改写为F407程序,下载到407芯片中。作用:完成不带HAL库的程序向带HAL库的程序改写。

第三阶段:

    (1)将Eclipse的F103程序改写为Eclipse的H750程序;

    (2)将Eclipse的F407程序改写为Eclipse的H750程序;

总结个图如下:

     能生成的程序有2个,STM103和STM407(HAL);

    需要得到的程序:

        (1)STM103~~~>GD103;  

        (2)STM103~~~>STM407;

        (3)STM407(HAL)~~~>STM750(HAL);

        (4)STM103~~~>STM407(HAL);STM103~~~>STM750(HAL);

    HAL库到HAL库,非HAL库到HAL库,非HAL库到非HAL库。

    (1)针对不同公司芯片;(2)针对同公司不同芯片;(3)针对同公司不同库芯片。

总结

    基于103的程序可以改写为任意公司的芯片;

    基于407的程序可以改为ST的任意芯片。

    下面说下整体的思路,具体的怎么替换,下篇文章介绍下具体的细节。先整体上把控下,给整体一个感觉,先接收,不产生害怕的感觉。

第二章:STM32改写GD32

1. STM103替换为GD103

    上篇文章介绍了Eclipse产生的程序与原有程序的区别,下面直接切入正题,怎么修改程序。

     图中黄色的为需要修改的文件。

    先说基础文件:main函数,103库函数,stm32xx文件。这几个不用多说,直接替换成需要芯片的文件。

     怎么替换,一个一个的删除,一个一个的复制粘贴进去就行。至于里面的报错的,修改成对应的文件就行,比如需要stm32f10x的h文件,已经删掉了,那就换成gd32f10x的h文件就行,一步一步来,一个一个的改。

    再说下men启动文件。

     里面重要的参数就2个,一个RAM,另一个是FLASH,这两个根据芯片的datasheet直接就能获取,比较简单。一个2000开头,一个800开头,其他的不用管。

    最后说下vector文件。也就是中断相量文件。

void __attribute__ ((weak, alias ("Default_Handler")))
WWDG_IRQHandler(void);
void __attribute__ ((weak, alias ("Default_Handler")))
PVD_IRQHandler(void);
void __attribute__ ((weak, alias ("Default_Handler")))
TAMPER_IRQHandler(void);
void __attribute__ ((weak, alias ("Default_Handler")))
RTC_IRQHandler(void);
void __attribute__ ((weak, alias ("Default_Handler")))
FLASH_IRQHandler(void);

extern unsigned int _estack;

typedef void
(* const pHandler)(void);

__attribute__ ((section(".isr_vector"),used))
pHandler __isr_vectors[] =
  {
      (pHandler) &_estack, // The initial stack pointer
      Reset_Handler, // The reset handler

      NMI_Handler, // The NMI handler
      HardFault_Handler, // The hard fault handler
      MemManage_Handler,                        // The MPU fault handler
      BusFault_Handler,                        // The bus fault handler
      UsageFault_Handler,                        // The usage fault handler
      0,                                        // Reserved
      0,                                        // Reserved
      0,                                        // Reserved
      0,                                        // Reserved
      SVC_Handler,                              // SVCall handler
      DebugMon_Handler,                         // Debug monitor handler
      0, // Reserved
      PendSV_Handler, // The PendSV handler
      SysTick_Handler, // The SysTick handler

      WWDG_IRQHandler, // Window WatchDog
      PVD_IRQHandler, // PVD through EXTI Line detection
      TAMPER_IRQHandler, // Tamper through the EXTI line
      RTC_IRQHandler, // RTC Wakeup through the EXTI line
      FLASH_IRQHandler, // FLASH

其实也是替换。前面是弱定义,后面是中断入口。这个是原来的文件。

    将原有的启动文件,也就是startup.s文件打开。

__Vectors       DCD     __initial_sp               ; Top of Stack
                DCD     Reset_Handler              ; Reset Handler
                DCD     NMI_Handler                ; NMI Handler
                DCD     HardFault_Handler          ; Hard Fault Handler
                DCD     MemManage_Handler          ; MPU Fault Handler
                DCD     BusFault_Handler           ; Bus Fault Handler
                DCD     UsageFault_Handler         ; Usage Fault Handler
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     0                          ; Reserved
                DCD     SVC_Handler                ; SVCall Handler
                DCD     DebugMon_Handler           ; Debug Monitor Handler
                DCD     0                          ; Reserved
                DCD     PendSV_Handler             ; PendSV Handler
                DCD     SysTick_Handler            ; SysTick Handler

                ; External Interrupts
                DCD     WWDG_IRQHandler                   ; Window WatchDog                                        
                DCD     PVD_IRQHandler                                     
                DCD     TAMP_STAMP_IRQHandler            
                DCD     RTC_WKUP_IRQHandler               
                DCD     FLASH_IRQHandler                  ; FLASH                                           
                DCD     RCC_IRQHandler                    ; RCC 

    里面的中断入口一个一个的复制过来,格式一样就行了。该有的就有,该是0的就是0,这个千万别移植错了。

    这样三个部分就一直成功了,编译下载就行了。下一篇文章我就专门用一个文件给大家一步一步的演示怎么修改,会出现什么错误,怎么解决。

    现在心理先有个谱,怎么改,改哪里。

2. STM32F407替换为STM32H750

    先看Eclipse产生的407程序结构,上篇文章已经详细介绍过103的了。

     代码结构和产生的103的差不多,只不过这个是基于HAL库的。再来看下需要修改的文件:

     其中黄色的为需要修改的文件。

    也分为两部分。

    第一部分:直接替换文件,main函数,407相关文件,HAL库文件。

    第二部分:修改文件,vector,和men的ld文件。

    怎么修改什么的,和上节一样,给小伙伴看看修改完之后是什么样子。

     上图的文件系统就是Eclipse里面的对应的文件,将407产生的直接替换成750的就好。改好之后就可以编译下载了。修改的地方也还是那两个,一个是中断向量表,从原有的工程的s文件一个一个弄过来就行,另一个就是mem.ld文件,直接修改下ram和flash的大小就好,起始地址不用修改,都是2000和800。

第三章:总结和展望

    整体来说,修改过程最后是比较简单,就是说的那几个地方,但是在自己修改过程中会遇到很多问题,不知道怎么处理,也不知道问题出在哪里。慢慢的会一点点的看,就知道哪里出问题,一点点的试着解决。还是那句话:一点一点的来,心平气和的,别害怕!

    下一篇文章就针对两个工程一点一点的说,怎么生成,怎么改,会遇到什么错误,怎么解决,一步一步的带着小伙伴进入修改的不能说境界吧,能自己一点点的修改就行。需要的小伙伴可以看前篇文章中的链接,公众号能关注就关注一波,需要源代码的可以在公众号里面留言,到时候会送上全部源代码。大家一起学习。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值