嵌入式开发学习笔记1

您所在的位置:网站首页 嵌入式编程语言 嵌入式开发学习笔记1

嵌入式开发学习笔记1

2024-07-04 23:16| 来源: 网络整理| 查看: 265

学习笔记(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软件的主要功能和作用包括以下几个方面:

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

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

跨平台支持:Keil支持多种操作系统和单片机体系结构,可以在Windows、Linux等操作系统上运行,并支持ARM、8051、Cortex-M等多种单片机体系结构。易于使用:Keil提供了一个友好的用户界面,包括源代码编辑器、编译器、调试器和仿真器等组件,使得开发人员可以方便地编写和调试嵌入式应用程序。支持多种编程语言:Keil支持多种编程语言,包括C、C++、ASM等,可以满足不同开发人员的需求。丰富的API和库函数:Keil提供了丰富的API和库函数,可以方便地访问硬件资源,并通过模拟器和仿真器等工具来测试和验证代码的正确性。高效的编译器:Keil提供了高效的编译器,可以快速编译并生成可执行文件,提高了开发效率。强大的调试功能: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学习路线图可以按照以下顺序进行规划,以确保学习的合理性和高效性:

一、基础阶段

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

二、进阶阶段

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

三、高级阶段

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

四、扩展阶段

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

五、持续学习与提升

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

通过以上五个阶段的学习和实践,你可以逐步掌握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间歇点亮程序时,有几个注意事项需要牢记:

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

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

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

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

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

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

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

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

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

固件更新和库文件:保持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)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3