基于STMF嵌入式实验指导书.docx
《基于STMF嵌入式实验指导书.docx》由会员分享,可在线阅读,更多相关《基于STMF嵌入式实验指导书.docx(25页珍藏版)》请在冰豆网上搜索。
实验一、STM32的开发环境与简单工程
一、实验目的
1、熟悉STM32开发板的开发环境;
2、熟悉MDK创建和配置STM32工程项目的基本流程;
3、熟悉STM32官方库的应用;
4、规范编程格式。
二、实验内容
本次实验配置MDK集成开发环境,新建一个简单的工程文件,添加STM32官方库并配置工程,编译运行这个工程文件。
下载已经编译好的文件到开发板中运行。
学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。
三、预备知识
基本单片机硬件知识、单片机软件编程语言、程序创建和调试的基本方法。
四、实验设备及工具
硬件:
STM32开发平台
软件:
STM32官方库;PC机操作系统Windows98、Windows2000或WindowsXP;KEILMDK集成开发环境;串口转usb驱动。
五、实验步骤
1、在准备存放工程文件的目录下创建一新文件夹,命名为Proj_GPIO;在Proj_GPIO文件夹里面分别再创建四个文件夹:
CMSIS、USER、LIB、OBJ。
如图1。
其中CMSIS(CortexMicrocontrollerSoftwareInterfaceStandard)用于存放Cortex-M处理器系列的与供应商无关的软件抽象层和启动相关的代码文件;
USER用于存放我们自己编写的代码文件(含自己移植的底层驱动),还有MDK工程;
LIB存放所有的官方底层驱动库文件;
OBJ用于工程输出的过程文件和最终的二进制文件。
图1
2、将官方库STM32F10x_StdPeriph_Lib_V3.5.0.rar解压。
1)把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport下的所有文件和STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下的所有文件都到第一步所创建的CMSIS文件夹中;
2)把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver目录下的文件(目录inc和scr)复制到第一步创建的LIB文件夹中;
3)把STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h三个文件复制到USER文件夹中。
3、打开MDK软件,新建一个工程Proj_GPIO保存到Proj_GPIO/USER中。
CPU选择STM32F103ZE,如图2;
图2
4、新建一个空文档main.c保存到USER中,然后根据绝对路径将文件对应添加到工程中,如右图。
5、配置工程属性,右键点击工程文件中的Target1选择OptionsforTarget‘Target1’打开工程选项对话框。
做如下修改:
1)Output选项勾选CreateHEXFile,然后点击SelectFolderforObjects按钮定位输出文件保存目录到工程的OBJ文件;
2)Listing选项,同样点击SelectFolderforListings定位输出文件保存目录到工程的OBJ文件;
3)C/C++选项,Define中填入STM32F10X_HD,USE_STDPERIPH_DRIVER系统的两个基本宏定义;配置IncludePaths属性,加入工程中包含头文件的目录;如右图
4)后面Debug和Utilities两个选项如果使用J-link或者其他调试器则需要做对应的修改,否则不用。
6、根据实验任务硬件原理图编写代码实现四个按键控制led灯亮灭。
1)其中用户按键和LED原理图如下:
图5
2)根据原理图初始化各IO引脚,编写控制函数,然后主函数中调用。
/*********************************************************************
*函数名称:
io_init
*函数功能:
初始化PA0PE2PE3PE4为输入口PE5PB5为输出口
*参数:
无
*********************************************************************/
voidio_init()
{
GPIO_InitTypeDefgpin_init_struct;
//使能每个IO口的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
gpin_init_struct.GPIO_Pin=GPIO_Pin_0; //PA0引脚
gpin_init_struct.GPIO_Speed=GPIO_Speed_2MHz; //IO速度为2MHz
gpin_init_struct.GPIO_Mode=GPIO_Mode_IPD; //下拉模式
GPIO_Init(GPIOA,&gpin_init_struct); //A口按键
gpin_init_struct.GPIO_Pin=GPIO_Pin_5;
gpin_init_struct.GPIO_Speed=GPIO_Speed_2MHz;
gpin_init_struct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,&gpin_init_struct); //B口led1
GPIO_Init(GPIOE,&gpin_init_struct); //E口led2
gpin_init_struct.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
gpin_init_struct.GPIO_Speed=GPIO_Speed_2MHz;
gpin_init_struct.GPIO_Mode=GPIO_Mode_IPU; //上拉模式
GPIO_Init(GPIOE,&gpin_init_struct); //E口按键
}
、
/*****************************************************
*函数名称:
key_led
*函数功能:
根据按键情况控制led灯的亮灭s1s2控制led1;s3s4控制led2
*参数:
无
*其他:
其中LED1_ONLED1_OFFLED2_ONLED2_OFF为全局宏定义
********************************************************/
voidkey_led()
{
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0) LED1_ON;
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0) LED1_OFF;
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0) LED2_ON;
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1) LED2_OFF;
}
#include"stm32f10x.h"
#defineLED2_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5)
#defineLED2_OFF GPIO_SetBits(GPIOB,GPIO_Pin_5)
#defineLED1_ON GPIO_ResetBits(GPIOE,GPIO_Pin_5)
#defineLED1_OFF GPIO_SetBits(GPIOE,GPIO_Pin_5)
voidio_init();
voidkey_led();
intmain()
{
io_init();
while
(1)
{
key_led();
}
}
3)代码编写完成后编译链接,通过下载软件将hex文件下载到实验板中运行验证。
实验二、ucos操作系统的移植
一、实验目的
1、掌握ucos到STM32的移植方法;
2、熟悉通过C语音处理底层寄存器的技巧;
3、了解STM32在ucos任务切换时的处理;
4、规范编程格式。
二、实验内容
本次实验通过用C语言编写6个操作系统相关函数和用汇编语言编写4个与处理器相关的函数,将实时操作系统µC/OS-Ⅱ移植到芯片STM32F103ZE中,并创建两个用户任务点亮led。
学会操作系统的移植方法,深入掌握嵌入式操作系统µC/OS-Ⅱ在初始化任务和任务调度的实现方法,直观了解实时操作系统的体系结构和设计思想。
三、预备知识
基本单片机硬件知识、单片机软件编程语言、程序创建和调试的基本方法、ucos操作系统的任务调度原理、STM32的寄存器架构。
四、实验设备及工具
硬件:
STM32开发平台
软件:
STM32官方库;PC机操作系统Windows98、Windows2000或WindowsXP;KEILMDK集成开发环境;串口转usb驱动。
五、实验步骤
1、按实验一的步骤新建一个工程Proj2_ucos。
2、将移植好的ucos源代码整个拷贝到我们的新建的工程目录中,然后按对应的文件路径添加到keil工程里(os_dbg.c和os_dbg_r.c只添加一个),如图6和图7。
图6图7
3、配置工程相关属性(与实验一库应用配置一样),记得将ucos的头文件路径添加到工程的includepath上面去,找到stm2f10x_it.c的PendSV_Handler函数注释掉,main文件中将includes.h包含进来,主函数为空,编译通过。
4、在main.c中建立sys_init()函数编写操作系统运行需要的硬件相关初始化(见代码),然后修改stm32f10x_it.c中的系统心跳中断函数并加入头文件includes.h(见代码,)。
/*********************************************************************
*函数名称:
sys_init
*函数功能:
嵌套向量中断优先级分组,时钟心跳定时初始化1/200s
*参数:
无
*********************************************************************/
voidsys_init()
{
NVIC_Priori