热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

完整且超简化的linux下stm32开发环境(编译,下载)---测试中

完整且超简化的linux下stm32开发环境(编译,下载)最近要用stm32开发产品,考虑到以前作高端arm,or32开发以及低端的avr开发都用gcc,因此为了降低学习难度和省钱,决定继续使用gcc

完整且超简化的linux下stm32开发环境(编译,下载)

最近要用stm32开发产品,考虑到以前作高端arm,or32开发以及低端的avr开发都用gcc,因此为了降低学习难度和省钱,决定继续使用gcc。 
经过搜索网络查阅资料,发现stm32的gcc支持虽然没有问题,但是对普通开发者而言,实在过于复杂,至少比avr-gcc复杂太多, 
开发者在编写makefile之外,不得不自己搞定启动初始化代码,甚至自己要写ld文件,这实在不是件舒服的事。 
    因此,在参考网络诸多国内外的大侠提供的资料,综合自己的开发经验,经过一段时间完善,有了这个开发环境(并非集成开发环境IDE), 
实现了普通开发人员无须关心启动初始化代码和ld文件,简化makefile编写,大大降低stm32 gcc入门难度的目的。 
详细功能包括: 
1>无须为自己的程序编写启动代码和ld描述文件,只需要写一个高度简化的makefile(提供了编写范例) 
2>支持最小改动源码情况下,生成可用IAP程序下载的带ROM OFFSET程序(通过makefile控制),方便用户升级 
3>命令行方式下载程序到stm32电路板 
4>GUI方式使用IAP下载 

注意:所有用到的程序均是开源且可免费获得,这里只是将它们综合起来使用 
另:因为本人主要使用Linux环境开发,因此未对win32下进行测试,但是理论上应该是完全和cygwin环境兼容,没有问题。 


首先用户自行下载stm32 gcc环境 
http://www.codesourcery.com/gnu_toolchains/arm/download.html 
注意下载EABI版本 

SDK环境压缩文件  SDK.rar (1.21 MB) 
完整的开发环境设置,包括启动文件,ld文件,makefile模板,st官方fwlib及模板,详细看里面的readme.txt 
由于目前手里只有stm32F103,ld文件模板只有这个的ROM(FLASH)方式,其他芯片模板可参考建立(已经进行了简化,很简单),或者等以后俺添加 

IAP示例  IAP_AN_gcc.rar (231.29 KB) 
针对万利EK-STM32(STM3210B-LK1)的ST官方IAP实例移植及LED测试程序,注意,使用的按键是KEY2,当IAP已装入板子后,启动系统时 
如果检测到KEY2为已经按下状态,则进入IAP模式,否则加载0x8002000起的应用程序 
其中IAP部分makefile包含了如何使用wine调用win32下的stm32boot下载工具来下载iap.bin到目标板 
由于IAP使用了ymodem协议,我使用了linux下可以和这个IAP协同工作的GUI程序cutecom,另还要安装lrzsz,cutecom会自动调用lrzsz, 
cutecom设置示意图如下: 

 
cutecom设置画面 

注意IAP要求输入命令1时,移到input区输入键盘按键"1"即可 

adc及lcd测试示例  adc1_lcd.rar (19.64 KB) 同上,为修改的adc测试程序,额外添加了TIM测试,休眠测试,按键测试及浮点数计算等,默认编译需要使用IAP来下载它。 

编程注意事项: 
1>makefile中,是通过添加OBJS += xxx.o来添加用户文件的,注意后缀不是.c 
2>makefile第一行指定SDK目录位置,自己按自己路径修改 
3>为了使同一个程序代码无须修改即可运行于rom offset模式(使用IAP加载) 
NVIC_Configuration中对应代码需要修改为如下 
#ifdef  VECT_TAB_RAM   
  /* Set the Vector Table base location at 0x20000000 */  
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);  
#else  /* VECT_TAB_FLASH  */ 
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, ROM_OFFSET_SIZE); 
#endif

再补贴个makefile,大家看是否简洁 

STM32_SDK_DIR = /src/work/stm32/SDK 

TARGET = iap 

PCB_BOARD = EK_STM32F 
#RUN_MODE = ROM_RUN 

APP_BASE      = .. 
APP_SRC_DIR   = $(APP_BASE)/source 

CFLAGS         += -I$(APP_BASE)/include 

OBJS += stm32f10x_it.o 
OBJS += stm32f10x_lib.o  
OBJS += stm32f10x_gpio.o 
OBJS += stm32f10x_rcc.o 
OBJS += stm32f10x_flash.o 
OBJS += stm32f10x_usart.o 
OBJS += stm32f10x_wwdg.o 

OBJS += common.o 
OBJS += download.o 
OBJS += ymodem.o 
OBJS += main.o   
########################################################################## 
include $(STM32_SDK_DIR)/pub/config.mk 
######################################################################### 
upload: $(TARGET).bin 
        wine ./stm32boot -e -c com3 $(TARGET).bin 


#########################################################################

推荐阅读
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • POJ 1696: 空间蚂蚁算法优化与分析
    针对 POJ 1696 的空间蚂蚁算法进行了深入的优化与分析。本研究通过改进算法的时间复杂度和空间复杂度,显著提升了算法的效率。实验结果表明,优化后的算法在处理大规模数据时表现优异,能够有效减少计算时间和内存消耗。此外,我们还对算法的收敛性和稳定性进行了详细探讨,为实际应用提供了可靠的理论支持。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • 池子比率:BSV 区块链上的去中心化金融应用——Uniswap 分析
    池子比率:BSV 区块链上的去中心化金融应用——Uniswap 分析 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • C++ 进阶:类的内存布局与虚函数类的实现细节
    C++ 进阶:类的内存布局与虚函数类的实现细节 ... [详细]
  • Python学习:环境配置与安装指南
    Python作为一种跨平台的编程语言,适用于Windows、Linux和macOS等多种操作系统。为了确保本地已成功安装Python,用户可以通过终端或命令行界面输入`python`或`python3`命令进行验证。此外,建议使用虚拟环境管理工具如`venv`或`conda`,以便更好地隔离不同项目依赖,提高开发效率。 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • 如何在Spark数据排序过程中有效避免内存溢出(OOM)问题
    本文深入探讨了在使用Spark进行数据排序时如何有效预防内存溢出(OOM)问题。通过具体的代码示例,详细阐述了优化策略和技术手段,为读者在实际工作中遇到类似问题提供了宝贵的参考和指导。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • 在Ubuntu系统中,由于预装了MySQL,因此无需额外安装。通过命令行登录MySQL时,可使用 `mysql -u root -p` 命令,并按提示输入密码。常见问题包括:1. 错误 1045 (28000):访问被拒绝,这通常是由于用户名或密码错误导致。为确保顺利连接,建议检查MySQL服务是否已启动,并确认用户名和密码的正确性。此外,还可以通过配置文件调整权限设置,以增强安全性。 ... [详细]
  • BZOJ1034 详细解析与算法优化
    本文深入解析了BZOJ1034问题,并提出了优化算法。通过借鉴广义田忌赛马的贪心策略,当己方当前最弱的马优于对方最弱的马时进行匹配;同样地,若己方当前最强的马优于对方最强的马,也进行匹配。此方法在保证胜率的同时,有效提升了算法效率。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
author-avatar
mobiledu2502852915
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有