找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 2139|回复: 0
打印 上一主题 下一主题
收起左侧

STM32的开发环境与简单工程

[复制链接]
跳转到指定楼层
楼主
ID:470360 发表于 2019-3-1 20:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实验一、STM32的开发环境与简单工程
一、实验目的
1、熟悉STM32开发板的开发环境;
2、熟悉MDK创建和配置STM32工程项目的基本流程;
3、熟悉STM32官方库的应用;
4、规范编程格式。
二、实验内容
本次实验配置MDK集成开发环境,新建一个简单的工程文件,添加STM32官方库并配置工程,编译运行这个工程文件。下载已经编译好的文件到开发板中运行。学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。
三、预备知识
基本单片机硬件知识、单片机软件编程语言、程序创建和调试的基本方法。
四、实验设备及工具
硬件:STM32开发平台
软件:STM32官方库;PC机操作系统Windows 98、Windows 2000或Windows XP;KEIL MDK集成开发环境;串口转usb驱动。
五、实验步骤
1、在准备存放工程文件的目录下创建一新文件夹,命名为Proj_GPIO;在Proj_GPIO文件夹里面分别再创建四个文件夹:CMSIS、USER、LIB、OBJ。如图1。
其中CMSIS(Cortex Microcontroller SoftwareInterface Standard)用于存放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、配置工程属性,右键点击工程文件中的Target 1选择Options for Target ‘Target 1’打开工程选项对话框。做如下修改:
1)Output选项勾选Create HEX File,然后点击Select Folder for Objects按钮定位输出文件保存目录到工程的OBJ文件;
2)Listing选项,同样点击Select Folder for Listings定位输出文件保存目录到工程的OBJ文件;
  
3)C/C++选项,Define中填入STM32F10X_HD, USE_STDPERIPH_DRIVER系统的两个基本宏定义;配置Include Paths属性,加入工程中包含头文件的目录;如右图
4)后面Debug和Utilities两个选项如果使用J-link或者其他调试器则需要做对应的修改,否则不用。
6、根据实验任务硬件原理图编写代码实现四个按键控制led灯亮灭。
1)其中用户按键和LED原理图如下:
  
图5
2)根据原理图初始化各IO引脚,编写控制函数,然后主函数中调用。

        
/*********************************************************************
   
* 函数名称:io_init
   
* 函数功能:初始化PA0 PE2 PE3 PE4为输入口PE5 PB5为输出口
   
* 参数: 无
   
*********************************************************************/
   
void    io_init()
   
{
   
    GPIO_InitTypeDef gpin_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灯的亮灭 s1 s2控制led1;s3 s4控制led2   
   
* 参数: 无
   
* 其他:其中LED1_ON LED1_OFF LED2_ON LED2_OFF为全局宏定义
   
********************************************************/
   
void    key_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"
   
#define    LED2_ON GPIO_ResetBits(GPIOB,    GPIO_Pin_5)
   
#define    LED2_OFF    GPIO_SetBits(GPIOB,    GPIO_Pin_5)
   
#define LED1_ON GPIO_ResetBits(GPIOE, GPIO_Pin_5)
   
#define    LED1_OFF    GPIO_SetBits(GPIOE,    GPIO_Pin_5)
   
   
void    io_init();
   
void    key_led();
   
   
int main()
   
{
   
    io_init();
   
    while(1)
   
    {
   
        key_led();
   
    }
   
}
   
   
  

3)代码编写完成后编译链接,通过下载软件将hex文件下载到实验板中运行验证。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表