前言
上篇文章介绍了怎么将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实时显示曲线