嵌入式开发学习笔记1——keil软件入门

学习笔记(2024.3.30)

引言

从对几个问题的思考入手:

1、keil是什么?干什么用的?有什么优点?

2、keil从哪里下载?怎么安装?

3、keil学习路线图怎么比较合理?学习的顺序?

4、怎么快速用起来?

1、keil是什么?干什么用的?有什么优点?

keil软件介绍

Keil是一款单片机开发环境,主要研发8051微控制器C编译器,后面衍生出了编辑器、宏汇编器、链接器、调试器等众多工具套件(参考资料1)。Keil提供了一个集成的开发环境,可以方便地进行代码编写、编译、下载、调试和测试等操作,大大提高了开发效率和软件质量(参考资料2)。Keil支持多种芯片体系结构,如ARM、8051、C251等,可以满足不同类型的嵌入式系统开发需求(参考资料2)。Keil还提供了一系列易用的集成开发环境(IDE),可以帮助用户快速地开发和调试嵌入式应用程序,而且具有高度的可靠性和稳定性(参考资料3)。

KEIL软件的主要功能和作用包括以下几个方面:

  1. 提供集成化的开发环境:KEIL提供了一个集成的开发环境,可以方便地进行代码编写、编译、下载、调试和测试等操作,大大提高了开发效率和软件质量。
  2. 支持多种芯片体系结构:KEIL支持多种芯片体系结构,如ARM、8051、C251等,可以满足不同类型的嵌入式系统开发需求。
  3. 提供强大的调试功能:KEIL提供了强大的调试功能,可以实时监测程序执行情况,查看变量值、寄存器状态、内存使用情况等信息,帮助用户快速定位和解决问题。
  4. 内置丰富的库函数和示例代码:KEIL内置了丰富的库函数和示例代码,可以方便用户进行开发,节省开发时间和精力。
  5. 可以连接多种仿真器和调试器:KEIL可以连接多种仿真器和调试器,支持在线调试和离线仿真,可以满足不同类型的嵌入式系统开发需求。

Keil作为嵌入式系统开发工具,具有以下几个优点:

  1. 跨平台支持:Keil支持多种操作系统和单片机体系结构,可以在Windows、Linux等操作系统上运行,并支持ARM、8051、Cortex-M等多种单片机体系结构。
  2. 易于使用:Keil提供了一个友好的用户界面,包括源代码编辑器、编译器、调试器和仿真器等组件,使得开发人员可以方便地编写和调试嵌入式应用程序。
  3. 支持多种编程语言:Keil支持多种编程语言,包括C、C++、ASM等,可以满足不同开发人员的需求。
  4. 丰富的API和库函数:Keil提供了丰富的API和库函数,可以方便地访问硬件资源,并通过模拟器和仿真器等工具来测试和验证代码的正确性。
  5. 高效的编译器:Keil提供了高效的编译器,可以快速编译并生成可执行文件,提高了开发效率。
  6. 强大的调试功能:Keil支持多种调试接口和外围设备,如JTAG、SWD、UART等,提供了强大的调试功能,可以方便地对嵌入式应用程序进行调试和测试。

2、keil从哪里下载?怎么安装?

2.1下载keil 

引用自某STM32教程光盘

由于软件的版权问题,我们无法在光盘提供Keil(MDK)开发软件,


在此告知您该软件的获取渠道:

1.该软件是由ARM公司提供的,可到其官网下载:
    http://www.keil.com/download/product/
  选择"MDK-ARM"产品下载,下载时它会要求填一个用户信息表,填完后即可下载。

2.百度搜索 MDK 下载
  网上会有一些提供破解版的程序,用于学习的目的,使用破解版的比较方便,
  且我们提供的一些例程,必需要是注册版(或破解版)的软件才能正常编译。 
  为避免纠纷,公司请使用正版软件,

--------------------------------------------------------
以下链接含MDK/Keil软件,F1/F4/F7芯片包及破解工具。

该分享由网友提供,免去了大家从官网更新芯片包下载慢的麻烦,
破解工具仅供学习交流使用,请支持正版。

百度云下载链接:http://pan.baidu.com/s/1bpc7Xmf

---------------------------------------------------------

2.2安装步骤

按照教程提示

安装提示

  • 1、安装路径不能带中文,必须是英文路径
  • 2、安装目录不能跟 51 的 KEIL 或者 KEIL4 冲突,三者目录必须分开
  • 3、KEIL5 的安装比起 KEIL4 多了一个步骤,必须添加 MCU 库,不然没法使用。
  • 4、如果使用的时候出现莫名其妙的错误,先百度查找解决方法,莫乱阵脚。

主要步骤

KEIL5安装

默认路径,填写用户信息时,全部填空格(键盘的 space 键)即可

安装 MCU Device 包

把下载好的包双击安装即可,安装路径选择跟 KEIL5 一样的安装路径,安装成功之后, 在 KEIL5 的 Pack Installer 中就可以看到我们安装的包,以后我们新建工程的时候,就有单 片机的型号可选。

破*解(仅用于学习,勿商用)

KEIL 如果不破*解的话,会有 32K 代码容量的限制,超过 32K 则编译不了。

Keil5最新注册机到2032_keil5注册机-CSDN博客

安装结果

 

3、keil学习路线图怎么比较合理?学习的顺序?

3.1中规中矩的答案

以下内容来自大模型回答,需谨慎参考。

Keil学习路线图可以按照以下顺序进行规划,以确保学习的合理性和高效性:

一、基础阶段

  1. 了解Keil的基本概念和功能
    • 掌握Keil是什么,它的主要应用领域和优势。
    • 熟悉Keil的主要功能模块,如项目管理、代码编辑、编译和调试等。
  2. 学习C语言基础知识
    • 作为嵌入式系统编程的主要语言,掌握C语言的基本语法、数据类型、运算符、控制结构等。
    • 学习C语言中的函数、指针、数组等高级特性。

二、进阶阶段

  1. 熟悉Keil的操作界面和常用工具
    • 掌握Keil的菜单栏、工具栏和状态栏等基本界面元素。
    • 学习使用Keil的代码编辑器、编译器和调试器等常用工具。
  2. 实践编写简单的嵌入式程序
    • 选择一个适合初学者的嵌入式项目,如LED闪烁、按键控制等。
    • 使用Keil创建项目、编写代码、编译和调试程序。

三、高级阶段

  1. 深入学习嵌入式系统原理
    • 掌握嵌入式系统的硬件架构、中断处理、串口通信等基本原理。
    • 学习嵌入式系统的外设接口、驱动程序开发等知识。
  2. 提升Keil的高级应用技能
    • 学习使用Keil的仿真功能进行程序验证和调试。
    • 掌握Keil的性能分析和优化工具,提高程序的执行效率。
  3. 实践复杂的嵌入式项目开发
    • 选择一个具有一定难度的嵌入式项目,如物联网设备、智能机器人等。
    • 使用Keil进行项目规划、代码编写、模块调试和系统集成。

四、扩展阶段

  1. 学习其他与Keil相关的技术
    • 了解与Keil配合使用的其他工具和技术,如Proteus仿真软件、JTAG调试器等。
    • 学习使用Keil进行跨平台开发,如ARM、DSP等不同架构的处理器。
  2. 参与开源项目或实际项目开发
    • 参与一些开源的嵌入式项目,学习他人的代码和开发经验。
    • 尝试在实际项目中应用Keil进行开发,积累实践经验。

五、持续学习与提升

  1. 关注行业最新动态和技术发展
    • 定期浏览嵌入式系统领域的专业网站、论坛和博客,了解最新技术动态和趋势。
    • 参加嵌入式系统相关的学术会议和培训班,与同行交流学习。
  2. 不断挑战自己,提升技能水平
    • 尝试解决更复杂、更具挑战性的嵌入式系统问题。
    • 不断学习和掌握新的技术工具和方法,提升自己的竞争力。

通过以上五个阶段的学习和实践,你可以逐步掌握Keil的使用技巧,并在嵌入式系统开发中熟练应用它。同时,保持持续学习和提升的态度,不断挑战自己,将有助于你在这个领域取得更好的成就。

3.2自己总结(占坑待填)

占坑待填

占坑待填

占坑待填

4、怎么快速用起来?

在软件中新建工程→新建.c文件→编写程序→项目设置(Target 1” --> "Options for 'Target 1'";输出"Output"一栏勾选“Create HEX File”)→编译程序→下载程序到开发或者用Proteus创建仿真模型进行仿真验证。

参考资料3,基于51单片机的 一个简单的LED灯模型创建并Proteus创建仿真模型进行仿真验证使用。参考资料4,编码之前的操作步骤很详细,两个资料结合着用

51的程序在stm32上可能不能直接照搬,文心一言给的。等我有基础后再测试,占坑待填。

/**  
  * @brief  主程序入口  
  * @param  无  
  * @retval 无  
  */  
int main(void)  
{  
    HAL_Init(); // 初始化HAL库  
  
    // 配置系统时钟为72MHz  
    SystemClock_Config();  
  
    // 初始化GPIOA,并设置PA0为输出  
    __HAL_RCC_GPIOA_CLK_ENABLE();  
    GPIO_InitTypeDef GPIO_InitStruct = {0};  
    GPIO_InitStruct.Pin = GPIO_PIN_0;  
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  
    GPIO_InitStruct.Pull = GPIO_NOPULL;  
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  
  
    // 主循环  
    while (1)  
    {  
        // 点亮LED  
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);  
          
        // 延时一段时间,例如500ms  
        HAL_Delay(500);  
          
        // 熄灭LED  
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);  
          
        // 延时一段时间,例如500ms  
        HAL_Delay(500);  
    }  
}  
  
/**  
  * @brief  系统时钟配置  
  * @param  无  
  * @retval 无  
  */  
void SystemClock_Config(void)  
{  
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};  
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};  
  
    // 配置HSE为系统时钟源  
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;  
    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;  
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;  
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;  
    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)  
    {  
        // 初始化错误处理  
        Error_Handler();  
    }  
  
    // 配置系统时钟  
    RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);  
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;  
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;  
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;  
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  
  
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)  
    {  
        // 初始化错误处理  
        Error_Handler();  
    }  
  
    // 配置HCLK时钟频率为72MHz  
    HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);  
  
    // 配置SysTick中断优先级  
    HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);  
  
    // 启用SysTick中断  
    HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);  
    HAL_NVIC_EnableIRQ(SysTick_IRQn);  
}  
  
/**  
  * @brief  错误处理函数  
  * @param  无  
  * @retval 无  
  */  
void Error_Handler(void)  
{  
    // 用户可以在这里添加错误处理代码  
    while(1)  
    {  
    }  
}

在这个程序中,我们首先初始化HAL库,然后配置系统时钟到72MHz。接着初始化GPIOA端口,并设置PA0为输出。在while循环中,我们通过HAL_GPIO_WritePin函数交替地设置和清除PA0引脚的状态,以实现LED的间歇点亮。使用HAL_Delay函数引入延时,以便可以看到LED的闪烁效果。

在编写和运行上述STM32F103ZET6上的LED间歇点亮程序时,有几个注意事项需要牢记:

  1. 时钟配置:确保系统时钟配置正确。STM32F103ZET6的时钟系统比较复杂,需要根据具体的硬件设计和需求来配置HSE、PLL等参数。

  2. 外设初始化:在程序中,我们首先初始化了GPIOA端口。这是非常重要的步骤,因为STM32的GPIO引脚默认处于输入模式,并且可能带有内部上拉或下拉电阻。在使用前必须正确配置引脚的模式、输出类型、速度和上拉/下拉电阻。

  3. HAL库函数:使用HAL库可以简化底层硬件操作的编写,但需要注意函数调用的顺序和参数设置。例如,在调用HAL_GPIO_WritePin之前,必须确保对应的GPIO端口已经初始化。

  4. 延时函数:程序中使用了HAL_Delay函数来实现延时。这个函数的精度依赖于系统时钟和SysTick的配置。对于需要精确延时的应用,可能需要使用更高级的定时器或实时时钟(RTC)。

  5. 中断处理:在程序中没有使用中断,但在复杂的应用中,中断是处理异步事件的重要机制。如果程序中使用中断,需要确保中断服务程序(ISR)正确编写,并且中断优先级配置得当。

  6. 错误处理:程序中包含了一个简单的Error_Handler函数,用于处理初始化错误。在实际应用中,可能需要添加更详细的错误检测和处理机制。

  7. 调试和测试:在编写和调试程序时,建议使用STM32CubeMX等工具生成初始化代码,这样可以减少出错的可能性。此外,使用调试器(如Keil uVision的调试器)可以实时查看变量和寄存器的值,有助于定位和解决问题。

  8. 硬件连接:确保LED正确连接到STM32F103ZET6的PA0引脚,并且LED的正负极连接正确。否则,LED可能无法正常工作或损坏。

  9. 电源和接地:确保STM32开发板或系统的电源稳定,并且所有部件都正确接地。不稳定的电源可能导致程序运行异常或硬件损坏。

  10. 固件更新和库文件:保持STM32CubeMX、HAL库和Keil uVision等工具的版本更新,以便利用最新的功能和修复。

遵循这些注意事项可以帮助您成功编写和运行STM32F103ZET6上的LED间歇点亮程序。

5、其它-单片机入门路线参考

看到一篇嵌入式开发学习路线和知识点整理的思维导图文章,供借鉴参考。

肝了半个月,我整理出了这篇嵌入式开发学习学习路线+知识点梳理)_嵌入式学习路线-CSDN博客

知乎这位大佬也有很多干货,大概浏览一下有个感性认识:

单片机入门到高级开挂学习路径(附教程+工具) - 知乎 (zhihu.com)

谁能教教我怎么学单片机,先学什么,怎么入门? - 知乎 (zhihu.com)

(2 封私信 / 26 条消息) 为什么我学了几天 STM32 感觉一脸茫然? - 知乎 (zhihu.com)

6、参考资料

参考资料1

Keil科普教程 | Keil的发展历史 - 知乎 (zhihu.com)

参考资料2

https://www.eefocus.com/baike/495948.html

参考资料3

1.KEIL的基本使用操作 - 知乎 (zhihu.com)

参考资料4

keil软件是干嘛的?keil软件怎么用? - 知乎 (zhihu.com)

  • 22
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keil开发嵌入式开发环境编程时需要具备以下几方面的要求和准备: 第一,需要了解嵌入式系统的基本原理和工作方式。嵌入式系统是指将特定功能嵌入到某个设备中的计算机系统,因此需要对计算机体系结构、微控制器、外设等有基本的了解和掌握。 第二,需要掌握C或者汇编等编程语言。在Keil开发环境中,常用的编程语言是C语言和汇编语言。掌握这些编程语言是进行嵌入式开发的基础。 第三,需要了解和熟悉Keil开发环境的基本使用方法。Keil开发环境是嵌入式开发中常用的开发软件之一,具备了创建工程、编写代码、编译、调试等功能。熟悉Keil开发环境的基本使用方法可以提高开发效率。 第四,需要熟悉所使用的微控制器的技术手册和相关资料。在进行嵌入式开发时,通常会使用到某个具体型号的微控制器,因此需要阅读相应的技术手册和资料,了解微控制器的功能、寄存器的配置和使用方法等。 第五,需要具备问题解决和调试能力。在嵌入式开发中,常常会遇到各种问题和bug,因此需要具备分析和解决问题的能力,并能够运用Keil开发环境提供的调试工具进行调试和排查错误。 综上所述,Keil开发嵌入式开发环境编程时需要具备嵌入式系统基础知识、编程语言掌握、Keil开发环境使用、微控制器技术手册了解和问题解决能力等。通过具备这些能力和知识,可以更好地进行Keil开发环境编程,实现嵌入式系统的开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值