【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试

这篇具有很好参考价值的文章主要介绍了【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇文章介绍了使用Keil来对STM32F103C8芯片进行初始工程搭建,以及开发与工程调试的完整过程,帮助读者能够在实战中体会到Keil这个开发环境的使用方法,了解一个嵌入式工程从无到有的过程,并且具备快速搭建一个全新芯片对应最小软件工程的基本能力思路。文章首先介绍了基础工程搭建的过程,包括代码的组织以及Keil嵌软工程配置,然后讲述了一个简单功能的开发,最后介绍了Keil环境下提供的代码调试工具以及一些常用工具配置项。

目录

Keil概念

工程搭建

代码组织

Keil配置

开发与调试

下载调试准备

串口打印开发 

代码调试


Keil概念

Keil(全称Keil µVision IDE)是一款集成开发环境(IDE),主要用于嵌入式系统的开发。Arm Keil MDK(Microcontroller Development Kit)是面向基于Arm的微控制器的最全面的软件开发解决方案,包括创建、构建和调试嵌入式应用所需的所有组件。主要可以分为MDK(IDE以及芯片对应编译器等)、Softwarepacks(可以随时添加软件包,这使得新的设备支持和中间件更新独立于工具链)、Debug Probes(MDK 支持许多不同的调试和跟踪适配器)。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

下面介绍一下后面工程搭建以及开发调试涉及的相关概念。

  • STM32F10x_StdPeriph_Lib_V3.6.0:芯片底层库文件,我们这里使用的是STM芯片F10系列,响应的库文件可以从ST官网找到,点击这里可直接跳转并下载。Libraries中主要包含CMSIS和STM32F10x_StdPeriph_Driver。Project中主要包含STM32F10x_StdPeriph_Template和STM32F10x_StdPeriph_Examples。,前者是,后者为不同芯片内部外设使用示例。
    • CMSIS:全称为Cortex Microcontroller Software Interface Standard,其中startup文件夹包含了对应芯片类型的启动代码core_cm3.c,包括复位处理程序和异常向量;CoreSupport文件夹中包含了STM32F10系列芯片使用的Cortex-M3内核外设接入层startup_stm32f10x_md.s(md表示芯片容量)
    • STM32F10x_StdPeriph_Driver:STM32F10系列标准的外设驱动库,提供诸如ADC,CAN,GPIO等芯片内外设驱动。
    • STM32F10x_StdPeriph_Template:工程必备的不同IDE文件以及相关代码源文件模板,其中stm32f10x_conf.h包含了外设库头文件以及参数检查宏定义,stm32f10x_it.c包含了所有的中断服务函数定义,system_stm32f10x.c包含了芯片时钟配置。
    • STM32F10x_StdPeriph_Examples:芯片内部外设不同的使用示例,可以根据实际项目使用参考终端服务函数以及main.c中的相关外设配置,例如您如果用到了3ADCs并使用DMA,则可以参考STM32F10x_StdPeriph_Examples\ADC\3ADCs_DMA下的代码进行配置。
  • JLink仿真器:德国SEGGER公司推出基于JTAG的仿真器。简单地说,是给一个JTAG协议转换盒,即一个小型USB到JTAG的转换盒,其连接到计算机用的是USB接口,而到目标板内部用的还是jtag协议。它完成了一个从软件到硬件转换的工作。我们使用它连接电脑与板卡实现程序烧录和在线调试。

工程搭建

代码组织

建立工程文件夹,在工程文件夹下建立以下目录结构,组织工程代码(可根据公司规定对工程目录结构进行统一修改)。

目录名称 存放文件 文件来源
Startup startup_stm32f10x_md.s

STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\

DeviceSupport\ST\STM32F10x\startup\arm

CMSIS core_cm3.c、core_cm3.h

STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3

\CoreSupport

Libraries 芯片外设标准库文件

STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x

_StdPeriph_Driver

App

1.用户编写的业务代码,可根据业务创建子目录。

2.main.c、stm32f10x_conf.h、stm32f10x_it.c、system_stm32f10x.c

1.用户编写/移植。

2.STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_

StdPeriph_Template

Bulid 用来存放编译生成文件 Keil编译生成。

Keil配置

首先打开Keil5,新建工程,芯片型号选择STM32F103C8。随后弹出在线添加库文件,关闭即可。如下图所示。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

然后点击三色块用来添加工程目录,并添加相关目录,增加待编译源文件。如下图所示。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

 最后,单击魔术棒进行配置,这部分的配置比较多,下面分步逐一进行介绍。

  1. 配置目标属性,晶振等信息,因为我现在用的单片机晶振为8M的,所以改为8M;下面调试需要用到printf函数,需要勾选MicroLIB库。

    【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

  2. 输出文件夹改到Bulid文件夹,勾选生成hex文件。

    【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

  3. 修改编译信息,包括添加条件编译宏定义和头文件路径等。

    【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

  4. 配置Flash类型。

    【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

最后,如果配置正确,相关的文件也都正确添加至工程内,编译之后就会在Build Output看到生成了可以下载执行的hex文件,如果没有需要我们根据错误信息来逐步解决。【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发


开发与调试

下载调试准备

首先我们需要安装JLINK驱动(segger上或者百度),如果驱动安装成功,将设备usb接口插到电脑上后,绿灯转为常亮,电脑的设备管理在通用串行控制器中能够识别到仿真器。然后我们需要按照JTAG接口引脚定义正确将仿真器与板卡相连。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

最后,我们需要在Keil中根据我们仿真器类型正确配置Debug信息如下,并选择相关仿真器窗口。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

这是如果仿真器能够正常连接到板卡,绿灯会闪烁,点击Settings摁扭能看到识别到的芯片核心,如果不正常则会为空白。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发


串口打印开发 

我们开发一个串口打印的功能,因为只是一个demo,所以我们将串口初始化的部分也放到main.c里,下面是main.c的代码。

#include "stm32f10x.h" 
#include "usart.h"


void uart_init(u32 bound){
  //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
	 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//使能USART1,GPIOA时钟
  
	//USART1_TX   GPIOA.9
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
   
  //USART1_RX	  GPIOA.10初始化
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  

  //Usart1 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;		//子优先级1
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
  NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
  
   //USART 初始化设置

  USART_InitStructure.USART_BaudRate = bound;//串口波特率
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
  USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
  USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式

  USART_Init(USART1, &USART_InitStructure); //初始化串口1
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
  USART_Cmd(USART1, ENABLE);                    //使能串口1 

}



void USART1_IRQHandler(void)  
{
	u8 Data;

	if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
	{
		Data = USART1->DR;
	}
	
}


///重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
		/* 发送一个字节数据到串口 */
		USART_SendData(USART1, (uint8_t) ch);
		
		/* 等待发送完毕 */
		while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);		
	
		return (ch);
	

}

int main(void)
{	
	uart_init(9600);
	while(1)
	{
		printf("STM32\n");
	}
}

然后点击编译,生成可执行文件之后点击下载到板卡。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

最后正确连接板卡上的串口线到串口小板(TTL转USB),打开串口调试助手,就能看到板卡打印出来的串口信息。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发


代码调试 

点击红色那个上面有个红色字母d的小放大镜摁扭,就会下载程序并进入仿真模式,这个时候程序停在起始位置。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

 按照上图的标号,我们介绍一下相关区域的作用。

  1. 重启执行摁扭:从左到右第一个为系统复位,程序回到起始位置并停止执行。第二个为全速执行摁扭,一般跟预先设置的断点配合使用。
  2. 单步调试摁扭:从左到右依次是进入执行(会进入调用函数),逐行执行(不进入调用函数),跳出执行(执行到跳出此函数),执行到光标处(执行到蓝色光标处)。代码走查常用。
  3. 寄存器窗口:这个串口可以看到ARM核心的一些特殊寄存器,不知道用法的可以移步到《【硬件】嵌入式电子设计基础之单片机》文章去了解一下。这个页签中还有很多别的功能可供发掘,诸如可以通过system中的系统变量sec来查看程序运行所用时间,将两个地方的所用时间相减,即可得到所间隔的时长。
  4. 汇编代码窗口:当前运行程序对应的汇编代码行,可以在更细的层面调试程序。
  5. C代码窗口:黄色光标指向当前运行到行,在左侧深灰处双击即可添加断点,可以看到红色小圆点【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发​。
  6. 命令窗口:Keil提供命令窗口可以在调试过程中执行命令,诸如SAVE E:\Debug\DATA.txt 0x20004A18,0x20004A3A这段命令即可将0x20004A18~0x20004A3A这段内存区存储到文件中。
  7. 调用栈:调用栈信息显示了当前代码处的完整调用关系,有的时候当在中断服务函数中时,无法看到进入中断之前的调用栈信息,需要结合其他寄存器信息直接从栈空间中查找相关调用信息。

还有一些比较常用的调试窗口。memory窗口可以看指定区域的存储器数值,正如上面提到的存储指令,我们也可以通过memory窗口看到对应的内容。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

还有就是Watch窗口,可以添加一些变量,在调试过程中观察变量的变化。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发

最后一个常用的就是系统外设窗口,在调试过程中可以看到具体对应外设的寄存器值。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发


Keil环境补充说明

keil默认无法显示中文,输入中文时,出现的是问号。可以将Edit-->Configuration中的编码改成GB2312解决这个问题,同时在这个页签中可以将Tab设置为4个空格。在Configuration还有更多诸如字体等环境配置,读者可以根据自己的喜好来进行调整。

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试,通用微控制器(MCU)开发,stm32,嵌入式硬件,单片机,物联网,嵌入式开发


十六宿舍 原创作品,转载必须标注原文链接。

©2023 Yang Li. All rights reserved.

欢迎关注 『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。文章来源地址https://www.toymoban.com/news/detail-745831.html

到了这里,关于【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 嵌入式软件开发常用的编辑代码工具、比较工具和测试工具的使用说明和操作步骤

    嵌入式软件开发常用的编辑代码工具有: Eclipse Eclipse是一款开源的集成开发环境,支持多种编程语言和插件,适用于多种嵌入式开发平台。以下是Eclipse的使用说明和操作步骤: 步骤1:创建新工程 单击“File”菜单,选择“New”→“Project”选项,选择工程类型和开发平台。

    2024年02月02日
    浏览(11)
  • 【嵌入式】Linux开发工具arm-linux-gcc安装及使用

    【嵌入式】Linux开发工具arm-linux-gcc安装及使用

    宿主机 执行编译、链接嵌入式软件的计算机 目标机 运行嵌入式软件的硬件平台 “本地”编译器 用来生成在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,例如 Windows 环境生成 Windows 目标代码。 交叉编译器 用来生成在其它平台上运行的目标代

    2024年01月17日
    浏览(19)
  • 使用GUI Guider工具开发嵌入式GUI应用 (3) - 使用label组件

    使用GUI Guider工具开发嵌入式GUI应用 (3) - 使用label组件

    本节讲述在GUI Guider中,应用各种UI的基本元素,并顺利部署到MCU的过程。在GUI Guider中使用各LVGL的组件时,将会涉及到GUI Guider的操作,以及将某些组件额外生成的源码添加到Keil工程中。至于具体产品中的UI应用,可以是这些基本UI元素的组合使用,以实现更加丰富的显示效果

    2024年02月12日
    浏览(11)
  • 使用GUI Guider工具开发嵌入式GUI应用(4)-使用image组件

    使用GUI Guider工具开发嵌入式GUI应用(4)-使用image组件

    在没有使用LVGL和GUI Guider的时候,我想做一个电子相册的小应用,需要在MCU工程中集成一个小型的文件系统和图像解码组件,例如 fatfs (http://elm-chan.org/fsw/ff/00index_e.html)组件和 tjpgdec (http://elm-chan.org/fsw/tjpgd/00index.html)组件。使用GUI Guider显示图片就不需要这么麻烦,可以使

    2024年02月13日
    浏览(16)
  • Ubuntu嵌入式开发编译工具链安装教程之Arm GNU Toolchain

    Ubuntu嵌入式开发编译工具链安装教程之Arm GNU Toolchain

    下载路径: Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer 官方提供了可执行版本和源文件版本(后缀为*src_tar.bz2 ),通常情况我们直接下载可执行版本就足够了,当然致力于编译工具链原理学习的小伙伴对源文件版本是必不可少的,本文仅限可执行版本安装教程,若有

    2024年02月13日
    浏览(19)
  • 使用文心一言等智能工具指数级提升嵌入式/物联网(M5Atom/ESP32)和机器人操作系统(ROS1/ROS2)学习研究和开发效率

    使用文心一言等智能工具指数级提升嵌入式/物联网(M5Atom/ESP32)和机器人操作系统(ROS1/ROS2)学习研究和开发效率

    以M5AtomS3为例,博客撰写效率提升10倍以上: 0. Linux环境Arduino IDE中配置ATOM S3_zhangrelay的博客-CSDN博客 1. M5ATOMS3基础01按键_zhangrelay的博客-CSDN博客 2. M5ATOMS3基础02传感器MPU6886_zhangrelay的博客-CSDN博客 3. M5ATOMS3基础03给ROS1发一个问候(rosserial)_zhangrelay的博客-CSDN博客 4. M5ATOMS3基

    2024年02月14日
    浏览(15)
  • 使用GUI Guider工具在MCU上开发嵌入式GUI应用 (1) - GUI Guider简介及安装

    使用GUI Guider工具在MCU上开发嵌入式GUI应用 (1) - GUI Guider简介及安装

    受限于每篇文章最多只能贴9张图的限制,这个教程被拆分成了多篇文章连载发布,完整目录结构如下图x所示。后续会发布完整教程的pdf文件,敬请期待。 图x 完整教程文档的目录 LVGL是一个开源免费(MIT许可)的嵌入式GUI组件(https://lvgl.io/),支持触摸屏操作,移植简单方

    2024年02月13日
    浏览(16)
  • 嵌入式-stm32-江科大-OLED调试工具

    嵌入式-stm32-江科大-OLED调试工具

    1.1 OLED显示屏介绍 学习任何一门语言就需要进行调试,stm32调试方式主要有以下三种: 串口调试:通过串口,将调试信息发送到电脑端,电脑端使用串口调试助手显示调试信息。 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上。 Keil调试模式:借助Kei

    2024年01月21日
    浏览(17)
  • 技术之外(02)猿创征文|宝藏工具篇|数字芯片设计,嵌入式开发,人工智能|没我可以,没你不行

    技术之外(02)猿创征文|宝藏工具篇|数字芯片设计,嵌入式开发,人工智能|没我可以,没你不行

    新芯设计:专注,积累,探索,挑战   由于工作的繁忙,已经有较长的时间没有发文了。偶然之间,在回复读者来信的时候,关注到了 CSDN 创作活动中的「 猿创征文 」 第四季 | 2022 年我的开发者工具 。这时才晃过神来,2022 年,已经跨入了倒数的一个四分之一,岁月的印

    2024年01月23日
    浏览(30)
  • STM32开发环境搭建&工程创建(嵌入式学习)

    STM32开发环境搭建&工程创建(嵌入式学习)

    简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境(IDE)工具,用于快速配置和初始化STM32微控制器系列的软件工程。它提供了图形化界面和交互式工具,使开发者能够轻松地生成STM32微控制器的初始化代码和配置文件。 STM32CubeMX具有以下主要功能和特点: 微控制器

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包