豆皮 - STM32开发板入门教程(一) - LED跑马灯 (原创)

发布: 2008-10-21 15:51 | 作者: littleworm | 来源: StmFans思蜕盟 OPELC 自由电子联盟


豆皮 - STM32开发板入门教程(一)

LED 跑马灯


版权所有 STMFANS 原创,转载请保留出处

http://www.stmfans.com/bbs/viewthread.php?tid=1031&extra=page%3D1



一步一步创建第一个 IAR 工程 (IAR442 + ST-LINKII)


首先创建项目目录,拷贝公共文件:将 STM32 软件库中 FWlib 目录中的 library 目录拷贝到所建项目的目录中


Image00000.jpg



这个是库 FWLIB 文件夹
把 FWlib 目录中的 library 目录拷贝到所建项目的目录中


Image00001.jpg



将软件库的 Examples 目录里的任一例程的 stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h 和 main.c 拷贝到项目的目录中(这里选择的是 GPIO 目录下的 \FWLib\examples\GPIO\IOToggle)


Image00002.jpg



拷贝软件库中 \project\EWARM\ 目录中的 stm32f10x_vector.c、cortexm3_macro.s、lnkarm_ram.xcl 和 lnkarm_flash.xcl 到项目的目录中


Image00003.jpg



好了,系统的库文件和一些stm32的特征文件已经 copy 过来了


下面开始忙活 IAR 了

打开 IAR442 点击菜单 File --> New -->Workspace 创建一个新的工程



Image00004.jpg



点击菜单 Project --> Create New Project 创建一个项目 (empty 空白项目)



Image00005.jpg



保存项目到设定的项目根目录中

在项目的位置点右键,然后点 add
用户可以向项目中添加 *.c 文件;也可以添加代码组,然后将c 文件添加到组里面


Image00006.jpg



对于这个 LED 的例子,我添加了3个代码组
分别为 EWARM,FWLIB,USER



Image00007.jpg



然后
1 . 把 stm32f10x_vector.c ,cortexm3_macro.s 这 2 个文件 add 到 EWARM 中
2.  把 stm32f10x_flash.c,stm32f10x_gpio.c,stm32f10x_lib.c,stm32f10x_nvic.c,stm32f10x_rcc.c  5 个文件 add  到 FWLIB 中
3.  把 main.c ,stm32f10x_conf.h,  stm32f10x_it.c , stm32f10x_it.h 这 4 个文件 add 到 USER 中


添加好的情况如下图所示



Image00008.jpg



文件添加完毕 下面来配置一下这个工程
在项目名称上单击右键选择Option
或点击菜单 Project --> Option

点击 general options
设置 Taget

Processor Variant
core 选择 Cortex –M3
Device 选择 ST STM32F10x
Endian mode 选择 Little
Stack align 选择: 4 bytes



Image00009.jpg



点击 C/C++ Compiler
Language
选择用户编程语言
Plain‘char’is:
Signed 表明使用 char 定义的 变量为有符号的;
Unsigned 表明使用 char 定义的变量为无符号的。



Image00010.jpg



点击 Optimizations
根据使用需求选择代码 (Size)
或运行速度 (speed) 优化:
1. None ---用于调试
2. Low
3. Medium
4. High --- 用于最终代码



Image00011.jpg



点击 Preprocessor
设置 *.h 文件所在目录

$PROJ_DIR$\
$PROJ_DIR$\library\inc\

然后在 defined symbols 里面写上 VECT_TAB_RAM



Image00012.jpg



点击 Linker OutPut
选择上 Allow C-SPY specific extra output file
开启 C-SPY 调试器



Image00013.jpg



点击 Extra Output 选择上 Generate extra output file  用于产生目标和调试文件
Output format  根据需要选择生成的目标文件 默认是 选择 simple – code



Image00014.jpg



点击 Override default
选项:
1.如果在 Flash 中调试程序 设置 lnkarm_flash.xcl
2.如果在 RAM 中调试程序,设置 lnkarm_RAM.xcl

注意:在进行该项设置时,请确认电路板上的Boot0 和Boot1引脚的跳线连接是否正确



Image00015.jpg



点击 Debugger
Setup 选择调试工具,由于我用的是 ST-LINNK2 所以选择的是 Third – Party Driver
勾选Run to main



Image00016.jpg



点击 Download

1. 已选择下载程序到 Flash,  可选:Verify download     ( Use flash loader(s) 必须开启!)
2. 已选择下载程序到 RAM 或使用模拟器:无需选择
3. 如果程序已下载到 Flash:开启 Suppress download



Image00018.jpg



点击 Third – Party Driver 指定 ST-LINK2 的驱动位置

目标文件是 STM32Driver.dll



Image00017.jpg



OK! 设置好了,我们来点一下 rebuild all

呵呵!出现了错误,那是因为所有代码我们都没修改,直接 copy 原来 example 的 稍作修改一下(去掉图示的 include ) 用于我们的 LED 控制



Image00019.jpg



此工程创建完毕,我们就可以修改代码,进行编译和仿真了,hoho!

LED 跑马灯代码部分



RCC_Configuration();    // 配置系统时钟

NVIC_Configuration();    // 配置 NVIC  和 Vector Table

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
// 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
// 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能

GPIO_Configuration();    // 配置使用的 GPIO 口


while (1)
{
      亮 - 延迟 - 灭
      ………..
}


这里说明一下,因为我们豆皮上面的 8 个 LED 灯中,有一个 LED 接在了 JTAG 的引脚上(PA15)。在复位后,用于 SWJ-DP 的 5 根引脚被分配为调试器主机立即可用的专用引脚。但是呢,STM32F10xMCU 提供了 REMAP_DBGAFR 寄存器用来禁用 SWJ-DP 端口的部分或者全部,这样相关的引脚将被用于通用的 IO。对该寄存器的编程是用户软件来完成的,而不是由调试主机来完成的。那么,在库函数中提供了 GPIO_PinRemapConfig() 这么一个函数来改变指定管脚的映射。程序中就使用了这个函数来修改 JTAG 引脚用于 GPIO 口。

PS:  本教程附件中的代码 下载后是不能仿真的 因为程序跑起来后就把JTAG引脚给disable 了 如果需要仿真 那么请把这GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);     和  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);   注释掉 呵呵

完整工程代码在附件里

敬请继续关注 豆皮的的教程会逐步推出


lvhaian (2008-10-21 22:40:23)
虫子的教程写的非常的不错哦。
期待下一篇的到来。
littleworm (2008-10-21 23:14:40)
谢谢安哥鼓励 我会努力的 呵呵
bozai (2008-10-21 23:24:53)
写的好详细啊~
littleworm (2008-10-21 23:40:33)
额 bozai见笑啦  呵呵
这个是豆皮配套的教程 嗯
需要详细一点 呵呵
yjwpm (2008-10-22 12:59:48)
支持一下!!!!
jasonjee (2008-10-23 09:08:34)
写的相当详细啊,支持
elfern (2008-10-28 17:43:19)
哈哈,虫子,你将是我STM32F的启蒙老师!支持
littleworm (2008-10-28 18:02:37)
额 elfern 大哥 折我的寿啊 呵呵  
大家在坛子里 相互帮助 多多交流就是了
alongyun (2008-10-30 10:09:21)
不错  好东西啊 呵呵
lostgb (2008-11-01 22:35:50)
支持一下,非常详细
ddllxxrr (2008-11-05 09:13:39)
太好了,支持下
lanshuitianxia (2008-11-06 13:22:06)
教程挺多的啊
wunekky (2008-11-09 20:40:40)
刚在淘宝上买了板子,想下些资料看下,没积分咋办?
lvhaian (2008-11-09 21:09:52)

QUOTE:

原帖由 wunekky 于 2008-11-9 20:40 发表
刚在淘宝上买了板子,想下些资料看下,没积分咋办?
在这个帖子回个帖子
留个掏宝账户名字
http://www.stmfans.com/bbs/viewt ... page%3D1&page=3
yayongzhang (2008-11-14 17:03:37)
写的很详细,不会的人都能看懂
c51avr (2008-12-06 10:22:32)
支持 呵呵
caixingang (2008-12-09 18:59:34)
好好学习天天向上!
chenliyun (2008-12-11 11:37:38)
好好学习天天向上!
yzl624358 (2008-12-13 18:11:05)
支持楼主!
hxh824 (2008-12-14 01:32:24)
支持 呵呵