搜索
bottom↓
回复: 21

在 Code Blocks 中开发 STM32F10x

[复制链接]

出0入0汤圆

发表于 2013-6-11 13:32:49 | 显示全部楼层 |阅读模式
本帖最后由 ele_eye 于 2013-6-11 13:35 编辑

1 下载:Sourcery G++ Lite for ARM EABI

2 设置编译器路径: 从 GCC ARM 拷贝而来 改名为: Code Sourcery G++ Lite



3 新建ARM Project

4 添加STM32库文件,和 mdk 类似

  注意需要添加 gcc_ride7文件夹中的  GCC的启动文件: xxx.s



5 加入头文件搜索目录:



6 添加连接脚本





7 添加定义宏: 

  STM32F10X_MD

  USE_STDPERIPH_DRIVER

以及 C99编译选项:  -std=c99 (注意:不是 mdk中 的 --c99)

然后编译文件 就OK, 了

添加编译后步骤,得到HEX文件和代码长度:

arm-none-eabi-objcopy.exe -O ihex $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).hex
arm-none-eabi-size.exe $(TARGET_OUTPUT_FILE)







/******************************************************************/

8 还存在问题:

在有用到 __WFI() 和 __WFE() 时编译有错误:表示MCPU不支持这个语句,可能还是哪里还需要设置为STM32的MCU





但是当我加入编译选项 -mcpu=stm32f103c8 后,编译提示: cc1.exe: error: bad value (stm32f103c8) for -mcpu switch

可能当前的Sourcery G++ Lite 还没有支持 STM32  



在这里求助,谢谢了!!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-11 13:46:29 | 显示全部楼层
-mcpu=处理器架构
就像我用来编译STM32F3Discovery的编译选项里面是:
CFLAGS += -mcpu=cortex-m4

正好今天把Code::Blocks编译好了.发现启动速度好慢

出0入0汤圆

 楼主| 发表于 2013-6-11 13:52:58 | 显示全部楼层
笑笑我笑了 发表于 2013-6-11 13:46
-mcpu=处理器架构
就像我用来编译STM32F3Discovery的编译选项里面是:
CFLAGS += -mcpu=cortex-m4

我加入 -mcpu=cortex-m3   编译的时候提示错误:error: target CPU does not support ARM mode

还是不行的

直接下载编译好的 Code Blocks  现在有最新版本是 12.11的

出0入0汤圆

发表于 2013-6-11 14:25:26 | 显示全部楼层
ele_eye 发表于 2013-6-11 13:52
我加入 -mcpu=cortex-m3   编译的时候提示错误:error: target CPU does not support ARM mode

还是不行 ...

看下你完整的编译选项.
我的是
CFLAGS = -g -c -O2 -T stm32f30_flash.ld $(INCDIR)
CFLAGS += -mcpu=cortex-m4 -mlittle-endian -mthumb -mthumb-interwork
CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
CFLAGS += -nostdlib -ffreestanding

出0入0汤圆

 楼主| 发表于 2013-6-12 00:26:59 | 显示全部楼层
笑笑我笑了 发表于 2013-6-11 14:25
看下你完整的编译选项.
我的是
CFLAGS = -g -c -O2 -T stm32f30_flash.ld $(INCDIR)

非常感谢!!!
根据你的编译选项,添加进去,现在就可以编译成功了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入618汤圆

发表于 2013-6-12 00:48:11 | 显示全部楼层
ele_eye 发表于 2013-6-12 00:26
非常感谢!!!
根据你的编译选项,添加进去,现在就可以编译成功了!

其实关键就是-mthumb,因为m3只有thumb模式。

出0入0汤圆

发表于 2013-6-12 08:08:48 | 显示全部楼层
不如直接makefile,codeblocks的gdb前端非常烂

出0入0汤圆

发表于 2013-6-12 08:56:57 | 显示全部楼层
看看。
            

出0入0汤圆

发表于 2013-6-12 10:04:35 | 显示全部楼层
liurangzhou 发表于 2013-6-12 08:08
不如直接makefile,codeblocks的gdb前端非常烂

一直不知道GDB里面怎么看通用寄存器的值.

出0入0汤圆

发表于 2013-6-12 10:32:53 | 显示全部楼层
codeblock,爱之但不敢用之,代码自动补全功能不能进行宏解析

出0入0汤圆

发表于 2013-6-12 11:47:36 | 显示全部楼层
本帖最后由 i55x 于 2013-6-12 11:48 编辑

能用gcc编译stm32的ide很多,sourceinsight、slickedit神马的,但是既能用gcc编译又能用jlink在线调试的ide只找到eclipse一种。
http://www.emb4fun.de/arm/eclipse/index.html

撸主要是能开发一个jlink gdb的codeblocks插件就造福人类了。

出0入0汤圆

 楼主| 发表于 2013-6-12 11:56:21 | 显示全部楼层
codeblocks 确实缺点很多,但是优点也是很多的
当前我使用 codeblocks  编写AVR程序,编写 MSP430, 现在又可以编写 STM32, 且体积小,且功能很多 而且是免费的,当前对于我来说是一个非常不错的ide

况且使用前段时间 用 wxwidgets  和 MinGW 编写简单的上位机程序还是可以的。

免费开源的东西多试试 还是不错的,万一哪天打击盗版严厉了(这应该是趋势所在,知识权保护应该会好起来的),我们还可以有个备份的东西

出0入0汤圆

发表于 2013-6-12 14:54:46 | 显示全部楼层
i55x 发表于 2013-6-12 11:47
能用gcc编译stm32的ide很多,sourceinsight、slickedit神马的,但是既能用gcc编译又能用jlink在线调试的ide ...

不止,还有emIDE,就是基于Code::Blocks的,已经把GCC编译器配好,可直接调JLink调试。
参见:http://www.emide.org/

出0入0汤圆

 楼主| 发表于 2013-6-12 15:42:59 | 显示全部楼层
yzhu 发表于 2013-6-12 14:54
不止,还有emIDE,就是基于Code::Blocks的,已经把GCC编译器配好,可直接调JLink调试。
参见:http://www ...

emIDE 确实不错!!

出0入0汤圆

发表于 2013-6-12 21:28:01 | 显示全部楼层
ele_eye 发表于 2013-6-12 15:42
emIDE 确实不错!!

你是怎么配置Jlink GDB调试的?能不能写一下,非常感谢。

出0入0汤圆

发表于 2013-6-17 21:05:23 | 显示全部楼层
lit 发表于 2013-6-12 21:28
你是怎么配置Jlink GDB调试的?能不能写一下,非常感谢。

我的是这样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-18 08:23:08 | 显示全部楼层
wang80891 发表于 2013-6-17 21:05
我的是这样

我后来的结果是这样的:编译通过,调试也可以(虽然卡死数次),
但是用这个延时函数闪烁LED就是不行
  1. void delay_t(uint32_t counter)
  2. {
  3.    for(; counter != 0; --counter);
  4. }
  5. //……省略
  6. LEDON;
  7. delay_t(0X0FFFEF);
  8. LEDOFF;
  9. delay_t(0X0FFFEF);
复制代码
用这个延时函数却可以
  1. void delay (int a)
  2. {
  3.         volatile int i,j;

  4.         for (i=0 ; i < a ; i++)
  5.         {
  6.                 j++;
  7.         }

  8.         return;
  9. }
复制代码
找了半天,无解,如果uint32_t 这样的类型不能正确使用,那还是回归简单模式吧。

出0入0汤圆

发表于 2013-6-18 21:25:00 | 显示全部楼层
lit 发表于 2013-6-18 08:23
我后来的结果是这样的:编译通过,调试也可以(虽然卡死数次),
但是用这个延时函数闪烁LED就是不行用这 ...
  1. 0x08000A1C        push        {r7}
  2. 0x08000A1E        sub        sp, #12
  3. 0x08000A20        add        r7, sp, #0
  4. 0x08000A22        str        r0, [r7, #4]
  5. 0x08000A24        b.n        0x8000a2e <delay_t+18>
  6. 0x08000A26        ldr        r3, [r7, #4]
  7. 0x08000A28        add.w        r3, r3, #4294967295
  8. 0x08000A2C        str        r3, [r7, #4]
  9. 0x08000A2E        ldr        r3, [r7, #4]
  10. 0x08000A30        cmp        r3, #0
  11. 0x08000A32        bne.n        0x8000a26 <delay_t+10>
  12. 0x08000A34        add.w        r7, r7, #12
  13. 0x08000A38        mov        sp, r7
  14. 0x08000A3A        pop        {r7}
  15. 0x08000A3C        bx        lr
复制代码
我测试是可以的,编译出来的代码像这个样子,不过0xfffef比较快,看不出来变化,用0x2fffef就可以看出明显变化了

出0入0汤圆

发表于 2017-6-18 20:39:35 | 显示全部楼层

出0入0汤圆

发表于 2017-6-18 20:47:51 | 显示全部楼层
emIDE 留做备用

出0入0汤圆

发表于 2017-6-19 09:08:32 | 显示全部楼层
进来学习一下。

出0入0汤圆

发表于 2017-6-19 10:05:27 | 显示全部楼层
本帖最后由 JoshuaAstray 于 2017-6-19 10:07 编辑

再推荐一个embitz,emIDE已经停止更新了,而embitz则还在继续更新,这货仿的VS的界面,https://www.embitz.org/

同样是使用gcc的编译器,同时调用JLINK GDB Server,和emIDE完全一样

PS,embitz还支持MSP430和PIC单片机
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 07:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表