你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

推荐个GNU编译器:Codesourcery (内附工程模板和例子)

[复制链接]
ST老少女 发布时间:2008-12-2 15:16
Codesourcery G++是个商业软件, 不过它有个lite版本,是完全免费的,只不过没有IDE,只有commmand line。 这对于习惯于使用GNU编译器的人来说已经足够了。自己在找个编辑器(我用的是source insight)开发起来应该说还算方便。

Codesourcery G++支持coldfire, powerpc, ARM 和 MIPS. 每种都有windows和linxu下运行的版本。从其主页上看,Codesourcery应该是ARM和MIPS公司的合作伙伴了, 因此其提供的编译器各方面应该还是不错的。早在GCC支持cortex之前,codesourcery就已经有了支持cortex的版本了。

我在年初买了一块EK-STM32板子,在公司,以及自己用AVR,其它ARM都是GNU,因此不大习惯使用keil和IAR。另外住在公司不方便(protel事件)。于是找到了这个codesourcery,当时貌似还没多少人用这个玩STM32,没找到范例。好在GNU那一套都差不多。自己摸索摸索终于还是用起来了。写了几个程序,移植了个以前其它平台上的mp3。 后来板子就扔在那,没有再玩。8过最近还是玩起来了。
首先下载了最新的q3版本的软件包。要选择EABI的windows版本。然后按装,安装很简单,一个可执行文件,按照正常的那套就行了。

重新编译一下以前的程序。 有个错误,是一个内部库文件的函数名前要多加一个"_" 影响不大。
编译完,哇,size从之前的45K减少到38K,看来的确如别人所说,性能有所提高。这个版本的codesourcery使用了新的lib,我的程序中使用到printf函数,估计在这上面优化了吧。不过如果size吃紧的话最好还是自己写一个简单版的printf函数。不然代码会增加很多 (以前是一下子增加20K左右)。

具体怎么用这个编译器,下面附上我的程序。

这个压缩包内有三个文件夹。
build_library:顾名思义就是用来编译lib文件的。原来是放在每个工程下的。不过我嫌它占地方,就把它独立出来,build好后直接把lib文件(.a后缀)拷到我程序的目录下。如何编译这个lib呢,很简单装好codesourcery后进入command line,到./buid_library/library/src 然后敲make就可以了。 如果要配置lib,在project目录下有一个头文件,另外生成的lib文件也放在这。

mp3_player_02:这是我移植的mp3程序。根据豆皮重新修改了IO口的位置(注:需要外接VS1003模块)。另外增加了SDHC的支持。
具体端口是:(我直接从程序中copy的)

SD卡的 (可以使用豆皮上的SD卡socket):
#define MMC_SD_CS                        GPIO_Pin_4
#define MMC_SD_CS_PORT                GPIOA
/******************************/

#define MMC_SD_SCK                        GPIO_Pin_5
#define MMC_SD_SCK_PORT        GPIOA

#define MMC_SD_MISO                GPIO_Pin_6
#define MMC_SD_MISO_PORT        GPIOA

#define MMC_SD_MOSI                GPIO_Pin_7
#define MMC_SD_MOSI_PORT        GPIOA

#define MMC_SD_SPI_SAME        1        /* it indicate that all SPI signal are in the same port*/
#define MMC_SD_SPI_PORT        GPIOA
/*****************************/

#define MMC_SD_GPIO_PORTS        RCC_APB2Periph_GPIOA

VS1003的:
#define VS1003B_XCS                        GPIO_Pin_0
#define VS1003B_XCS_PORT        GPIOB

#define VS1003B_XDCS                GPIO_Pin_2
#define VS1003B_XDCS_PORT        GPIOB

#define VS1003B_XRESET                GPIO_Pin_1
#define VS1003B_XRESET_PORT        GPIOB

#define VS1003B_CONTROL_SAME 1
#define VS1003B_CONTROL_PORT GPIOB         /* it indicate that all above signal are in the same port*/

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

#define VS1003B_DREQ                GPIO_Pin_5
#define VS1003B_DREQ_PORT        GPIOC

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

#define VS1003B_SCK                        GPIO_Pin_5
#define VS1003B_SCK_PORT        GPIOA

#define VS1003B_MISO                GPIO_Pin_6
#define VS1003B_MISO_PORT        GPIOA

#define VS1003B_MOSI                GPIO_Pin_7
#define VS1003B_MOSI_PORT        GPIOA

#define VS1003B_SPI_SAME        1        /* it indicate that all SPI signal are in the same port*/
#define VS1003B_SPI_PORTS        GPIOA

#define VS1003B_GPIO_PORTS        RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC

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

3310 LCD的,虽然我目前没有接LCD,但是之前有,应该是可以工作的:
#define HW_SPI 1

/******************* Hardware pins definition **********************/

/* pins of the signal */
#define LCD_RS                        GPIO_Pin_3
#define LCD_RS_PORT                GPIOE

#define LCD_E                        GPIO_Pin_4
#define LCD_E_PORT                GPIOE

#define LCD_RST                        GPIO_Pin_5
#define LCD_RST_PORT        GPIOE

#define LCD_CONTROL_SAME        1        /* it indicate that all Control signal are in the same port*/
#define LCD_CONTROL_PORT        GPIOE
/******************************/

#define LCD_SCK                        GPIO_Pin_5
#define LCD_SCK_PORT        GPIOA

#define LCD_MISO                GPIO_Pin_6
#define LCD_MISO_PORT        GPIOA

#define LCD_MOSI                GPIO_Pin_7
#define LCD_MOSI_PORT        GPIOA

#define LCD_SPI_SAME        1        /* it indicate that all SPI signal are in the same port*/
#define LCD_SPI_PORT        GPIOA
/*****************************/

#define LCD_GPIO_PORTS        RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE

按键:(使用豆皮上的三个,另一个跳线过来的,总数不够,用的时候得跳)
#define MODE        GPIO_Pin_8
#define STOP                GPIO_Pin_7
#define NEXT                GPIO_Pin_6
#define UP                GPIO_Pin_9
#define DOWN        GPIO_Pin_10
#define PREV         GPIO_Pin_11

#define KEYS_PORT GPIOC


这个程序编译在src/codesourcery下编译,敲make就可以了,最后生成bin文件。 用烧写软件烧进去就可以工作了。 这个软件即使没有VS1003模块,也可以测试SD卡(虽然不能播放),还有板子上LED5会闪烁。 板子会从串口1输出信息。

WORM_LED:这个是littleworm写的豆皮的跑马灯程序。由于GNU的优化搞得鬼, 需要在里面的delay函数作一处改动asm("nop")。也仅此一处改动。 所以应该说其它平台下的程序几乎不需要改动就可以在这个模板上运行了。
收藏 评论9 发布时间:2008-12-2 15:16

举报

9个回答
ST老少女 回答时间:2008-12-2 15:24:07

回复:推荐个GNU编译器:Codesourcery (内附工程模板和例子)

原帖由ST老少女于2008-12-02 15:16发表:
Codesourcery G++是个商业软件, 不过它有个lite版本,是完全免费的,只不过没有IDE,只有commmand line。 这对于习惯于使用GNU编译器的人来说已经足够了。自己在找个编辑器(我用的是source insight)开发起来应该说还算方便。

Codesourcery G++支持coldfire, powerpc, ARM 和 MIPS. 每种都有windows和linxu下运行的版本。从其主页上看,Codesourcery应该是ARM和MIPS公司的合作伙伴了, 因此其提供的编译器各方面应该还是不错的。早在GCC支持cortex之前,codesourcery就已经有了支持cortex的版本了。

我在年初买了一块EK-STM32板子,在公司,以及自己用AVR,其它ARM都是GNU,因此不大习惯使用keil和IAR。另外住在公司不方便(protel事件)。于是找到了这个codesourcery,当时貌似还没多少人用这个玩STM32,没找到范例。好在GNU那一套都差不多。自己摸索摸索终于还是用起来了。写了几个程序,移植了个以前其它平台上的mp3。 后来板子就扔在那,没有再玩。8过最近还是玩起来了。
首先下载了最新的q3版本的软件包。要选择EABI的windows版本。然后按装,安装很简单,一个可执行文件,按照正常的那套就行了。

重新编译一下以前的程序。 有个错误,是一个内部库文件的函数名前要多加一个"_" 影响不大。
编译完,哇,size从之前的45K减少到38K,看来的确如别人所说,性能有所提高。这个版本的codesourcery使用了新的lib,我的程序中使用到printf函数,估计在这上面优化了吧。不过如果size吃紧的话最好还是自己写一个简单版的printf函数。不然代码会增加很多 (以前是一下子增加20K左右)。

具体怎么用这个编译器,下面附上我的程序。

这个压缩包内有三个文件夹。
build_library:顾名思义就是用来编译lib文件的。原来是放在每个工程下的。不过我嫌它占地方,就把它独立出来,build好后直接把lib文件(.a后缀)拷到我程序的目录下。如何编译这个lib呢,很简单装好codesourcery后进入command line,到./buid_library/library/src 然后敲make就可以了。 如果要配置lib,在project目录下有一个头文件,另外生成的lib文件也放在这。

mp3_player_02:这是我移植的mp3程序。根据豆皮重新修改了IO口的位置(注:需要外接VS1003模块)。另外增加了SDHC的支持。
具体端口是:(我直接从程序中copy的)

SD卡的 (可以使用豆皮上的SD卡socket):
#define MMC_SD_CS                        GPIO_Pin_4
#define MMC_SD_CS_PORT                GPIOA
/******************************/

#define MMC_SD_SCK                        GPIO_Pin_5
#define MMC_SD_SCK_PORT        GPIOA

#define MMC_SD_MISO                GPIO_Pin_6
#define MMC_SD_MISO_PORT        GPIOA

#define MMC_SD_MOSI                GPIO_Pin_7
#define MMC_SD_MOSI_PORT        GPIOA

#define MMC_SD_SPI_SAME        1        /* it indicate that all SPI signal are in the same port*/
#define MMC_SD_SPI_PORT        GPIOA
/*****************************/

#define MMC_SD_GPIO_PORTS        RCC_APB2Periph_GPIOA

VS1003的:
#define VS1003B_XCS                        GPIO_Pin_0
#define VS1003B_XCS_PORT        GPIOB

#define VS1003B_XDCS                GPIO_Pin_2
#define VS1003B_XDCS_PORT        GPIOB

#define VS1003B_XRESET                GPIO_Pin_1
#define VS1003B_XRESET_PORT        GPIOB

#define VS1003B_CONTROL_SAME 1
#define VS1003B_CONTROL_PORT GPIOB         /* it indicate that all above signal are in the same port*/

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

#define VS1003B_DREQ                GPIO_Pin_5
#define VS1003B_DREQ_PORT        GPIOC

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

#define VS1003B_SCK                        GPIO_Pin_5
#define VS1003B_SCK_PORT        GPIOA

#define VS1003B_MISO                GPIO_Pin_6
#define VS1003B_MISO_PORT        GPIOA

#define VS1003B_MOSI                GPIO_Pin_7
#define VS1003B_MOSI_PORT        GPIOA

#define VS1003B_SPI_SAME        1        /* it indicate that all SPI signal are in the same port*/
#define VS1003B_SPI_PORTS        GPIOA

#define VS1003B_GPIO_PORTS        RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC

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

3310 LCD的,虽然我目前没有接LCD,但是之前有,应该是可以工作的:
#define HW_SPI 1

/******************* Hardware pins definition **********************/

/* pins of the signal */
#define LCD_RS                        GPIO_Pin_3
#define LCD_RS_PORT                GPIOE

#define LCD_E                        GPIO_Pin_4
#define LCD_E_PORT                GPIOE

#define LCD_RST                        GPIO_Pin_5
#define LCD_RST_PORT        GPIOE

#define LCD_CONTROL_SAME        1        /* it indicate that all Control signal are in the same port*/
#define LCD_CONTROL_PORT        GPIOE
/******************************/

#define LCD_SCK                        GPIO_Pin_5
#define LCD_SCK_PORT        GPIOA

#define LCD_MISO                GPIO_Pin_6
#define LCD_MISO_PORT        GPIOA

#define LCD_MOSI                GPIO_Pin_7
#define LCD_MOSI_PORT        GPIOA

#define LCD_SPI_SAME        1        /* it indicate that all SPI signal are in the same port*/
#define LCD_SPI_PORT        GPIOA
/*****************************/

#define LCD_GPIO_PORTS        RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE

按键:(使用豆皮上的三个,另一个跳线过来的,总数不够,用的时候得跳)
#define MODE        GPIO_Pin_8
#define STOP                GPIO_Pin_7
#define NEXT                GPIO_Pin_6
#define UP                GPIO_Pin_9
#define DOWN        GPIO_Pin_10
#define PREV         GPIO_Pin_11

#define KEYS_PORT GPIOC


这个程序编译在src/codesourcery下编译,敲make就可以了,最后生成bin文件。 用烧写软件烧进去就可以工作了。 这个软件即使没有VS1003模块,也可以测试SD卡(虽然不能播放),还有板子上LED5会闪烁。 板子会从串口1输出信息。

WORM_LED:这个是littleworm写的豆皮的跑马灯程序。由于GNU的优化搞得鬼, 需要在里面的delay函数作一处改动asm("nop")。也仅此一处改动。 所以应该说其它平台下的程序几乎不需要改动就可以在这个模板上运行了。
20081025_c7679148de4f21e2ce53HG2PKiR8ZgkY.jpg
20081025_6e6ae06f31b56fd7f3914THbQQYqaUoU.jpg
20081025_f41ef954b1b0ce9ab180znect8xLguoP.jpg
lei_yong 回答时间:2011-6-13 13:54:29

RE:推荐个GNU编译器:Codesourcery (内附工程模板和例子)

看看
sailor-398112 回答时间:2012-11-1 10:43:13

回复:推荐个GNU编译器:Codesourcery (内附工程模板和例子)

RE:推荐个GNU编译器:Codesourcery (内附工程模板和例子)
想看
glyhw 回答时间:2013-2-24 17:25:52

回复:推荐个GNU编译器:Codesourcery (内附工程模板和例子)

好东西呀
zhou__mi 回答时间:2014-1-20 19:38:16

回复:推荐个GNU编译器:Codesourcery (内附工程模板和例子)

工程模板和例子 ,在哪里?学习一下!
fengye5340 回答时间:2014-1-20 19:56:01

RE:推荐个GNU编译器:Codesourcery (内附工程模板和例子)

这个不错
cdl35 回答时间:2014-3-2 21:40:18

回复:推荐个GNU编译器:Codesourcery (内附工程模板和例子)

学习一下,真的不错
zskwince 回答时间:2014-8-9 16:04:11

回复:推荐个GNU编译器:Codesourcery (内附工程模板和例子)

现在来学习下,很好的东西
hkchenhao 回答时间:2014-8-25 15:37:25

RE:推荐个GNU编译器:Codesourcery (内附工程模板和例子)

学习学习printf的用法

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版