1、 1 STM32 开发入门教程 (一 ) 开发环境建立及其应用 入门准备 : 我们常用的 STM32 开发编译环境为 Keil 公司的 MDK (Microcontroller Development Kit) 和 IAR 公司的 EWARM. 在这里我们提供了比较稳定的新版本编译软件下载 : MDK4.10 限于篇幅 , 在我们的教程里面将先以 MDK 下的一个例子来介绍如何使用 MDK 进行嵌入式应用开发 . MDK 安装与配置 : 基于 MDK 下的开发中基本的过程 : (1) 创建工程 ; (2) 配置工程 ; (3) 用 C/C+ 或者 汇编语言编写源文件 ; (4) 编译目标应用程
2、序 (5) 修改源程序中的错误 (6) 测试链接应用程序 - (1) 创建一个工程 : 在 uVision 3 主界面中选择 “Project“ - “New uVision Project“ 菜单项 , 打开一个标准对话框选择好你电脑中的保存目录后 , 输入一个你的工程名字后点确认 .我们的工程中建了一个名字 叫 “NewProject“ 的工程 . 从设备库中选择目标芯片 , 我们的 MINI-STM32 开发板使用的是 STM32F103V8T6, 因此选中 STMicrocontroller 下对应的芯片 : ARM 32-bit Cortex-M3 Microcontroller,
3、72MHz, 64kB Flash, 20kB SRAM, PLL, Embedded Internal RC 8MHz and 32kHz, Real-Time Clock, Nested Interrupt Controller, Power Saving Modes, JTAG and SWD, 3 Synch. 16-bit Timers with Input Capture, Output Compare and PWM, 16-bit 6-ch Advanced Timer, 2 16-bit Watchdog Timers, SysTick Timer, 2 SPI, 2 I2C
4、, 3 USART, USB 2.0 Full Speed Interface, CAN 2.0B Active, 2 12-bit 16-ch A/D Converter, Fast I/O Ports 2 3 选择完芯片型号后会提示是否在目标工程中加入 CPU 的相关的启动 代码 , 如下图所示 . 启动代码是用来初始化目标设备的配置 , 完成运行的系统初始化工作 , 因此我们选择 “是“ , 这会使系统的启动代码编写工作量大大减少 . - (2) 配置工程 : 选择菜单中 “Project“ - “Option for Target“ 或者 选择快捷菜单中的图标 : 因为 MINI-ST
5、M32 开发板上使用的就是 8M 的晶振且是使用的片内的 RAM 和 ROM 因此 “taget“ 下我们都可以使用默认的配置 ; 在 “Output“菜单下我们需要选中 “Creat Hex File“ 来生成编译好的工程代码 , 此工程可以通过 仿真器 或者串口 ISP 烧录进开发板中 . 注 : ISP 烧录过程我们将在入门教程二中给大家介绍 . “Listing“ “User“ 菜单中我们保持默认即可 . “C/C+“ 菜单为我们常用的菜单 , 这里简单的介绍下他们的具体功能 : PreProcesser Symbols 中的 Define, Undefine 菜单表示是工程的宏定义中
6、的变量 , 我们将在今后的教程中详细介绍这个功能 . 4 Optimization 为优化选项 , Level0 为不优化 , 这种模式最适合调试 , 因为不会优化掉代码 , 基本每个用到的变量都可以打断点 . Level3 为优化等级最高 , 最适合生产过程中下载到芯片中的代码 . Include Path 为工程中的包含路径 , 一般需将 .h 文件或者库文件的 地址 配置进去 . “Asm“ 和 “Link“ 将在今后的高级教程中介绍 . “Debug“ 为我们调试使用的配置选项 , “Use Simulator“ 为使用软件仿真 . 这里根据大家手里的仿真器来选择配置环境 . 如果你使
7、用的是 Ulink, 那么就选择 “Ulink Cotex Debug“, 如果你选择的是 JLINK, 那么就选择 “ Cotex M3 Jlink“, 如果你使用的是 ST 公司出的简易仿真器 ST-Link , 那么你就选择 “ST-Link Debug“. 注意 : 右边当中的选项 “Run to main“ 选项如果勾上就表示仿真时进入了就会进入到 main 函数 , 如果没有选上就会进入初始地址 , 你需要自己打断点运行到你的主程序 main 处 . 5 当插上仿真器后选择上面右图中的 Setting 后会跳出一个仿真器的配置菜单 . 左边会 自动识别出你的仿真器的 信息 . 如下
8、图为 ULINK2 的信息 : 6 对于 SWJ 选项为三线制调试 , 将在后面的高级教程中介绍 . 右下方有两个选项 : “Verify Code Download“ : 表示下载后校验数据 “Download to flash“: 表示当仿真的时候先将目标代码下载到 Flash 中 . Trace 菜单为跟踪配置 , 可以实时的将一些变量使用曲线的形式实时表示出来 , 我们将在今后的高级教程中介绍这一项功能 . 注意 : 市面上目前的盗版 Ulink2 不支持这项功能 , 正版的支持 , Jlink 也不支持这项功能 . “Flash Download“ 菜单用来配 置使用仿真器程序下载的
9、配置选项 , 大家务必选择好和你芯片配套的选项 . 如果你是使用的别人模板下修改为你的工程 , 这个选项请注意一下 , 如果不正确将不能将你的代码下载到芯片中 . 配置好 “Debug“ 后 , 那么 “Utilities“ 可以不用配置 . 如果你使用的是仿真器仿真 , 在你已经正确得将目标板和仿真器建立了物理连接后 , 请选择正确的仿真器进行配置 . 7 (二 ) ISP 在线下载程序 ISP: in system programming 简介 : ISP: 用写入器将 code 烧入 ,不过 ,芯 片可以在目标板上 ,不用取出来 ,在设计目标板的时候就将接口设计在上面 ,所以叫 “在系统
10、编程 “,即不用脱离系统 ; 应用场合 : 1,ISP 程序升级需要到现场解决 ,不过好一点的是不必拆机器了 ; ISP 的实现一般需要很少的外部电路辅助实现,通常可利用单片机的串行口接到计算机的 RS232 口,通过专门设计的固件程序来编程内部存储器。 主要是指代芯片的烧写方式,以往写片子需要把片子拿下来,离开电路,用 编程器烧,换句话说,芯片不能不脱离应用系统进行写入。 ISP 主要针对这个问题,使用 JTAG 或者串行口( MCU 内部有 Boot Loader,通过指定的方式激活之,它可以和 PC 或其它上位机通过串口联系,不用使单片机离开应用系统而更新内部的程序 /设置)进行程序的烧
11、写操作。 因此,具有 ISP 功能的 MCU 可以不使用编程器进行编程。当然,实现 ISP 可能需要一些硬件电路支持,具体的在数据手册中有说明。 一般具备 ISP 功能后,就不要编程器了,而是使用下载线进行编程工作。但是不是说他们就一定不支持编程器了,具体型号具体分析。是否需要 仿真器 进行仿真和是否具备 ISP和 IAP没有必然 的联系。只不过具备了 IAP功能,可以在 MCU 内写入监控程序,模拟一个仿真器,当然,这个监控程序是要消耗资源的,和使用硬件的仿真器还有一定的差异。 - 以上就是 ISP 的一些概念上的描述 , 现在通俗点说就是怎么利用工具把程序下载到芯片当中去 . 第一步 :
12、配置工程 , 输出编译后的代码 .Hex 文件 : 我们打开第一个我们的 教程 例子 , GPIO_Test 这个例子工程 . 先按照下面的步骤来配置一下工程 : 8 点击下图中的 Option 选项 ; 选中 “Output“ 菜单下的 “Create HEX File “, 并且在右边的 “Name of Executable“ 中填写我们生成编译代码的文件名称 . 配置完选项后 , 点击工程编译 按钮 , 然后我们就可以在 Example2-GPIOGPIO_testoutput 目录下面得到 Gpio_Test.Hex 文件了 . 9 第二步 : 准备串口物理连接和 设置 Boot 跳
13、线选择芯片启动类型 先需要准备一根串口延长线 , 一头为公头 ,一头为母头的串口连接线 (非交叉线 ), 和一台有串口的电脑 . (注意 :如果您的电脑没有串口 ,请购买 “USB 转 RS232“ 的硬件设备来扩充你电脑的串口 .) 将 Mini-STM32 的 J1 跳线帽跳至 2,3 两脚上选择芯片从内部的 Boot 区启动 , 上电后会先进 入 ISP 状态 . 连接串口线至你的电脑上的串口 将 USB 延长线连接至你的电脑上给 Mini-STM32 开发板供上 5V 电源 . 当开发板上的电源指示灯点亮后一切准备就绪 . 第三步 : 配置 ISP 下载软件 mcuisp.exe: 您
14、可以点击下载稳定版的 mcuisp V0.975 版本的软件 : mcuisp.rar (576.58 KB) 打开 mcuisp.exe 绿色软件 , 选择好您连接至开发板使用的电脑上的串口 , 可以通过搜索串口菜单来 自动 搜 索出你电脑上的串口 信息 . 在左上方的 “程序文件 “选择你准备烧入芯片中的代码 , 就是前面我们生成的Gpio_Test.Hex. 然后在菜单选项栏上选择 “STMISP“ 菜单 , 点击 “读 STM32 器件信息 “ 命令按钮 . 我们会在右边的信息框中显示出连接成功的信息 : 如图所示 : 10 选择上 “校验 “和 “编程后运行 “两个选项后点击 “开始
15、编程 “. 会报出程序成功烧入芯片的一些信息 , 如下 : - DTR 电平置高 (+3-+12V),复位 RTS 置高 (+3-+12V),选择进入 BootLoader .延时 100 毫秒 DTR 电平变低 (-3-12V)释放复位 RTS 维持高 开始连接 .3, 接收到 :1F 在串口 COM4 连接成功 115200bps,耗时 343毫秒 芯片内 BootLoader 版本号: 2.1 芯片 PID: 00000410 芯片 FLASH 容量为 128KB 芯片 SRAM 容量为 65535KB(此信息仅供参考 ,新版本芯片已不包含此信息 ) 96 位的芯片唯一序列号: 33006C065839353235581943 读出的选项字节 : A55AFF00FF00FF00FF00FF00FF00FF00 全片擦除成功 第 547毫秒,已准备好 共写入 2KB,进度 100%,耗时 4343 毫秒 成功从 08000000 开始运行 向您报告,命令执行完毕,一切正常 - 这个时候您可以看到您手中的 Mini-STM32 开发板上的两个红色 LED 有规律的轮流点亮 , 说明程序已经成功的烧入芯片了 .