ubuntu下stm32cubemx下载生成的makeflie怎样配置才能通过编译?

How should I use Makefile in stm32cubeMX? | STMicroelectronics CommunityAccess denied | www.digitalocean.com used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website (www.digitalocean.com) has banned your access based on your browser's signature (40e59f588f266bfe-ua98).2493人阅读
STM32(19)
在我们了解libopencm3的使用后,发现libopencm3只适用于小型工程,其最大的特色只是在USB方面的使用方便,那么在我们配置大型工程的时候有没有一种更快捷的方式呢,显然是有的。它就是CubeMX,ST官方出的神器,可以使得我们像配置FPGA一样配置STM32的功能。CubeMX早期是运行在windows下的,但由于是Java写成的它也可以同样的运行在Linux环境中。
安装JAVA环境
在Ubuntu中可以使用的java环境有很多我们这里使用软件中心的默认安装。
$ sudo apt-get install default-jre
安装完毕后可使用指令查看java版本验证安装成功
$ java -version
安装CubeMX
首先我们在st的官网下载cubemx的安装包
解压并 cd 进入解压后的文件
使用指令运行 .Linux 执行文件
$ ./SetupSTM32CubeMX-4.19.0.linux
随后根据软件提示安装完成即可。
在完成安装后我们为了使得CubeMX可以显示图标,我们将安装包路径
下的图标文件复制到软件安装的位置。
SetupSTM32CubeMX-4.19.0.app/Contents
随后我们使用管理员权限在Ubuntu中添加应用的快捷方式:
$ sudo gedit /usr/share/applications/STM32CubeMX
在文件夹中写下
[Desktop Entry]
Version=4.19.0
Name=STM32CubeMX
Exec=/home/yangliu/Application/STM32CubeMX/STM32CubeMX
Terminal=false
Icon=/home/yangliu/Application/STM32CubeMX/stm32cubemx.icns
Type=Application
Categories=Development
此处注意 Exec、Icon后面的路径要根据自己软件安装的位置改变。在编辑完成后,我们就可以在Ubuntu的菜单中找到STM32CubeMX了,我们就可以将它拖到快速启动栏上了。
使用CubeMX生成工程
对于怎样使用CubeMX生成我们板卡的工程在Ubuntu下是和windows下一样的,我们就不做讲解了,唯一不同的是,我们在最后设置工程输出的IDE/Toolchain设置中要选择SW4STM32。
最后再配置好我们的makefile,就可以愉快的开始啦~。
我已经将一个使用cube生成的用于STM32F429DISCO的工程托管到GitHub,大家可以自己下载进行参考。工程中附含了一个标准的makefile文件,附带有详细的注释和清晰地结构,大家可以根据自己的需要去修改。
$ git clone https://github.com/zhengyangliu/STM32CubeMX-F429DISCO.git
最近的使用过程中发现CubeMX能直接生成带Makefile和链接文件的工程了,只要稍微改一下编译器路径和文件路径就能编译通过并正确运行了。>> 上一篇:
>> 下一篇:
STM32CubeMX确实是个好东西,可以协助开发者快速搭建应用开发平台。但与IDE的配合上,存在一些问题。比如:
使用STM32CubeMX自动生成工程代码后,都要全部重新编译。
使用MDK编译STM32CubeMX自动生成的工程代码时,编译速度巨慢。
某些版本IAR编译调试STM32CubeMX自动生成的工程,会有一些问题。
一. 全部重新编译的问题
这个问题,应该跟STM32CubeMX自动生成工程的头文件包含设计有关系。HAL层、某些中间件的头文件都被包含在了main.h头文件中。
二. MDK编译的问题
MDK编译巨慢的问题,太影响开发效率了,再加上第一个问题,基本上确定放弃使用MDK进行开发了。此外,在使用MDK5的过程中,还遇到了下面几个问题。
KEIL5编译链接问题#1:
直接使用MDK编译STM32CubeMX自动生成的工程代码时,编译时出现如下错误:
..\Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\port.c(483): error: A1586E: Bad operand types (UnDefOT, Constant) for operator (
这个问题需要修改下代码才能解决。
在port.c 483行,有代码如下:
/* Save the new top of stack into the first member of the TCB. */
str r0, [r2]
stmdb sp!, {r3}
mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY
msr basepri, r0
bl vTaskSwitchContext
mov r0, #0
msr basepri, r0
ldmia sp!, {r3}
#configMAX_SYSCALL_INTERRUPT_PRIORITY定义如下:
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY
( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY && (8 - configPRIO_BITS) )
configPRIO_BITS定义如下:
/* Cortex-M specific definitions. */
#ifdef __NVIC_PRIO_BITS
/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
#define configPRIO_BITS
__NVIC_PRIO_BITS
#define configPRIO_BITS
__NVIC_PRIO_BITS定义如下:
* @brief Configuration of the Cortex-M4 Processor and Core Peripherals
#define __CM4_REV
/*!& Core revision r0p1
#define __MPU_PRESENT
/*!& STM32F4XX provides an MPU
#define __NVIC_PRIO_BITS
/*!& STM32F4XX uses 4 Bits for the Priority Levels */
#define __Vendor_SysTickConfig
/*!& Set to 1 if different SysTick Config is used
#define __FPU_PRESENT
/*!& FPU present
问题应该归结于__NVIC_PRIO_BITS的定义。在main.h文件的/* USER CODE BEGIN Private defines */位置添加如下代码即可解决此问题。
/* USER CODE BEGIN Private defines */
#ifdef __NVIC_PRIO_BITS
#undef __NVIC_PRIO_BITS
#define __NVIC_PRIO_BITS
/* USER CODE END Private defines */
KEIL5编译链接问题#2:
编译链接时出现如下错误:
runtime error R6002 floating point support not loaded
根据说法,是电脑中毒导致的。用杀毒软件查了下,果然电脑中毒了。查杀病毒,卸载KEIL5并重装,解决问题。
KEIL5编译链接问题#3:
.\STM324xG_EVAL\STM324xG_EVAL.axf: error: L6047U: The size of this image (60876 bytes) exceeds the maximum allowed for this version of the linker
这是因为KEIL重装后没有破解的缘故。重新破解下就OK了。
三. IAR编译调试的问题
1. IAR6.3版本
最开始使用IAR6.3版本,直接编译STM32CubeMX自动生成的工程时,因没有设置芯片型号导致编译错误。而且使用J-LINK调试时,也有许多问题。
2. IAR8.2版本
下载了最新版本的IAR,首次打开STM32CubeMX自动生成的工程时,有设置芯片型号,但是设置的芯片型号与在STM32CubeMX选择的芯片型号有点点对不上。比如,我在STM32CubeMX选择的芯片型号是STM32F407VE,而在IAR中却是STM32F407ZG。
除此外,最大的问题在于使用J-LINK调试时存在头痛问题,导致调试不顺畅。
使用J-LINK调试时,运行一会儿,经常出现如下图所示错误:Failed to get CPU status after 4 retries Retry?
IAR下载程序提示:The connected J-Link is defective,Proper operation cannot be guaranteed…….
把IAR 8安装目录下的JLINK驱动换成IAR6.3版本驱动,不能解决问题。
上述问题#1和问题#2,此终无法解决。后面没办法,把IAR版本改为7.3版本,上述问题全部不存在,暂时可以正常使用了。
>> 本文地址:
>> 文章出处:
, 如果没有特别声明,文章均为reille博客原创作品
>> 郑重声明:
原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
推荐阅读相关文章:
- 53,041 次浏览 - 44,428 次浏览 - 35,410 次浏览 - 21,267 次浏览 - 20,154 次浏览 - 18,873 次浏览 - 12,000 次浏览 - 11,251 次浏览 - 11,077 次浏览 - 10,737 次浏览
Suffusion theme|Sayontan Sinha博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 stm32cubemx 的文章

 

随机推荐