您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页STM32开发板使用说明

STM32开发板使用说明

来源:华佗小知识
STM32开发板使用说明

1、开发板使用到的软件及安装说明

在开始学习开发板之前需要安装的软件有:1、KEIL3.80A,2、PL-2303HX驱动,3、串口调试助手,4、下载器MCUISP。这些软件在课件文件下面的软件文件里。具体安装步骤如下:

1.KEIL3.80A的安装,打开路径:课件\\软件\\KEIL3.80A\\MDK3.80A安装手册,根据上面的步骤安装软件。

2.PL-2303HX驱动的安装,打开路径:课件\\软件\\PL-2303HX新版驱动,可根据使用电脑的操作系统来选择安装的软件,如选择安装XP驱动,可打开XP驱动,根据里面的安装说明来安装软件。一般只要运行PL-2303 Driver Installer。exe就可以了。

3.串口调试助手的安装,打开路径:课件\\软件\\串口调试助手,点击sscom33。exe即可,也可以创建快捷方式在桌面。

4.下载器MCUISP的安装,打开路径:课件\\软件\\下载器MCUISP,点击mcuisp。exe即可,也可以创建快捷方式在桌面。

2、开发环境介绍及使用说明

首先是我们之前安装的keil3.80a。再点击Project->New uVision Project如下图所示:

弹出create new project 对话框,新建一个文件夹TEST,然后把工程名字设为 test。 点击保存。弹出选择器件的对话框,因为我们的开发板使用的是STM32F103RBT6 ,所以在这里我们选择STMicroelectronics 下面的STM32F103RB( 如果使用的是其他系列的芯片,选择相应的型号就可以了)。 如下图所示:

点击OK,MDK会弹出一个对话框,问你是否加载启动代码到当前工程下面,这里我们

选择是。启动代码是一段和硬件相关的汇编代码。 是必不可少的!在上面点击了是以后,MDK 就把启动代码STM32F10x。s 加入到了我们的工程下面。 如下图所示:

到这里,我们就可以开始编写自己的代码了。 在此之前,我们先做2 件事: 第一件,先编译一下,看看什么情况? 点击如下图所示的1号按钮,编译后如下图红线框中所示:

上图中1 处为编译当前目标按钮,2 为全部重新编译按钮(工程大时耗时较久,建议少用)。出错和警告信息在下面的Output Windows 对话框中提示出来了。 因为工程中没有main 函数,不报错才怪。

第二件,可以看到我们存放工程的文件夹有了变化,如下图所示:

看到文件夹下面有10 个文件,STM32F10x。s 的启动代码也在该目录下,因为我们之前选择了自动加载,故该文件是由 MDK自己加进去的。 其他还有一些过程文件,总之这样看起来很乱。所以,我们在 TEST 目录下新建一个新文件夹 USER,然后把这些东西全部移到该文件夹下(当然要先关闭MDK软件)。

由于上面我们还没有任何代码在工程里面,这里我们把系统代码COPY 过来(整个SYSTEM文件夹,这个SYSTEM 文件夹可以再所提供的例程的源码里面找到,可根据路径:课件\\例程\\跑马灯\\ SYSTEM。这些代码在任何STM32F103的芯片上都是通用的,可以用于快速构建自己的工程,后面会有详细介绍)。 完了之后,TEST 文件夹下的文件如下图所示:

然后我们在USER 文件夹下面找到test。Uv2 ,打开它。 然后在Target 目录树上右键->Manage Components。如下图所示:

在进入Manage Components界面之后,弹出如下对话框:

在上面对话框的中间栏,点新建(用红圈标出)按钮( 也可以通过双击下面的空白处实现),新建USER 和SYSTEM 两个组。 然后点击Add Files 按钮,把sys.c ,usart.c ,delay.c 加入到SYSTEM组中。 此时USER 组下还是没有任何文件的。 得到如下图所示的界面:

点击OK,退出该界面返回IDE。 这时,我们在Target 树下发现多了 2 个组名,就是我们刚刚新建的2 个组。 如下图所示:

接着,我们新建一个test.c 文件,并保存在USER 目录下。 然后双击USER 组,会弹出加载文件的对话框,此时我们在USER 目录下选择test.c 文件,加入到 USER 组下。 得到如下界面:

接着我们在test.c 文件里面输入如下代码:

#include \"sys.h\" #include \"delay.h\" #include \"usart.h\" int main(void) {

u8 t=0;

Stm32_Clock_Init(9); //72M delay_init(72); // 延时 uart_init(72,9600); // 设 while(1) {

printf(\"t:%d\\n\",t); delay_ms(500); t++; } } 点击

(部分编译按钮)编译一下,会在Output Windows信息栏中发现如下报错信

息:

Test.c(1): error: #5: cannot open source input file \"sys.h\": No such file or directory 。如下图所示(图中红圈内信息):

意思是无法打开源输入文件sys.h,没这个文件或目录。双击红圈内的内容,你会发现在 test.c的01行出现了一个浅绿色的小箭头,说明错误是这个地方产生的。(这个功能很实用的哦!熟悉C++ 的人就知道 C++ 也有这个功能,快速定位错误、警告产生的地方)。双击后浅绿色箭头出现位置如下:

其实通过下面错误的说明,就是 include 的路径没有加进去的缘故,而导致了这个错误。现在我们点击

(Options for Target按钮),弹 出 Options for Target’Target 1’对话框,

选择 C/C++选项卡,如下图所示:

在Include Paths 处,点击 2 出的按钮。在弹出的对话框中加入 SYSTEM 文件夹下的3 个文件夹名字,把这几个路径都加进去(此操作即设定编译器的头文件包含路径,面会经常用到)。如下图所示:

点击OK确认,回到 IDE ,此时再点击 按钮,再编译一次,发现没错误了,得到如下界面:

至此,一个完整的STM32开发工程在 MDK下建立了。接下来我们就是进行软件仿真了。

软件仿真:在软件仿真之前,先检查一下配置是不是正确,点击 ,确定Target 选项卡内容如下所示(主要检查芯片型号和晶振频率,其他的一般默认就可以):

确认了芯片以及外部晶振频率(8.0M)之后,基本上就确定了硬件环境了,我们再看Debug 选项卡,设置为入下图所示的设置:

主要确认是Use Simulator是否选择(因为如果选择右边的Use,那就是用ULINK进行硬件Debug 了),其他的采用默认的就可以。确认了这项之后,我们便可以选择OK,退出Options for Target对话框了。

接下来,我们点击

(开始/ 停止仿真按钮),开始仿真,出现如下界面:

可以发现,多出了一个工具条,这个工具条对于我们仿真是非常有用的,下面简单介绍一下工具条相关按钮的功能,工具条部分按钮的功能如下图所示:

复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。代码重新执行。 执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能。

挂起:此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。

执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。

执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。

执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。

执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。

汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用。

观看变量/ 堆栈窗口:该按钮按下,会弹出一个显示变量的窗口,在里面可以查看各种你想要看的变量值,也是很常用的一个调试窗口。

串口打印窗口:该按钮按下,会弹出一个串口调试助手界面的窗口,用来显示从串口打印出来的内容。

内存查看窗口:该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口。

性能分析窗口:按下该按钮,会弹出一个观看各个函数执行时间和所占百分比的窗口,用来分析函数的性能是比较有用的。

逻辑分析窗口:按下该按钮会弹出一个逻辑分析窗口,通过SETUP按钮新建一些IO口,

就可以观察这些IO口的电平变化情况,以多种形式显示出来,比较直观。

其他几个按钮用的比较少,以上是比较常用的,当然也不是每次都用得着这么多,具体看你程序调试的时候有没有必要观看这些东西,来决定要不要看。

这样,我们在上面的仿真界面里面选内存查看窗口、串口打印窗口。然后调节一下这两个窗口的位置,如下图所示:

我们把光标放到test.c 的09行,然后双击鼠标左键,可以看到在09行的右边出现了一个红框,即表示设置了一个断点(也可以通过鼠标右键弹出菜单来加入,再次双击则取消)。 然后我们点击 ,执行到断点处,如下图所示:

现在来点击菜单栏的Peripherals->USARTs->USART 1 。可以看到,有很多外设可以查看,这里我们查看的是串口1 的情况。如下图所示:

单击USART1 后会在IDE 之外出现一个如下界面:

左边这个就是STM32默认时候,串口1 的状态,从中可以看到所有与串口相关的寄存器全部在这上面表示出来了,而且有当前串口的波特率等信息的显示。我们接着单击一下

,执行完串口初始化函数,得到了如上面右边图片所示的串口信息。你可以对比一下这两个的区别,就知道在uart_init(72 ,9600); 这个函数里面大概执行了哪些操作。

这样可以很清楚的告诉你,当前的串口是否可用,你的设置是否正确,同样这样的方法也可以适用于很多其他外设,这个读着慢慢体会吧!总之这个是很有用的。

然后我们继续单击信息,如下图所示:

按钮,一步步执行,最后就会看到在USART #1 中打印出相关的

这样证明我们的仿真是通过的,代码运行会在串口1 不停的输出t 的值,每0.5s 执行

一次(时间可以通过IDE 的最下面,观看到,如下图所示),并且 t 自增。与我们预期的目地是一致的。再次按下

结束仿真。

至此,我们软件仿真算是结束了,接下来我们下载代码到硬件上来真正验证一下我们的代码是否可行。

程序下载:在这我使用的是通过串口下载程序,本开发板使用的是通过USB串口下载。 下面,我们就一步步教大家如何在实验平台上利用USB 串口来下载代码。 先介绍一下我们的学习板上的各个器件,如下图所示。

CPU :STM32F103RBT6 ,LQFP,FLASH:128K ,SRAM :20K ;

◆ 1 个标准的JTAG/SWD 调试下载口 ◆ 1 个电源指示灯(蓝色)

◆ 2 个状态指示灯(DS0 :红色,DS1 :绿色)

◆ 1 个红外接收头,配备一款小巧的红外遥控器

◆ 1 个IIC 接口的 EEPROM芯片,24C02 ,容量256 字节 ◆ 1 个SPI FLASH 芯片,W25X16,容量为 2M 字节 ◆ 1 个DS18B20/DS1820 温度传感器预留接口 ◆ 1 个标准的2.4/2.8 寸LCD接口,支持触摸屏 ◆ 1 个OLED 模块接口

◆ 1 个USB 串口,可用于程序下载和代码调试 ◆ 1 个USB SLAVE接口,用于USB 通信 ◆ 1 个SD卡接口

◆ 1 个PS/2 接口,可外接鼠标、键盘 ◆ 1 组5V电源供应/ 接入口 ◆ 1 组3.3V 电源供应/ 接入口 ◆ 1 个启动模式选择配置接口

◆ 2 个2.4G 无线通信接口(24L01 和JF24C ) ◆ 1 个RTC 后备电池座,并带电池 ◆ 1 个复位按钮,可用于复位 MCU和LCD ◆ 3 个功能按钮,其中 WK_UP兼具唤醒功能 ◆ 1 个电源开关,控制整个板的电源 ◆ 独创的一键下载功能

◆ 除晶振占用的IO口外,其余所有IO口全部引出,其中GPIOA和GPIOB 按顺序引出。

根据上面的介绍,学习程序代码的下载。首先要在板子上设置一下,在板子上把RXD和PA9(STM32的TXD),TXD和PA10(STM32的RXD)通过跳线帽连接起来,这样我们就把PL2303和MCU的串口1 连接上了。把BOOT1和BOOT0都设置为0 。设置完成如下图所示:

接着我们在USB_232 处插入 USB 线,并接上电脑,如果之前没有安装PL2303的驱动(如果已经安装过了驱动,则应该能在设备管理器里面看到 USB 串口,如果不能则要先卸载之前的驱动,卸载完后重启电脑(必要步骤),再重新安装我们提供的驱动),则电脑会提示找到新硬件,如下图所示:

之前我们已经安装了PL-2303 驱动,只需插上USB 线,此时电脑就会自动给其安装驱动了。在安装完成之后,可以在电脑的设备管理器里面找到 USB 串口(如果找不到,则重启下电脑),如下图所示:

上图中我们显示的USB 串口为COM5 ,不同电脑可能不一样,你的可能是 COM4 、COM6等,但是 Prolific USB-to-Serial Comm Port ,这个一定是一样的,如果没找到,则有可能是你安装有误,或者系统不兼容。

在安装了USB 串口驱动之后,我们就可以开始串口下载程序了,这里我们的串口下载软件选择的是mcuisp,该软件启动界面如下:

然后我们选择要下载的HEX文件,以前面我们新建的工程为例,因为我们前面的工程没

有在KEIL里面设置生成.hex 文件,所以在 USER 文件夹下是找不到.hex 文件的。下面我们设置产生HEX文件:先在工程里面点击选项,如下图所示:

,打开 Output 选项卡,勾选 Create HEX File

图中选中第二个红圈内的选项,可以使编译器产生浏览信息,方便快速查看函数和变量等,这点在后面会介绍。选中之后点击OK,重新编译,编译结果如下图所示:

从上图中可以看到,编译器已经产生了hex 文件了。然后我们打开 USER 文件夹,看到里面有了一个hex文件。如下图所示:

至此,我们就可以开始下载了。

在下载之前要先打开开发板上面的电源开关。用mcuisp 软件打开 USER

文件夹,找到 TEST.hex,打开并进行相应设置后,如下图所示:

图中红圈圈中的设置,是我们建议的设置。编程后执行,这个选项在无一键下载功能的条件下是很有用的,当选中该选项之后,可以在下载完程序之后自动运行代码。否则,下载代码之后,必须先将 B0连接GND,再按复位键,才能开始运行刚刚下载的代码。ALIENTEK开发板虽然自带了一键下载功能,但是还是建议选上这个设置。

编程前重装文件,该选项也比较有用,当选中该选项之后,mcuisp 会在每次编程之前,将hex 文件重新装载一遍,这对于代码调试的时候是比较有用的。

最后,我们选择的DTR 的低电平复位,RTS 高电平进BootLoader ,这个选择项选中,mcuisp就会通过DTR 和RTS 信号来控制板载的一键下载功能电路,以实现一键下载功能。如果不选择,则无法实现一键下载功能。这个是必要的选项(在BOOT0接GND的条件下)。

在装载了hex 文件之后,我们要下载代码还需要选择串口,这里mcuisp 有智能串口搜索功能。每次打开 mcuisp 软件,软件会自动去搜索当前电脑上可用的串口,然后选中一个作为默认的串口(一般是您最后一次关闭时所选则的串口)。也可以通过点击菜单栏的搜索串口,来实现自动搜索当前可用串口。串口波特率则可以通过 bps 那里设置,对于 STM32,该波特率最大为230400bps,这里我们一般选择最高的波特率:460800,让 mcuisp 自动去同步。搜索完串口之后界面如下图所示:

从之前USB 串口的安装可知,开发板的串口被识别为COM5 了(如果那您的是被识别为其他的串口,则选择相应的串口即可),所以我们选择 COM5 。选择了相应串口之后,我们就可以通过按开始编程(P)这个按钮,一键下载代码到STM32上,下载成功后如下图所示:

图中,我们用圈圈圈出了 mcuisp 对一键下载电路的控制过程,其实就是控制 DTR和RTS 电平的变化,控制 BOOT0和RESET,从而实现自动下载。另外界面提示已经下载完成(如果老提示:开始连接…,需要检查一下,开发板的设置是否正确,是否有其他因素干扰等),并且从0X80000000处开始运行了,我们打开串口调试助手选择 COM5 ,会发现从ALIENTEK MiniSTM32开发板发回来的信息,如下图所示:

接收到的数据和我们仿真的是一样的,证明程序没有问题。这里说一个小技巧,mcuisp 没有做复位STM32的按钮,不过我们可以通过按读取器件信息来执行一次硬件复位操作,这就可以在电脑上直接控制开发板的复位了,另外还不需要浪费STM32的flash 寿命。至此,说明我们下载代码成功了,并且也从硬件上验证了我们代码的正确性。

3、例程介绍

下面简单介绍一下跑马灯的实验,本实验主要分为下面几部分: 硬件介绍,软件介绍,仿真和下载介绍。

硬件介绍:本开发板的原理图在课件的文件夹下可以找到,在本实验中需要的硬件连接已在开发板上默认连接,其连接原理图如下

软件说明:找到之前新建的 TEST 工程,在该文件夹下面新建一个 HARDWARE 的文件夹,用来存储以后与硬件相关的代码。然后在HARDWARE 文件夹下新建一个LED 文件夹,

用来存放与LED 相关的代码。如下图所示:

然后我们打开USER 文件夹下的TEST.Uv2 工程,按在

HARDWARE->LED 文件夹下面,保存为led.c 。在该文件中输入如下代码: #include #include \"led.h\" //Mini STM32 开发板 //LED 驱动代码 // 正点原子@ALIENTEK //2010/5/27 // V1.0

// 初始化PA 8 和PD2 为输出口。 并使能这两个口的时钟

//LED IO 初始化 void LED_Init(void) {

RCC->APB2ENR|=1<<2; //使能 PORTA时钟 RCC->APB2ENR|=1<<5; //使能 PORTD时钟 GPIOA->CRH&=0XFFFFFFF0;

GPIOA->CRH|=0X00000003;//PA8 推挽输出

按钮新建一个文件,然后保存

GPIOA->ODR|=1<<8; //PA8 输出高 GPIOD->CRL&=0XFFFFF0FF;

GPIOD->CRL|=0X00000300;//PD。2推挽输出 GPIOD->ODR|=1<<2; //PD。2 输出高 }

该代码里面就包含了一个函数void LED_Init(void) ,该函数的功能就是用来实现配置PA 8和PD2 为推挽输出。在配置STM32外设的时候,任何时候都要先使能该外设的时钟!APB2ENR是APB2总线上的外设时钟使能寄存器,其各位的描述如下:

我们要使能的PORTA和PORTD的时钟使能位,分别在 bit2 和bit5 ,只要将这两位置 1 就可以使能PORTA和PORTD的时钟了。该寄存器还包括了很多其他外设的时钟使能。大家在以后会慢慢使用到的。关于这个寄存器的详细说明在《STM32参考手册》的第 70 页。

在设置完时钟之后就是配置完时钟之后,LED_Init 配置了PA 8 和PD2 的模式为推挽输出,并且默认输出1 。这样就完成了对这两个 IO口的初始化。

保存led.c 代码,然后我们按同样的方法,新建一个led.h 文件,也保存在LED 文件夹下面。

在led.h 中输入如下代码: #ifndef __LED_H #define __LED_H #include \"sys.h\" //Mini STM32 开发板 //LED 驱动代码 // 正点原子@ALIENTEK //2010/5/27 //LED 端口定义

#define LED0 PAout(8)// PA8 #define LED1 PDout(2)// PD2

void LED_Init(void);//初始化 #endif

这段代码里面最关键就是2 个宏定义: #define LED0 PAout(8)// PA8 #define LED1 PDout(2)// PD2

这里使用的是位带操作来实现操作某个IO口的1 个位的,关于位带操作前面已经有介绍,这里不再多说。

以后像这样的IO口操作,我们都使用位带操作来实现。

将led.h 也保存一下。接着,我们在 Manage Components管理里面新建一个 HARDWARE 的组,并把led.c 加入到这个组里面,如下图所示:

单击OK,回到工程,然后你会发现在 Project Workspace 里面多了一个 HARDWARE 的组,

在改组下面有一个led.c 的文件。如下图所示:

然后用之前介绍的方法将led.h 头文件的路径加入到工程里面。回到主界面,在main 函数里面编写如下代码:

#include #include \"sys.h\" #include \"usart.h\" #include \"delay.h\" #include \"led.h\"

//Mini STM32 开发板范例代码 1 // 跑马灯实验 // 正点原子@ALIENTEK //2010.5.27 int main(void) {

Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化

LED_Init(); //初始化与 LED 连接的硬件接口 while(1) { LED0=0; LED1=1; delay_ms(300); LED0=1; LED1=0; delay_ms(300);

} }

代码先包含了#include \"led.h\"这句,使得 LED0、LED1、LED_Init 等能在main 函数里被调用。接下来,main 函数先配置系统时钟为72M ,然后把延时函数初始化一下。接着就是调用LED_Init 来初始化 PA 8 和PD2 为输出。最后在死循环里面实现 LED0 和LED1 交替闪烁,间隔为300ms 。

然后按

,编译工程,得到结果如下图所示:

可以看到没有错误,也没有警告。接下来,我们就先进行软件仿真,验证一下是否有错误的地方,然后下载到Mini STM32看看实际运行的结果。

仿真与下载:先按

开始仿真,接着按

,显示逻辑分析窗口,点击Setup,新建

两个信号PORTA.8 和PORTD.2 ,如下图所示:

Display Type选择bit,然后单击 Close关闭该对话框,可以看到逻辑分析窗口出来了2 个信号,如下图所示:

接着,点击

,开始运行。运行一段时间之后,按

按钮,暂停仿真回到逻辑分

析窗口,可以看到如下波形:

这里注意Gird 要调节到0.25s左右比较合适,可以通过 Zoom 里面的In 按钮来放大波形,通过Out 按钮来缩小波形,或者按 All显示全部波形。从上图中可以看到 PORTD.2 和PORTA.8交替输出,周期可以通过中间那根红线来测量。至此,我们的软件仿真已经顺利通过。

在软件仿真没有问题了之后,我们就可以把代码下载到Mini STM32观看运行结果是否与我们仿真的一致。

至此,我们的第一节学习就结束了,这一节,作为STM32的入门第一个例子,详细

介绍了STM32的IO口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。希望大家好好理解一下。

大家可根据前面介绍的使用方法和开发板的资料,试着自己改编上面的程序,实现更多的功能。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务