Keil如何进行stm32的程序开发教学内容
- 格式:doc
- 大小:501.50 KB
- 文档页数:11
在KeiluVision4MDK下配置开发STM32F103Z完整教程环境搭建:1、安装 Keil uVision4 MDK略2、安装 J-Link安装 Setup_JLinkARM_V4501.exe 驱动时,会弹出【SEGGER J-Link DLL Updater V4.501 】对话框,不要选择 Keil 直接点击OK即可,因为Keil对⽀持M3内核SW接⼝采⽤了JL2CM3.dll 这个⽂件,该⽂件的版本号是和该⽬录下Jlink驱动版本号配套的,不要擅⾃改变他们,否则不能使⽤。
建⽴⼯程:1、在桌⾯上建⽴⼀个⽂件夹【MyStm32】⽂件夹2、在【MyStm32】⽂件夹下建⽴【USER】、【FWlib】、【CMSIS】、【Output】、【Listing】⽂件夹。
【USER】:存放⽤户⾃定义的应⽤程序【FWlib】:存放库⽂件【CMSIS】:存放M3系列单⽚机通⽤的⽂件【Output】:存放编译器编译后输出的⽂件【Listing】:编译器编译过程中产⽣的⽂件3、将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 的【inc】跟【src】这两个⽂件夹拷贝到【FWlib】。
【inc】、【src】⽚上外设驱动的源⽂件和头⽂件。
4、\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下的main.c、stm32f10x_conf.h、stm32f10x_it.h、stm32f10x_it.c 、system_stm32f10x.c 拷贝到【USER】stm32f10x_conf.h:配置⽂件stm32f10x_it.h、stm32f10x_it.c:中断函数⽂件。
system_stm32f10x.c:ARM公司提供的符合CMSIS标准的库⽂件5、STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup的【arm】⽂件夹的拷贝到 MyStm32\CMSIS\startup。
Keil 如何进行 STM32 的程序开发在 STM32 的程序开发中,Keil 是开发者很常用的工具,因为它提供了完整且易于使用的开发环境和工具链,包含了 C 语言编译器、调试器和 IDE 等,可以帮助开发者完成从编写代码到编译、下载、调试等一系列操作。
本文将介绍如何使用 Keil 进行 STM32 的程序开发。
安装 Keil首先,我们需要安装 Keil 软件。
进入 Keil 的官网,点击下载并安装最新版本的Keil 软件。
在安装过程中需要注意以下几点:1.确认安装路径是否正确;2.安装时需要选择对应的开发板型号,这样可以保证后续的工程创建和调试能够正常进行;3.安装完成后,需要将对应的 STM32 库文件导入进来,这样才能在程序中调用。
创建工程安装成功后打开 Keil 软件,新建工程,选择对应 STM32 的型号和使用的编译器。
创建好工程之后,Keil 会自动生成一些默认的文件和代码,包括:startup_stm32fxxx.s、stm32fxxx.h、system_stm32fxxx.c 以及一个主函数模板。
其中,startup_stm32fxxx.s 是汇编程序文件,用于初始化芯片的栈、堆、堆栈指针等;stm32fxxx.h 是 STM32 的寄存器头文件,定义了 STM32 系列芯片中所包含的寄存器和位定义;system_stm32fxxx.c 在裸机程序中会被用于初始化芯片的时钟等设置。
主函数模板中也提供了一些标准的例程代码和编程示范。
除此之外,我们还需要在项目文件中添加外设库和相应的驱动库,以便于我们后续的开发和调试操作。
编写程序在 Keil 的工程中,我们可以利用 C 语言进行程序的编写,并通过 Keil 提供的相应的编译器进行编译操作。
在编写程序时,需要注意以下几点:1.寄存器的地址定义方式和位操作方式;2.芯片的中断向量表,在启动文件中需要正确地进行定义;3.可以使用 Keil 的固件库,在工程中添加对应的库文件即可;4.若要进行时序或者中断服务程序测试,可以使用 Keil 提供的仿真工具进行模拟;除此之外,编写程序还需要注意以下几个常用的函数库:1.CMSIS 核心函数库:主要是一些对寄存器的直接操作和位操作等的接口函数;2.Hal 库:主要是对各种外设控制的库函数,例如 IIC、SPI、UART 等的通用控制函数库;3.Standard Peripherals Library:主要是对芯片内的各种外设进行控制的函数库,例如 ADC、DAC、定时器等。
stm32教学案例初学者的STM32教学案例一、简介STM32是一款性能强大的微控制器,拥有丰富的外设和复杂的操作系统,应用广泛。
本教学案例适合初学者,分为四个部分:硬件介绍、开发环境的搭建、代码编写和实验操作。
二、硬件介绍STM32F103C8T6是一种常用的低成本微控制器,其具备72Mhz主频的Cortex-M3内核,64KB闪存和20KB SRAM,适用于大多数小型项目。
它还配备了多个内置外设,如通用定时器、高速通信口、模拟转换器等。
三、开发环境的搭建为了开发STM32,需要准备开发环境,主要包括以下步骤:1. 安装Keil环境:Keil是一种流行的IDE,可用于STM32的开发。
从Keil官网下载并安装。
2. 安装STM32CubeMX:STM32CubeMX是一个图形化的工具,用于配置STM32外设并生成启动代码。
从ST官网下载并安装。
3. 配置STM32CubeMX:启动STM32CubeMX,选择熟悉的MCU型号,然后选择外设和时钟配置。
最后生成代码并保存项目。
4. 在Keil中打开项目:打开Keil并导入STM32CubeMX生成的代码。
四、代码编写1. GPIO控制:GPIO用于控制外设,比如LED。
以下代码用于开启、关闭LED灯。
void LED_Init(void){RCC->APB2ENR |= 1 << 4; //使能PORTC时钟GPIOC->CRH &= 0xFFF0FFFF; //清零GPIOC->CRH |= 0x00030000; //设置PC13输出模式}void LED_On(void){GPIOC->BSRR = 1 << 13; //设置PC13输出高电平}void LED_Off(void){GPIOC->BRR = 1 << 13; //设置PC13输出低电平}2. 定时器中断:以下代码用于在每秒引发TIM3中断,每次中断闪烁一次LED。
Keil uVision5中建Stm32工程教程本教程中,介绍在Keil uVision5中建STM32工程的两种方法:一种是利用固件库建立工程,另一种是通过建工程时软件给的引导直接完成。
软件的安装和破解网上教程很多,这里就不赘述了,直接从建立工程开始。
首先介绍第一种:利用固件库建立STM32工程1.在你电脑中想要建立工程的地方先新建一个文件夹。
这里我在E盘下新建了一个文件夹,命名为STM32Project。
2.在新建的STM32Project文件夹下再新建一个文件夹,命名为STM32固件库,然后把事先下载的固件库放在文件夹中,方便查找进行复制。
3.打开Keil uVision5软件,在软件的菜单栏中找到Project——>New uVisionProject…,单击,找到上述新建的文件夹,对新建的工程进行命名,这里命名为test,点击保存。
4.此时软件弹出一个选择芯片的窗口:“Select Device for Target ‘Target 1’…”,在左侧的芯片库中找到你要使用的STM32系列的芯片,这里选择的是STMicroelectronics——>STM32F1 Series——>STM32F103——>STM32F103RC,单击OK。
5.此时弹出一个窗口:“Manage Run-Time Environment”,这个窗口在第二个建工程的方法中会使用到,这里先直接点击OK,跳过。
6.现在开始添加相关文件。
在STM32Project文件夹中新建以下四个文件夹:user:放置用户自己编写的相关文件CMSIS:放置与内核相关的文件startup:放置启动单片机的汇编文件driver:放置外设操作的驱动文件再向这四个文件夹中添加固件库中的相关文件:user:STM32Project\STM32固件库\STM32F10x_StdPeriph_Lib_V3.5.0 \Project\STM32F10x_StdPeriph_Template中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h一共3个文件复制粘贴到user文件夹中,同时新建一个文本文档,重命名为main.c。
首先建立一个文件夹用来装工程(文件夹名自定,笔者建立的文件名为“ggyy_Proj”文件夹)。
在“ggyy_Proj”文件夹下,建立两个文件夹“User”和“Project”。
将库文件STM32F10x_StdPeriph_Lib_V3.5.0(笔者用的这个版本的库)下的“Libraries”文件夹全部拷入“ggyy_Proj”文件夹下。
将“ggyy_Proj”文件夹下的“Project”文件夹下建立三个文件夹“List”、“Obj”和“Pro”。
其中Pro用来存放工程。
将“ggyy_Proj”文件夹下的“User”文件夹下建立两个文件夹“inc”和“src”。
然后将需要用到的文件拷贝到相应的文件夹中:将以下5个.h文件考进ggyy_Proj下User下的inc文件夹中:···ggyy_Proj\Libraries\CMSIS\CM3\CoreSupport\core_cm3.h···ggyy_Proj\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.h ···ggyy_Proj\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h固件库中:···STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\stm32f10x_co nf.h···STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\stm32f10x_it.h将以下2个.c文件考进ggyy_Proj下User下的src文件夹中:固件库中:···STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\stm32f10x_it.c ···STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\main.c现在打开keil,并点击在Project菜单栏下的New uVision Project…来新建工程。
使用keil进行stm32单片机开发的流程-回复keil作为一款嵌入式系统开发工具,广泛应用于STM32单片机的开发过程中。
它具有强大的编译、调试和仿真功能,可以帮助开发者更高效地进行单片机的开发工作。
本文将以“使用keil进行STM32单片机开发的流程”为主题,为读者详细介绍使用keil进行STM32开发的步骤和注意事项,帮助读者轻松入门STM32开发。
一、准备工作1. 软件安装:首先需要安装keil嵌入式开发环境。
你可以从官方网站上下载到keil的安装包,然后按照安装向导进行安装即可。
2. 硬件准备:除了软件准备外,还需要购买一块支持STM32开发的开发板,例如ST公司的ST-LINK开发板。
将开发板连接至电脑。
二、创建项目1. 打开keil:双击桌面上的keil图标,进入keil开发环境。
2. 创建新项目:点击“Project”->“New Project”,选择合适的存储路径和项目名称,并选择你所使用的STM32单片机型号。
单击“OK”完成新项目的创建。
三、配置开发环境1. 配置芯片参数:在左侧的“Project”窗口中,右键点击“Target 1”,选择“Options for Target”。
2. 配置目标选项:在“Debug”选项卡中,选择正确的调试接口,并将“Use Simulator”选项取消勾选。
在“Settings”选项卡中填写正确的时钟频率和连接方式,并启用Flash编程。
3. 配置编译器:在左侧的“Project”窗口中,右键点击“Target 1”,选择“Options for Target”。
在“C/C++”选项卡中,配置编译器的优化级别和其他相关参数。
四、编写代码1. 添加源文件:在“Project”窗口中右键点击“Source Group 1”,选择“Add New Item”,然后添加你的源代码文件,编写代码内容。
注意,为了方便管理,可以按功能将代码分割成多个源代码文件。
使用Keil MDK以及标准外设库创建STM32工程1.1 使用Keil MDK以及标准外设库创建STM32工程通过上一节对标准外设库的介绍,想必各位读者对标准外设库已经有了基本的认识,然而由于标准外设库中文件众多,很多初学者在开始很长一段时间内甚至都无法完全自己建立一个工程,很多人只是依赖标准外设库或给定的工程模板。
本节就介绍怎样利用Keil MDK 开发环境和标准外设库来搭建自己的工程。
建立一个基于标准外设库其实并不复杂,网络上也有很多关于怎样在Keil MDK下建立工程的教程,方法也各异,本节所介绍的方法本着少改动、便于使用、方便更换器件等原则,给大家介绍怎样在Keil中创建一个工程,并以一个最简单的例子来说明怎样下载和调试程序。
1.1.1 开发工具与开发环境1. 软件版本本节所使用Keil MDK 为目前的最新版V4.21,具体版本信息如图5-6所示。
其他版本差别不大,读者可以根据自己使用的版本进行操作或者从Keil的官网下载新版本。
使用的标准外设库为目前最新的V3.5版本。
使用的开发调试工具为JLINK-V8,使用的驱动版本为V4.08l。
图5-6 MDK详细版本信息2. 建立工程目录首先先建立一个用于存放工程的文件夹,此处命名为STM32,在文件夹下分别建立LIB、USER、MDK三个文件夹,分别用于存放标准外设库文件、用户程序文件、工程目录。
在MDK 文件夹下建立List、Obj两个文件夹,分别用于存放在编译过程中产生的临时文件和输出文件。
接下来拷贝标准外设库和相应的文件到工程目录中,首先拷贝STM32F10x_StdPeriph_Li b_V3.5.0\Libraries文件夹下的两个文件夹CMSIS和STM32F10x_StdPeriph_Driver到刚刚新建的STM32\LIB目录下,接下来拷贝用户编写程序的程序文件,此文件可以从标准外设库自带的例程中拷贝,这里从STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Exam ples\ADC\3ADCs_DMA目录下拷贝main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it. h四个文件,这四个文件是在编程的时候用户往往需要根据实际需求进行修改的。
stm32课程教学大纲一、课程介绍1.课程名称:STM32课程2.课程简介:本课程主要介绍STM32系列微控制器的相关知识,包括STM32的基本原理、应用及开发方法。
3.课程目标:通过学习本课程,学员将能够掌握STM32系列微控制器的基本使用方法,并能够进行相关应用开发。
二、前期准备1.课程前提:学员需要具备一定的微控制器基础知识,包括C语言编程、电子电路基础等。
2.学习资源:学员需要准备一台个人电脑,安装相关开发环境及软件。
三、课程内容1. STM32基础知识a. STM32概述:介绍STM32系列微控制器的特点及应用领域。
b. STM32系列介绍:分别介绍常用的STM32系列微控制器,如STM32F1、STM32F4等。
c. STM32开发环境搭建:介绍如何搭建STM32开发环境,包括Keil、IAR等集成开发环境的安装及使用。
2. STM32程序设计a. STM32编程基础:介绍STM32的基本编程知识,包括寄存器操作、中断处理等。
b. STM32程序设计实例:通过实际案例,讲解如何使用STM32进行程序设计,包括IO口操作、定时器、串口通信等。
3. STM32外设应用a. STM32外设概述:介绍STM32系列微控制器的常用外设,如GPIO、ADC、DAC、PWM等。
b.外设应用实例:通过实例演示,讲解如何使用STM32的外设进行应用开发,包括LED控制、模拟信号采集、信号发生等。
4. STM32通信接口a. STM32通信接口介绍:介绍STM32的常用通信接口,包括I2C、SPI、USART等。
b.通信接口应用实例:通过示例演示,讲解如何使用STM32的通信接口进行外设通信、设备互联等。
5. STM32应用开发a. STM32应用开发流程:介绍STM32应用开发的流程与方法。
b.应用开发案例:通过实际案例演示,讲解如何使用STM32进行应用开发,包括嵌入式系统、物联网、智能家居等。
6. STM32调试与优化a. STM32调试工具介绍:介绍常用的STM32调试工具,包括JTAG、SWD等。
最简单的STM32入门教程展开全文本文讲述的是如何从零开始,使用keil建立一个简单的STM32的工程,并闪烁LED灯,给小白看。
第零步,当然首先你得有一个STM32的板子,其IO口上接了一个LED。
第一步,建立一个文件夹0.0第二步,打开keil,建立工程在弹出来的对话框中选择你所用的STM32的芯片。
在接下来弹出来的对话框中选择是,这样keil就帮我们建立好了启动文件。
第三步,新建一个main.c文件,并添加到工程中。
点击New按钮,建立一个文本文件。
在建立的文本文件中输入C中的main函数点击保存保存后,将文件添加到工程中第四步,点击编译可以看到keil有报错错误信息为:没有定义的符号SystemInit ,这是因为在启动文件中有调用SystemInit 函数,但是我们没有定义它,如下图:暂时不用理会上述启动文件中汇编的含义,只需在main.c 中添加该函数即可消除该错误。
修改后再编译,程序没有报错了。
至此,一个STM32的工程就建立完成了。
第五步,将下面的代码复制粘贴1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #define PERIPH_BASE ((unsigned int)0x40000000) #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) #define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) #define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) #define GPIOE_BASE (APB2PERIPH_BASE + 0x1800) #define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) #define GPIOG_BASE (APB2PERIPH_BASE + 0x2000) #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define LED0 MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8))//#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8 typedef struct{volatile unsigned int CR;volatile unsigned int CFGR;volatile unsigned int CIR;volatile unsigned int APB2RSTR;volatile unsigned int APB1RSTR;volatile unsigned int AHBENR;volatile unsigned int APB2ENR;volatile unsigned int APB1ENR;volatile unsigned int BDCR;volatile unsigned int CSR;} RCC_TypeDef;#define RCC ((RCC_TypeDef *)0x40021000)typedef struct{volatile unsigned int CRL;volatile unsigned int CRH;volatile unsigned int IDR;volatile unsigned int ODR;volatile unsigned int BSRR;volatile unsigned int BRR;volatile unsigned int LCKR;} GPIO_TypeDef;#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)void LEDInit(void){RCC->APB2ENR|=1<<2; //GPIOA 时钟开启GPIOA->CRH&=0XFFFFFFF0;GPIOA->CRH|=0X00000003;}//粗略延时void Delay_ms(volatile unsigned int t){unsigned int i,n;for(n=0;n<t;n++)for(i=0;i<800;i++);}int main(void){LEDInit();636465666768697071727374757677787980818283 while(1){LED0=0;Delay_ms(500);LED0=1;Delay_ms(500); }}void SystemInit(void){}下面一段是对代码的简单讲解,可不用太深入。
使用Keil进行stm32的程序开发本章的上一节向读者介绍了Keil MDK的安装流程与在Keil MDK的μVision4集成开发环境下进行stm32工程的建立方法。
本节我们就来看看如何使用Keil MDK开发工具进行stm32应用程序的开发。
在此之前有必要向大家介绍几个名词,Keil、MDK、μVision4、RealView、RVCT、JLINK还有RVDS,这些名词分别表示什么,有什么从属关系呢?相信很多读者并没有明确的概念,现在简单的说明一下:Keil:这个大家应该最为熟悉,Keil其实是一家公司的名字,而这家Keil公司由两家私人公司联合运营,分别是德国慕尼黑的Keil Elektronik GmbH和美国德克萨斯的Keil Software组成。
大家很熟悉的keil C51就是从Keil Software手中诞生的。
但是在2005年,Keil公司被ARM公司收购。
值得一提的是,Keil公司只有区区20多名员工,却仍然做出了伟大的作品。
MDK:MDK全称Microcontroller Develop Kit,意为微控制器开发套件。
ARM收购Keil公司的意图在于进军微控制器(也就是我们常说的单片机)领域,MDK就是这种意图下的产物。
但我们一般仍称之为Keil MDK而不是ARM MDK,Keil MDK作为一个套件,包含了一系列软件模块。
包括Keil公司的IDE 环境”μVision”,ARM公司的编译器RVCT,Flash烧写软件模块等。
μVision4:μVision4是Keil公司的IDE环境”μVision”的第四个版本,从根本上来说μVision4是一个开发环境,并不必须包含编译器、仿真、烧写等模块。
比如AVR单片机的一个开发环境WinAVR(又称GCCAVR)就不包含仿真调试器,也不包含烧写模块。
值得一提的是,家喻户晓的Keil C51正是基于μVision2开发环境,所以μVision4的界面和μVision2非常的相似,很有利于广大习惯于μVision2开发环境的开发人员转向使用μVision4进行stm32的开发。
RealView:是ARM公司编译工具的名称。
其首字母就是下文提到的RVCT中的’R’。
RVCT:全称为RealView Compilation Tools,意为RealView编译工具。
是ARM公司针对自身ARM系列CPU 开发的编译工具,其主要由:●ARM/Thumb汇编器armasm●连接器armlink●格式转换工具fromelf●库管理器armar●C和C++应用程序库●工程管理组成,这些模块都被嵌入到了集成Keilμ Vision4开发环境里(但绝不仅是Keil μVision4)。
值得一提的是,ARM公司作为ARM处理器的设计者,其编译工具RVCT的性能与表现是无与伦比的,没有任何一套编译工具能取代其成为首选。
RVDS:全称为RealView Developer Suite,意为RealView开发套件。
是ARM公司为方便用户在ARM芯片上进行应用软件开发而推出的一整套集成开发工具。
该套工具包括软件开发套件和硬件仿真工具,是软硬件结合的套件。
RVDS的价格十分的高昂,但功能也十分的强大,基本不会在普通企业和个人用户手中出现。
J-Link:J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。
配合IAR EWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/Cortex内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。
笔者使用的就是J-Link仿真器,并且推荐各位读者使用J-Link仿真器进行stm32工程的开发。
OK,名词解释完毕,相信各位读者看完之后,以后不会再秉持“我使用Keil编译器……”或者“我正在下载RVDS……”这种看似内行本质外行的言论了^_^。
本书选用Keil μVision4作为本书中工程实例的开发环境,原因在于其软件操作方式简单,功能齐全,有Keil C51开发经历的读者朋友可以很快上手。
而且作为ARM公司旗下根正苗红的IDE,相信ARM公司是不会让自家孩子在外边献丑的。
一般情况下,我们会使用IDE做以下事情:1、编写程序代码。
2、编译程序。
3、烧写程序。
4、调试程序,包括查看变量、内存、寄存器,时间跟踪分析、甚至可以调用虚拟打印窗和虚拟逻辑分析仪用以显示程序输出。
5、输出需要的文件如Hex、Bin、Lib等……我们就遵循以上几条思路,来看看我们的Keil μVision4如何实现这些功能。
首先请读者准备好一块至少拥有一个最小系统的stm32硬件环境,J-Link仿真器,然后依照上一节的办法建立一个stm32的工程,建立完毕后请将如下代码作为main.c文件的内容:———————————————————————————————————————#include "stm32f10x_lib.h"u32 Stm32IdHigh = 0;u32 Stm32IdMed = 0;u32 Stm32IdLow = 0;void RccInitialisation(void);int main(void){RccInitialisation();Stm32IdLow = *((u32*)0x1FFFF7E8);Stm32IdMed = *((u32*)0x1FFFF7EC);Stm32IdHigh = *((u32*)0x1FFFF7F0);while(1);}void RccInitialisation(void){ErrorStatus HSEStartUpStatus;RCC_DeInit();RCC_HSEConfig(RCC_HSE_ON);HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS){RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK2Config(RCC_HCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);FLASH_SetLatency(FLASH_Latency_2);FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);RCC_PLLCmd(ENABLE);while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);while(RCC_GetSYSCLKSource() != 0x08);}}———————————————————————————————————————键入如上代码完成后按下ctrl + S进行保存。
然后我们来看看在开始代码编译调试之前需要进行哪些设置工作。
1、右键点击project区工程组中的顶部”MyFirstJob “,在弹出的右键菜单中选择”Option for Target ‘MyFirstJob’……”项,弹出设置窗口,如下图所示:在弹出的设置窗口Option for Target ‘MyFirstJob’中,请读者执行如下操作:(1)切换到Debug标签,选择Use:Cortex M/R J-LINK/J-Trace,勾选Load Application at Startup,Run to main()等,如下图所示:(2)切换到Utilities标签,选择Use Target Driver For Flash Programming,并选择Cortex M/RJ-LINK/J-Trace,点击Settings,在弹出的窗口中点击Add按钮,根据读者自身的stm32型号做出如下选择:●如果使用的是stm32f103x4或stm32f103x6系列,则请选择STM32F10X Low-density Flash;●如果使用的是stm32f103x8或stm32f103xb系列,则请选择STM32F10X Med-density Flash;●如果使用的是stm32f103xc、stm32f103xd或stm32f103xe系列,则请选择STM32F10X High-density Flash;这里的High、Med、Low分别对应了stm32中各种型号中的大、中、小容量Flash型号。
笔者使用的是stm32f103rbt6,所以应该选择STM32F10XMed-density Flash。
如下图所示:选定后依次点击Add——OK,完成Option for Target ‘MyFirstJob’的设置。
2、按下F7进行编译,无错误和警告提示。
3、在连接好硬件之后(包括J-link驱动的安装)按下ctrl + F5进入实时仿真状态,还需提及的是,ctrl + F5操作不仅仅表示进入了仿真调试状态,而且还把程序真正的烧写进了STM32的FLASH空间里。
4、可以看到进入仿真状态的Keil μVision4在界面上多了不少变化:λ * 多出调试工具栏:其中上面分别有Reset(复位)、Run(全速运行)、Step(单步进入函数内部)、Step Over(单步越过函数)、Step Out(单步跳出函数)等图标;λ * 多出一个汇编跟踪窗口;λ * 多出一个命令提示窗口;如下图所示:当然这些窗口可以根据需要随时关闭或开启。
5、很值得说一下Reset(复位)、Run(全速运行)、Step(单步进入函数内部)、Step Over(单步越过函数)、Step Out(单步跳出函数)这几个按钮的作用:Reset:复位按钮,其作用是让程序回到程序的起始处开始执行,注意这相当于一次软复位,而不是硬件复位;Run:全速运行按钮,其作用是使程序全速运行;Step:单步进入函数内部按钮,如果当前语句是一个函数调用(任何形式的调用),则按下此按钮进入该函数,但只运行一句C代码;Step Over:单步越过,无论当前是任何功能的语句,按下此按钮后都会执行至下一条语句;Step Out:单步跳出函数,如果当前处于某函数内部,则按下此按钮则运行至该函数退出后的第一条语句;此外经常用到的还有两个按钮:“Start/Stop Debug Session”、“Insert/Remove Breakpoint”,分别是“开启/关闭调试模式”和“插入/解除断点”,分别对应快捷键Ctrl + F5和F9。