STM32 学习1 Keil及Vscode协同开发环境搭建

一、ARM简介

1. arm 系列简介

ARM(Advanced RISC Machines),设计了大量高性能、廉价、耗能低的RISC处理器,占有手机处理器90%以上市场。
  • 功能耗低
  • 功能强
  • 32位
  • 合作伙伴多
  • 产品线丰富
ARM性能比较:
ARM11以后,命名改为Cortext系列。

2.Cortex架构:

  • Cortex-A:高性能应用处理器,如Symbian、Linux、WinCE、WindowsMobile。
  • Cortex-R:专门针对实时、深度嵌入式解决方案,如高档轿车、军事国防应用。
  • Cortex-M:专注于低成本嵌入式微控制器,相对低端。
  • Cortex-M0:针对FPGA
  • Cortex-M1:替代低成本MCU
  • Cortex-M3:占领高性能MCU市场
  • Cortex-M4:主要针对数字信号处理

3.Cortex-M3:

  • 高性能:哈佛结构+分支预算
  • 高集成度:
  • 高代码密度:Thumb2指令集
  • 内嵌NVIC中断
  • 低成本。
Cortex-M3的产品:
  • STM32系列:意法半导体
  • Stellatirs系列:
  • LPC1000系列:
  • AT91SAM3系列:Atmel

4.STM32:

  1. STM32F103增加型系列:32位
  2. STM32F101基本型系列:32位

5.STM32命名:

6.本文芯片:

本系列使用开发板是 普中 STM32-F1 , 芯片是STM32 F103ZET6。

7.STM32程序开发的模式

STM32有三种开发模式:

  1. 基于寄存器开发
  2. 基于ST公司的库函数开发
  3. 基于嵌入式操作系统开发

二、keil 开发环境搭建

1.安装Keil uVision5(MDK500)

打开安装包,按提示操作: 

 

 安装完成,等待下载芯片信息:


2.创建Project

选择菜单Project-New Project,输入study1
下面的选项钩选:CMSIS-CORE和 Device-Startup
点OK。
设置 Listings和 Output目录:

3.新增study1.c

int main()
{
   ;
}

点编译按钮:

4.问题处理

1. 缺少环境变量

.\output\study.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.

处理方式:

建立环境变量:ARMCC5LIB 指向: C:\Keil\ARM\ARMCC\lib

2. 找不到SystemInit

在使用MDK编译工程时出现了如下错误,test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_hd.o).`

定义一个空函数: SystemInit

void SystemInit()
{
//do nothing
}

3. 找不到 core_cm3.h

 找到本机的 Arm/Packs/ARM/CMSIS/版本号/CMSIS/Include,手工加入到C++的Include Paths里。

三、仿真器安装

仿真器是免驱的,但我在虚拟机中插上需要重启虚拟机才行。

插上后在设置界面的Debug 可以找到仿真器。

四、建立 STM32 工程模板

1. STM32 的固件库

STM32的固件库中包含标准外设驱动、实例等,ST公司在2007年10月发布了V1.0版本。
下载地址:
这里下载固件库3.6版,文件夹命名一般这样的:STM32F10x_StdPeriph_Lib_V3.6.0
库文件目录结构如下:
  • _htmresc:ST公司的图标之类,不用管
  • Libraries:驱动库的源代码与启动文件
    • CMSIS:Cortex-M3内核自带的外设驱动代码和启动代码
      • CM3 核心文件夹
        • CoreSupport,即Cortex-M3内核自带外设的驱动程序
          • core_cm3.c
          • core_cm3.h
        • DeviceSupport
          • ST
            • STM32F10x
              • startup:不同开发环境的启动代码文件夹
                • arm:对应keil开发环境,均为汇编文件,内部多个文件分别对应不同的Flash容量
                  • startup_stm32f10...s
                • gcc_ride7
                • iar
                • TrueSTUDIO
              • Release_Notes.html
              • stm32f10x.h
              • system_stm32f10x.c
              • system_stm32f10x.h
      • Documentation 一些文档
      • CMSIS debug support.html
      • CMSIS_changes.htm
      • License.doc
    • STM32F10x_StdPeriph_Driver:芯片制造商在Cortex-M3内核上外加的外设驱动
      • inc:include文件
        • stm32f10x_adc.h 不同外设的头文件
        • ……
      • src:源代码 ,上inc对应
      • Release_Notes.html
  • Projects:驱动实例和工程模板
    • STM32F10x_StdPeriph_Template工程模板
      • main.c
      • stm32f10x_conf.h
      • stm32f10x_it.c
      • stm32f10x_it.h
  • Utilities:ST开发板相关例程
  • Release_Notes.html 
  • stm32f10x_stdperiphlib_um.chm 帮助系统

2. 拷贝文件

典型的工程模板包含以下文件和文件夹:

  • Libraries:固件库里的同名文件夹,放外设驱动及启动代码。
  • Output:编译输出文件夹
  • Project:用户开发的程序源代码,一般包含下面内容:
    • 工程文件
    • main.c:本文件及下面3个文件可以从工程模板拷贝过来
    • stm32f10x_conf.h:外设头文件配置文件
    • stm32f10x_it.c:中断函数源文件(涉及中断时使用)
    • stm32f10x_it.h:中断函数头文件
  • readme.txt

这里实现一个简单的模板框架,使用如下几个文件:

放置文件夹结构:

3. 改分组文件夹

如下图操作:

 4. Keil 环境必要的配置

配置要点:

  • Target页面下的外部时钟,这里设置为8.0MHz

  • Output页面下,钩选Create HEX File
  • C/C++页面下,设置Include Paths

  • Debug选择自己使用的仿真器

设置如下:

5. 源程序示例

/*******************************************************************************
*                 
*                 		       普中科技
--------------------------------------------------------------------------------
* 实 验 名		 : 使用寄存器点亮一个LED
* 实验说明       : 操作寄存器控制D1指示灯闪烁
* 连接方式       : 
* 注    意		 : 	
*******************************************************************************/

#include "stm32f10x.h"

typedef unsigned int u32;   //类型重定义 unsigned int -- u32

void SystemInit()
{
	
}

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,通过while循环占用CPU,达到延时功能
* 输    入         : i
* 输    出         : 无
*******************************************************************************/
void delay(u32 i)
{
	while(i--);
}

/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
int main()
{
	RCC_APB2ENR |= 1<<4;
	GPIOC_CRL &= ~( 0x0F<< (4*0));
	GPIOC_CRL |= (3<<4*0);
	GPIOC_BSRR=(1<<(16+0));
	while(1)
	{
		GPIOC_BSRR=(1<<(16+0));
		delay(0xFFFFF);
		GPIOC_BSRR=(1<<(0));
		delay(0xFFFFF);
	}
}



6. 仿真

7. 查看 GPIOA 寄存器值

 设置断点,运行到断点后可以在:Peripherals-System Viewer-GPIO 选择GPIOA查看值:

五、配置 vscode 开发环境

安装vscode过程忽略。

1. 安装扩展

  • c/c++ 扩展
  • C/C++ Extension Pack
  • Keil Assistant

2. 设置 Keil Assistant

3. 下载 mingw

MinGW - Minimalist GNU for Windows download | SourceForge.net

点击下载,安装软件包,等待下载完成。

点击Continue.

4. 配置mingw

钩选:

点击: Installation->Apply change

点击 Apply->安装。

5. 配置环境变量

把 MinGW\bin 加到系统变量的Path里。

6. Vscode打开和编译 keil 项目

使用open proejct 打开keil的工程,在左侧找到 KEIL UVISION PROJECT。

鼠标移到 Target 1上,会出现编译、下载图标。

如果提示安装 .Net framework,按提示安装。

目前这个环境只能使用vscode实现开发、编译、下载,并不能进行单步调试。 后续章节再补充此操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程圈子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值