IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 替代STM32的GD32,替代KEIL的Eclipse配置---连载4 -> 正文阅读

[嵌入式]替代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实时显示曲线

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:27:45  更:2022-09-04 01:28:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 15:56:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码