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


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

LED 跑马灯


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

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



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


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

Image00000.jpg
2008-10-21 15:51


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

Image00001.jpg
2008-10-21 15:51


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

Image00002.jpg
2008-10-21 15:51


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

Image00003.jpg
2008-10-21 15:51


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


下面开始忙活 IAR 了

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


Image00004.jpg
2008-10-21 15:51


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


Image00005.jpg
2008-10-21 15:51


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

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

Image00006.jpg
2008-10-21 15:51


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


Image00007.jpg
2008-10-21 15:51


然后
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
2008-10-21 15:51


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

点击 general options
设置 Taget

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


Image00009.jpg
2008-10-21 15:51


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


Image00010.jpg
2008-10-21 15:51


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


Image00011.jpg
2008-10-21 15:51


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

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

然后在 defined symbols 里面写上 VECT_TAB_RAM


Image00012.jpg
2008-10-21 15:51


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


Image00013.jpg
2008-10-21 15:51


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


Image00014.jpg
2008-10-21 15:51


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

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


Image00015.jpg
2008-10-21 15:51


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


Image00016.jpg
2008-10-21 15:51


点击 Download

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


Image00018.jpg
2008-10-21 15:51


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

目标文件是 STM32Driver.dll


Image00017.jpg
2008-10-21 15:51


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

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


Image00019.jpg
2008-10-21 15:51


此工程创建完毕,我们就可以修改代码,进行编译和仿真了,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);   注释掉 呵呵

完整工程代码在附件里

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


WORM_LED.rar (222.03 KB)

完整工程项目 工具IAR442

STM32_LED_520.rar (234.19 KB)

IAR520工程

1

评分人数

  • lvhaian

我有一個夢想 擁有一大片土地 做個小地主 每天帶著一群狗奴才去調戲良家婦女....

虫子的教程写的非常的不错哦。
期待下一篇的到来。

TOP

谢谢安哥鼓励 我会努力的 呵呵
我有一個夢想 擁有一大片土地 做個小地主 每天帶著一群狗奴才去調戲良家婦女....

TOP

写的好详细啊~

TOP

额 bozai见笑啦  呵呵
这个是豆皮配套的教程 嗯
需要详细一点 呵呵
我有一個夢想 擁有一大片土地 做個小地主 每天帶著一群狗奴才去調戲良家婦女....

TOP

支持一下!!!!

TOP

写的相当详细啊,支持

TOP

哈哈,虫子,你将是我STM32F的启蒙老师!支持

TOP

额 elfern 大哥 折我的寿啊 呵呵  
大家在坛子里 相互帮助 多多交流就是了
我有一個夢想 擁有一大片土地 做個小地主 每天帶著一群狗奴才去調戲良家婦女....

TOP

不错  好东西啊 呵呵

TOP

支持一下,非常详细

TOP

谢谢啊

太好了,支持下
http://shop35738797.taobao.com/

TOP

教程挺多的啊

TOP

回复 1# littleworm 的帖子

刚在淘宝上买了板子,想下些资料看下,没积分咋办?

TOP

原帖由 wunekky 于 2008-11-9 20:40 发表
刚在淘宝上买了板子,想下些资料看下,没积分咋办?


在这个帖子回个帖子
留个掏宝账户名字
http://www.stmfans.com/bbs/viewt ... page%3D1&page=3

TOP

写的很详细,不会的人都能看懂

TOP

支持 呵呵

TOP

好好学习天天向上!

TOP

好好学习天天向上!

TOP

支持楼主!

TOP

支持 呵呵

TOP

学习的第一个程序

学习从这个程序开始....
终于可以玩ARM了......
太高兴了...

TOP

第一天上课!

TOP

好详细有帮助

详细有帮助

TOP

D630

TOP

教程写的非常的不错!多谢!

TOP

学习了

接触stm32 不久,需要一步一步来

TOP

很好,值得学习

TOP

顶一个,的却写得比较详细,对初学者来说是再好不过的了,楼主加油!
回头看看自己走过的路才知道做一件事情是没有对错的!

TOP

delay函数如果开优化,延时是无效的,建议加上volatile关键字。

void delay()
{
  volatile int i;
  for (i=0; i<0xfffff; i++)
    ;
}

TOP

Review opelc.org on alexa.com