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

前言

    上篇文章介绍了怎么将STM32F103的程序变为GD32F103的程序。大体思路就是将所有的文件替换,但是这个不是基于HAL库的。Eclipse产生的F407的程序是基于HAL库的,而STM32H750也是基于HAL库的,所以这两个程序也可以去替换更改。并且更改着很舒服,当然直接将103的程序加入HAL库也是可以的,不过比较麻烦点,有现成的东西就不用需要自己做的,这个是编程人员的基本素质。能用ctrl+c和ctrl+v就不要自己写,避免重复造轮子。

第一章:Eclipse产生STM32F407的HAL库程序

    先基本的产生407的程序,删除掉不用的库文件什么的文件结构如下:

     与407相关的就7个文件,上图已经很清楚了,将除了vector的文件全部替换成750的。同时将HAL库的c文件和h文件也替换掉。然后更新下如下图:

     明显的更换成了h7系列的程序。

第二章:替换和编译

    这部分应该是最头大的,慢慢来。

    先看编译后的效果,出现了100多个错误,并且不知道为啥出错误。

    现在就很头疼了,开始的时候根本不知道哪里错误了。根据上篇文章中的经历,知道哪里错误了。

    注:其实从简单到复杂的修改的好处就在这里,你大概能知道在哪里修改,并且小的东西出现的问题能一个一个的找,然后大的东西是由小的东西构成的,你就知道往哪个方向努力了! 

    解决办法:打开setting,怎么操作,这个属于基本的,网上很多,就不说明怎么点的了。

     可以看出来全部变量是引用的F407的文件,所以修改成750的。

     然后再次编译,发现错误剩下2个了,这就好解决了。

     这个是因为全部文件修改为h750的了,所以这个f407的头文件没有了,双击去修改,然后再次编译,又出现取消main的h文件,直接删掉就好,因为没有这个头文件,不用管。

     然后再次编译,发现没有错误了。连个warning都tm没有,所以感觉还挺好。

     至此,程序前期替换工作修改完毕。

第三章:修改和编译

    这里将407的文件全部替换为750的文件,还有个地方就是vector这个c文件。这里就需要750的中断向量表了。找到750的中断向量表,和上篇文章一样进行修改。

     这个需要足够的耐心去修改,有时候中断入口的名称仅仅是改了一个字母,就会产生错误,小伙伴们需要好好的去修改。修改完成后换个名字,如上图所示,然后再次编辑。没啥错误。

    然后就是mem文件,下面是407产生的mem文件:

     根据407的说明书,可以看看这几个参数。

     只看flash和ram这两个参数,其他的不用管。只要对应上就行了,或者比里面的小也行。反正只要别超过就可以。

    再看750的手册:

     1024K的ram和128K的flash,只要对应好就行了。

    然后就是编译,加入自己的程序就好。当然750是基于HAL库的,里面用的函数都一样。

     然后加入自己的led、time、uart程序,就发现可以下载并可以运行了。至于怎么下载和debug,这个网上很多教程。以后单独的出一篇文章介绍怎么弄的。

第四章:注意点

   注意点1:晶振

    407的晶振是8M的,750的晶振是25M的,所以必须在全局变量里面修改这个参数。

    注意点2:晶振选择

    407的程序不选择晶振,晶振参数出问题也可以跑。750的HAL库程序是判断晶振的,所以必须设置为外部晶振,并且对应程序也得相应修改,里面的sys文件就是处理这个问题的。

u8 Stm32_Clock_Init(u32 plln,u32 pllm,u32 pllp,u32 pllq)
{
	HAL_StatusTypeDef ret=HAL_OK;
	RCC_ClkInitTypeDef RCC_ClkInitStruct;
	RCC_OscInitTypeDef RCC_OscInitStruct;
  
	MODIFY_REG(PWR->CR3,PWR_CR3_SCUEN, 0);
	__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

	while ((PWR->D3CR & (PWR_D3CR_VOSRDY)) != PWR_D3CR_VOSRDY) {}
  
	RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;
	RCC_OscInitStruct.HSEState=RCC_HSE_ON;
	RCC_OscInitStruct.HSIState=RCC_HSI_OFF;
	RCC_OscInitStruct.CSIState=RCC_CSI_OFF;
	RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;
	RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;

	RCC_OscInitStruct.PLL.PLLN=plln;
	RCC_OscInitStruct.PLL.PLLM=pllm;
	RCC_OscInitStruct.PLL.PLLP=pllp;
	RCC_OscInitStruct.PLL.PLLQ=pllq;

	RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
	RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
	ret=HAL_RCC_OscConfig(&RCC_OscInitStruct);
	if(ret!=HAL_OK) return 1;	
  
	RCC_ClkInitStruct.ClockType=(RCC_CLOCKTYPE_SYSCLK|\
                                RCC_CLOCKTYPE_HCLK |\
                                RCC_CLOCKTYPE_D1PCLK1 |\
                                RCC_CLOCKTYPE_PCLK1 |\
                                RCC_CLOCKTYPE_PCLK2 |\
                                RCC_CLOCKTYPE_D3PCLK1);

	RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;
	RCC_ClkInitStruct.SYSCLKDivider=RCC_SYSCLK_DIV1;
	RCC_ClkInitStruct.AHBCLKDivider=RCC_HCLK_DIV2;
	RCC_ClkInitStruct.APB1CLKDivider=RCC_APB1_DIV2; 
	RCC_ClkInitStruct.APB2CLKDivider=RCC_APB2_DIV2; 
	RCC_ClkInitStruct.APB3CLKDivider=RCC_APB3_DIV2;  
	RCC_ClkInitStruct.APB4CLKDivider=RCC_APB4_DIV4; 
	ret=HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
	if(ret!=HAL_OK) return 1;

	__HAL_RCC_CSI_ENABLE() ;
	__HAL_RCC_SYSCFG_CLK_ENABLE() ;  
	HAL_EnableCompensationCell();
	
	return 0;
}

    注意点3:cache是否开启

int main(int argc, char* argv[])
{
	Cache_Enable();
	HAL_Init();
	Stm32_Clock_Init(160,5,2,4);
	delay_init(400);
	LED_Init();
	TIM3_Init(10000-1,20000-1);
	TIM4_Init(10000-1,20000-1);
	uart_init(19200);
  while (1)
    {
    }
}

    初始化的时候,需要初始化cache,和hal库,至于不初始化会有什么bug,这个还真没有测试过。看正点原子的程序,有的初始化了,但是别人改写的他的程序却没有初始化,测试了下都没啥问题,但是在运行过程中会不会出问题,这个还需要时间去检验。

    注意点4:输出

    写的自己的程序仅仅定时器,灯和串口。这三个都是正确的,至于程序的其他功能,还真没有测试。但是103的程序是测试了,没有什么问题。灯和串口和上篇文章的结果是一样的,都是正常运行。

第五章:总结

    至此,Eclipse的程序全部修改完毕,用时2个星期。

    想想开始的时候,搜寻网页和资料都不知道怎么去修改,到现在的能写出文章给小伙伴们去介绍这个东西怎么弄。自己也是差不多花费了全部心血。开始的时候几个概念都不太清楚,到最后才发现修改的地方也没有几个。

    或许知识就是这样吧,不了解的时候感觉挺难的,但是学会了感觉,怎么就这点东西。想起来了刚学数学的时候,1+1怎么那么难。其实现在给个转变也挺难的。A=1,B=2,,,以此类推一直到9。然后问C+D等于多少,我想也需要花很长时间去反应吧。现在自己也有了宝宝,将来他学数学的时候或者能够理解他的心情。知识不久这样嘛,技不压身,但是学习过程是非常难的。岁数大了,学习这东西是带有恐惧色彩的。

    从前面的迪文屏幕,嵌入式屏幕,到之后的LINUX系统,再到FPGA,再到现在的Eclipse,每一步我感觉自己都把自己榨干了,不知道下面还需要学习什么,在这里和小伙伴们吐槽一下吧,真的挺难的。

    想想自己刚毕业的时候,点亮个LED灯都能高兴半天,学会串口都能高兴一个星期。到现在慢慢的,做出来一个很有挑战的东西都是感觉这是应该做出来的。我不知道怎么才能回到原来的心理状态,可能永远回不去了。就像以前总有想吃的东西,过几个星期想吃个肯德基,过几个星期想吃个烤鱼,现在呢,没有什么想吃的了。现在也慢慢理解为啥父母都把好吃的给自己吃了,可能年龄大了,大部分都尝过了,也经历过了,就慢慢把这种欲望给弄丢了。挺无奈也挺难受的吧。真不知道将来自己还会丢失什么现在的东西,慢慢的品吧!

第六章:展望

    以后有时间再写怎么配置Eclipse和怎么run和怎么debug吧,得休息一段时间,写文章也是非常累的。真的!虽然博士毕业的时候,写文章感觉还挺轻松,但是工作之后就感觉累了!

    技术这块,别人能做出来,咱们也能做出来,只是时间问题!所以慢慢花点时间,总能做出来。小伙伴如果需要这方面的东西,或者哪个地方弄不好,可以浏览下下面的文章里面的公众号,可以添加下,有什么问题可以私信,里面没有几篇文章,只是会放百度网盘链接,需要的话我会把程序放进去,小伙伴们自己下载就行!也希望和小伙伴们一起进步!

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值