久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2085|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区视频在线观看 | 亚洲国产精品久久久久婷婷老年 | 欧美一区| 国产精品一码二码三码在线 | av在线一区二区三区 | 99精品电影 | 中文字幕在线观看一区 | 亚洲日本乱码在线观看 | 欧美国产精品一区二区三区 | 91麻豆产精品久久久久久夏晴子 | 久久69精品久久久久久久电影好 | 亚洲一区在线日韩在线深爱 | 国产在线拍偷自揄拍视频 | 91精品国产综合久久久久久丝袜 | 最新高清无码专区 | 一区二区精品在线 | 久久新视频 | 色视频一区二区 | 爱高潮www亚洲精品 中文字幕免费视频 | 欧美性受xxxx | 一级毛片观看 | 99视频在线免费观看 | 户外露出一区二区三区 | 1区2区视频 | 国产一区黄色 | 老司机精品福利视频 | 精品国产第一区二区三区 | 久久久精品网站 | 日韩在线一区二区三区 | 成人网在线看 | 成人在线观看中文字幕 | 色综合av| 久久久久久久久久一区 | 国产欧美日韩综合精品一区二区 | 欧美一区二区三区久久精品 | 草久在线 | 日日操操操 | 日韩成人中文字幕 | 亚洲男人天堂 | 欧美日韩亚洲三区 | 国产精品99久久免费观看 |