返回该小组首页 回复主题
simonqian

simonqian

小组等级:     E币:1048  (E币换礼)

#1楼主:【分享】用GCC开发STM32 [精华]

文章发表于:2008-04-22 04:32

用GCC写的命令行界面测试程序点击下载,代码和Makefile是基于http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index_cortex.html#stm32_blink修改的

找到2个可用的GCC Toolchain
一个是Codesourcery的官方Toolchain(选择ARM EABI):http://www.codesourcery.com/gnu_toolchains/arm/download.html
还有一个是WinARM的最新测试版本20080331(连接向下可以找到):http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm

不过这2个Toolchain的strcmp函数好像都有一些问题(表现为,如果参数有一个是指向SRAM的指针的话,程序会出问题,可能string.h里的函数都有这个问题,没有一一测试过),我自己写了一个代替:
u8 myStrCmp(char *s0, char *s1)
{
  for (;*s0 == *s1;++s0,++s1)
    if (*s0 == '\0')
      return 0;

  return (*(unsigned char *)s0 < *(unsigned char *)s1 ? -1 : +1);
}

运行图片(上位机使用115200_8N1,'#'是命令提示符):
点击开大图

到此,我习惯的开发环境已经建立完毕,要测试其他功能模块了(通过自己定义的命令)。然后再把这个界面通过USB CDC实现到USB接口上(硬件用st-link II?)。

拿st-link II开刀(谁让利源小气,提供的开发板没有USB接口),把命令行界面移植到了USB CDC接口,ST的库和示例代码中有一些错误,费了些时间。贪吃蛇和俄罗斯方块就不移植了(不浪费时间了),有兴趣的话可以找我要贪吃蛇和俄罗斯方块的源代码。以后如果要使用st-link II了,利源能否行行好,把固件给我下载一下?

USB CDC版CLI(已修改,可以使用STM32USBBoot下载):点击下载

附以前在CLI上实现的上贪吃蛇和俄罗斯方块的图片:
点击开大图
点击开大图

下一步:USB接口的Bootloader,终于可以解放串口了。MS ST提供了一个在USB示例程序中。
看了示例的一个文件,第一感觉:不稀饭,重写
暂定项目名为STM32USBBoot(和我以前开发的LPCUSBBoot正好一套,当然类似的还有AVR上的AVRUSBBoot),仍旧使用CDC模拟一路串口,在这个串口上,模仿STM32的串口ISP协议,这样,使用同样的上位机就可以下载程序。
LPCUSBBoot的实现方式也类似,干这事,偶可是熟门熟路的了。
接口方便,速度快,还没有波特率的问题,是居家旅游,杀人灭口。。。
http://www.simonqian.com/en/LPCUSBBoot/index.html

STM32USBBoot已完成,上位机使用Flash Loader(下载时,需要选择起始地址为0x08002000),占用Flash底部8K空间
应用程序需要做的修改:
1.连接脚本(设置起始地址为0x08002000):FLASH (rx) : ORIGIN = 0x8002000, LENGTH = 120K
2.NVIC设置SetVectTable需要加上一个偏移0x2000:NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);

测试Alpha版代码(发布时将使用GPLv2协议):请在我的网站下载最新版本

STM32的Flash串口下载速度相比NXP的ARM7要快非常多了,以下是STM32串口下载和USB接口下载的速度对比(NXP的LPC2148以前测试的时候发现差8倍),命令行中的区别是COM1和COM6
串口速度(47K程序):
点击开大图
USB接口速度(47K程序):
点击开大图

既然破坏了st-link II,下一步就要用st-link II的硬件再做一个JTAG调试工具了,其实这个不复杂,可以使用OpenOCD来实现,实现一些JTAG基本接口的调用,在OpenOCD中增加一个设备,实现jtag_interface_t结构中的几个接口函数,基本就OK了。不然当初也不会想都不想kill掉st-link II了,不过实现和测试确实需要一定的时间,而且,之后基本就只能使用Eclipse来作为调试界面了。

simonqian

   小组等级:    E币:1048  (E币换礼)

#2

文章发表于:2008-04-22 04:52

main.c中的USART_In函数修改为(当参数为0的时候,无限延时等待):

u8 USART_In(u32 dly)
{
  u32 cnt = dly * 100000;

  while((USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == RESET) && (!cnt || dly))dly--;

  if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) != RESET)
    return USART_ReceiveData(USART1);
  else
    return 0;
}

STM32

   小组等级:    E币:3736  (E币换礼)

#3

文章发表于:2008-04-22 08:54

强,又见一个高级玩家。

谢谢分享。

wgqabc

   小组等级:    E币:104  (E币换礼)

#4

文章发表于:2008-04-22 09:05

好强,收到板子了,但不知道怎么往里写程序

cqcrr

   小组等级:    E币:1244  (E币换礼)

#5

文章发表于:2008-04-22 10:19

lz是在linux下开发嵌入式?高手

simonqian

   小组等级:    E币:1048  (E币换礼)

#6

文章发表于:2008-04-22 11:03

有些代码在Linux下写,主要因为gvim效率,但我的笔记本在Linux下,minicomm会出问题,所以如果有串口操作的话,在Windows下使用。

to 4#:我使用串口,用以前一块PCB的串口部分,和另一块PCB的USB接口部分供电,使用杜邦线连接。测试程序包中有stm32boot.exe,可以用这个下载,Makefile已经集成,编译完后自动下载,或者用"make flash"命令下载。

另,go.bat和clean.bat是在Windows下使用,一个是编译下载,一个是清理项目,不需要打命令,直接双击就可以了。如果希望批处理运行完后,等待任意按键再推出,那么在文件最后一行加入"pause"。

不知道ST有没提供st-link II的下载文件,这样USB接口的测试可以直接在st-link II上完成了。

channlv

   小组等级:    E币:374  (E币换礼)

#7

文章发表于:2008-04-22 13:30

买块硬盘装

ubuntu

simonqian

   小组等级:    E币:1048  (E币换礼)

#8

文章发表于:2008-04-22 17:02

LS赶个正好啊,Ubuntu 8.04就发布了,偶从Beta开始用的。

在使用指纹登陆时,Gnome无法自动unlock keyring;FF的Flash插件占用资源太多的2个老问题外,其他的还是非常爽的。

sunke9

   小组等级:    E币:1349  (E币换礼)

#9

文章发表于:2008-04-24 08:22

我也准备用GCC开发STM32

simonqian

   小组等级:    E币:1048  (E币换礼)

#10

文章发表于:2008-04-24 16:21

sunke也来玩啦,偶已经玩了几天了,想自己开发个开源USB接口仿真工具,只是没有现成的协议可以模拟,还是Atmel好,提供了开发工具的USB接口协议,即使不提供源代码,但实现起来也还没有什么问题。

STM32基本都是用C语言了

shemily

   小组等级:    E币:325  (E币换礼)

#11

文章发表于:2008-07-01 00:08

这个强啊,我就喜欢这样的

2【下一页】总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

设计资源与分销