STM32入门经历,高手不要进!
- 格式:docx
- 大小:13.05 KB
- 文档页数:1
STM32从⼊门到精通前⾔:还记得⼤学⽼师跟我说过的⼀句话,嵌⼊式这个⾏业越学越觉得⾃⼰懂得太少。
这也许就是我们要树⽴终⽣学习的⽬标和动⼒吧!我所理解的精通就是对崇尚的技术永⽆⽌境地追求。
⼀、相识STM32STM32这款由ST公司开发的32位微控制器,是继51单⽚机后第⼀款我为之痴迷的经典MCU。
⼤学的时光很短,⽽我与她为伴,但从未静下⼼来,好好看她!1.1 STM32如何选型?当开发⼀款嵌⼊式产品时,主控芯⽚的选型相信是⼀个⾮常棘⼿的问题,不仅要考虑芯⽚的性能和硬件资源是否可以满⾜产品的需求,还有考虑芯⽚的成本以及功耗等因素,但这些对于有经验的⼯程师来说并不算什么难事。
那对于初学者该如何选型呢?那肯定是找资料最齐全的,推荐初学者选择STM32F103系列作为⾃⼰的⼊门32的经典,学习资料可以选择正点原⼦,原⼦哥的STM32资料相信⼤家都有所⽿闻,确实做得很⽤⼼。
附上原⼦论坛要增加⾃⼰阅历,没事可以多逛逛论坛,关注⼀些新出的MCU,毕竟技术在发展,作为嵌⼊式⼯程师要跟上时代的进步,其实官⽅⼿册可以提供我们⼀个很好的参考,⼤家可以⾃⾏去ST官⽹下载,然后再选择最符合⾃⼰项⽬要求的芯⽚。
1.2 BOOT引脚设置在ISP下载电路中,我们需要配置BOOT引脚,有关BOOT引脚不同的配置会产⽣不同的启动⽅式,具体见表格BOOT配置。
BOOT0BOOT1启动⽅式0X内部FLASH10系统存储器11内部SRAM1.3 如何分配原理图IO在画原理图之前,⼀般的做法是先把引脚分类好,然后才开始画原理图,引脚分类具体见表格。
引脚分类引脚说明电源(VBAT)、(VDD VSS)、(VDDA VSSA)、(VREF+ VREF-)等晶振IO主晶振IO,RTC晶振IO下载IO⽤于JTAG下载的IO:JTMS、JTCK、JTDI、JTDO、NJTRSTBOOT IO BOOT0、BOOT1,⽤于设置系统的启动⽅式引脚分类引脚说明复位IO NRST,⽤于外部复位GPIO专⽤器件接到专⽤的总线,⽐如I2C,SPI,SDIO,FSMC,DCMI这些总线的器件需要接到专⽤的IO1.4 如何寻找IO的功能说明要想根据功能来分配 IO,那就得先知道每个 IO 的功能说明,这个我们可以从官⽅的数据⼿册⾥⾯找到。
STM32快速入门教程本文将介绍STM32的快速入门教程,帮助你迅速上手使用STM32进行开发。
第一步:准备开发工具首先,你需要准备相应的开发工具。
在使用STM32进行开发时,通常需要以下几个工具:1.STM32开发板:选择一款合适的STM32开发板作为开发平台。
市面上有很多不同型号的STM32开发板可供选择,你可以根据自己的需求和预算作出选择。
2. 开发环境:STM32可使用多种开发环境进行开发,包括Keil MDK、IAR Embedded Workbench、STM32CubeIDE等。
你可以根据自己的习惯和需求选择适合的开发环境。
准备好以上开发工具后,我们可以开始进行STM32的快速入门教程。
第二步:熟悉开发环境在开始开发之前,我们需要先熟悉所选用的开发环境。
以Keil MDK为例,你需要了解如何创建一个新的工程、配置工程的属性和选项、添加源文件等。
这些基本的开发环境的操作将对后续的开发工作起到关键作用。
第三步:编写第一个程序学习STM32的第一步是编写一个简单的程序,将其烧录到开发板上运行。
这个程序通常是一个LED闪烁的示例程序,通过控制开发板上的LED 灯,检查开发环境是否配置正确。
在Keil MDK中,你可以创建一个新的C文件,编写如下代码:```#include "stm32f4xx.h"int main(void)//初始化LED灯RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOA, &GPIO_InitStruct);while (1)//控制LED灯的状态GPIO_ToggleBits(GPIOA, GPIO_Pin_1);}```上述代码通过GPIO控制LED的亮灭,通过轮询的方式实现LED闪烁的效果。
STM32学前班教程之一:为什么是它经过几天的学习,基本掌握了STM32的调试环境和一些基本知识。
想拿出来与大家共享,笨教程本着最大限度简化删减STM32入门的过程的思想,会把我的整个入门前的工作推荐给大家。
就算是给网上的众多教程、笔记的一种补充吧,所以叫学前班教程。
其中涉及产品一律隐去来源和品牌,以防广告之嫌。
全部汉字内容为个人笔记。
所有相关参考资料也全部列出。
:lol教程会分几篇,因为太长啦。
今天先来说说为什么是它——我选择STM32的原因。
我对未来的规划是以功能性为主的,在功能和面积之间做以平衡是我的首要选择,而把运算放在第二位,这根我的专业有关系。
里面的运算其实并不复杂,在入门阶段想尽量减少所接触的东西。
不过说实话,对DSP的外设并和开发环境不满意,这是为什么STM32一出就转向的原因。
下面是我自己做过的两块DSP28的全功能最小系统板,在做这两块板子的过程中发现要想尽力缩小DSP的面积实在不容易(目前只能达到50mm×45mm,这还是没有其他器件的情况下),尤其是双电源的供电方式和1.9V的电源让人很头疼。
后来因为一个项目,接触了LPC2148并做了一块板子,发现小型的ARM7在外设够用的情况下其实很不错,于是开始搜集相关芯片资料,也同时对小面积的A VR和51都进行了大致的比较,这个时候发现了CortexM3的STM32,比2148拥有更丰富和灵活的外设,性能几乎是2148两倍(按照MIPS值计算)。
正好2148我还没上手,就直接转了这款STM32F103。
与2811相比较(核心1.8V供电情况下),135MHz×1MIPS。
现在用STM32F103,72MHz×1.25MIPS,性能是DSP的66%,STM32F103R型(64管脚)芯片面积只有2811的51%,STM32F103C型(48管脚)面积是2811的25%,最大功耗是DSP的20%,单片价格是DSP的30%。
我的STM32艰苦入门经验体会与总结1.1为什么要把时间花在犹豫上?每当我们在入门之前(ARM是这样,DSP也一样),总会会有很多疑问,会有很多顾虑。
我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天一天过去!你开始行动了吗?没有行动的思索,永远都不可能入门!把这些时间用来看书吧,效果能好一万倍。
大家一般都是从51单片机过来的,回想一下,我们之前学单片机时如何入门呢?实际上都是先看书(理论),再玩板子(实践)。
严格地说,应该是模仿实验。
熟悉之后才会自己写程序代码实现某个功能。
因此,如果你正在咨询STM32;如果你正对STM32心潮澎湃;如果你想入门STM32;那么,从现在开始,不要犹豫了,不要想再详细地了解STM32的前景了。
做一个可能影响你一生的决定吧!不用咨询,不用兴奋,开始看书籍(文档)吧!!每个人都是这么走过来的。
1.2看资料需要计划、耐心和速度这里所谓的资料包括STM32书籍、文档。
因为STM32有个特点,datasheet很多都是中文的,有些同学就没有去买书籍,直接看STM32的用户手册,也是可以的。
但是不管看书籍还是文档,我们是需要计划的。
不是今天看3页,明天看5页。
一本书看了两个月,还在磨蹭。
请记住,你学的不是寂寞,是STM32!看书或文档不是用来消遣时间的。
背水一战吧,给自己规定一个底线:两周内把一定粗略地过一遍!不要求都看懂,事实上,不可能都看懂。
但我们必须理解基本知识,对难度高的知识有一个印象,至少以后碰到问题的时候,我们会似曾相识,感觉在哪里见到过,于是翻资料上网找答案带着问题。
STM32入门教程STM32是一款由意法半导体(STMicroelectronics)开发的32位微控制器系列。
它是一种广泛应用于嵌入式系统设计的芯片,具有高性能、低功耗、丰富的外设接口以及可编程的特点。
对于初学者来说,入门STM32可能会有一定的难度。
本篇教程将逐步介绍STM32的基本知识和入门方法,帮助初学者快速上手。
第一部分:STM32简介在入门STM32之前,我们首先了解一些基本的背景知识。
STM32系列采用了ARM Cortex-M内核,具有不同的系列和型号,例如STM32F1xx、STM32F4xx等。
不同的系列和型号拥有不同的性能和外设接口,所以在选型时需要根据具体需求进行选择。
第二部分:开发环境搭建第三部分:编写第一个程序第四部分:外设的使用STM32拥有丰富的外设接口,包括GPIO、UART、SPI、I2C等。
在这一部分,我们将详细介绍如何使用这些外设。
以GPIO为例,我们将学习如何配置GPIO引脚的输入输出模式,如何控制GPIO引脚的高低电平,以及如何使用外部中断功能。
类似地,我们还将介绍UART、SPI和I2C等外设的使用方法。
第五部分:中断的处理中断是STM32中一个非常重要的特性。
它可以让我们在程序运行的同时,对外部事件做出及时的响应。
本节我们将学习如何配置和使用中断。
首先,我们需要了解中断向量表和中断优先级的概念。
然后,学习如何编写中断处理函数,并配置和启用中断。
最后,通过一个例子,演示如何使用中断来处理外部事件,例如按键的按下和释放。
第六部分:时钟和定时器时钟和定时器是嵌入式系统中非常重要的功能模块。
STM32提供了多个时钟源和定时器模块,可以用于各种定时任务和时序要求。
在这一部分,我们将学习如何配置时钟源和时钟分频器,以及如何配置和使用定时器。
通过一个实例,我们将学习如何使用定时器来产生精确的延时和周期性的中断信号。
第七部分:存储器和编程方法STM32拥有多种存储器类型,包括闪存、RAM和EEPROM等。
STM32使用心得简介STM32是意法半导体〔STMicroelectronics〕推出的一种系列32位单片机产品。
它的高性能、低功耗和丰富的外设使得它成为许多嵌入式系统的首选。
本文将分享一些我在使用STM32时的体验和心得。
开发环境搭建首先,我们需要搭建适合STM32的开发环境。
推荐使用Keil MDK 〔Microcontroller Development Kit〕作为开发工具。
Keil MDK提供了一套完整的工具链,包括编译器、调试器等,方便开发者进行软件开发和调试。
此外,还需要下载与目标MCU对应的STM32库文件,以便进行开发。
熟悉STM32的外设和功能在开始开发之前,我们需要了解目标MCU的外设和功能。
STM32系列控制器具有丰富的外设,如通用定时器、串行通信接口、模数转换器等。
熟悉这些外设的功能和使用方法对于实现所需功能非常重要。
可以通过查阅所使用的MCU的数据手册和参考手册来获得有关这些外设的详细信息。
灵巧运用中断效劳中断效劳是STM32中的一项重要特性。
在处理实时任务和响应外部事件时,使用中断可以提高系统的效率和性能。
当使用中断时,需要了解中断优先级、中断触发方式等相关概念。
正确的中断配置和使用可以确保系统的稳定性和可靠性。
良好的软件架构设计在开发过程中,良好的软件架构设计可以提高代码的可维护性和可扩展性。
推荐使用模块化的设计方法,将代码划分为多个功能模块,每个模块负责一个具体的功能。
使用面向对象的方法可以更好地封装和复用代码。
此外,合理的任务调度和时间管理也是一个良好的架构设计的重要方面。
调试技巧和工具的使用调试是软件开发过程中不可或缺的一局部。
在STM32开发中,有许多调试技巧和工具可以帮助我们快速定位和解决问题。
例如,使用串口调试输出、使用调试工具进行实时变量查看等。
熟练掌握这些调试技巧和工具可以大大提高开发效率。
注意功耗管理STM32单片机具有低功耗的优势,在很多应用场景下可以省电。
STM32学习心得(新手必看)(作者:logokfu 邮箱:g535343589@ )在这里说下我的学习心得体会(照顾下新手,老鸟都表笑哦,呵呵)。
说下关于开发环境的建立,都说万事开头难,每种芯片都有它的开发环境,首先得熟悉STM32的开发环境。
用的最多就是MDK 和IAR 了,关于MDK ,这个用过51单片机的筒子肯定都知道keil uvision 。
这个MDK 其实就是专门开发ARM 芯片的工具。
开发51单片机的那个叫C51 。
这个C51和MDK 共同使用keil uvsion 这个UI 界面。
也是说C51和MDK 共同使用keil uvsion 这个外壳。
好了,关于开发软件的介绍就介绍这么多,有什么还不清楚的,筒子们可以邮箱联系我。
当然支持STM32的集成开发环境(IDE )还不止MDK 和IAR ,只不过这两个使用的人相对其他工具来说用的人比较多吧。
另外 RIDE, HiTOP , TrueSTUDIO 这个三个开发工具也支持STM32的开发(可能还有其他的工具,不过我不知道)。
有兴趣的盆友可以使用下尝尝鲜。
说下关于ST 官方为我们提供的固件库的使用问题。
不要觉得固件库是这个什么可怕的东西,固件库是ST 为用户提供的函数库,这些函数帮我们一次性解决多个寄存器的设置问题。
如果没有固件库的话,那么我们就需要像使用51单片机那样直接设置要使用的寄存器,在51单片机上为寄存器直接赋值可能没什么的,但是由于STM32的寄存器太多,如果一个个设置的话会很麻烦,有时候还会忘掉某些寄存器的设置,ST 提供的固件库正是为我们提供了这些方便。
我们只需要为相关函数指定参数就可以完成寄存器的设置了。
为产品的快速开发提供了保障。
当然新固件库是好,但是却会对新手理解硬件结构造成一定的影响。
有的人喜欢直接为STM32的寄存器直接赋值,说这样子比较直观,有的人喜欢使用固件库。
当然这个是个人喜好,大家可以根据自己的喜好进行选择。
STM32学习笔记(初学者快速入门STM32 学习笔记从51 开始单片机玩了很长时间了有51PICAVR 等等早就想跟潮流玩玩ARM 但一直没有开始原因-----不知道玩了ARM 可以做什么对我自己而言如果为学习而学习肯定学不好然后cortex-m3 出来了据说这东西可以替代单片机于是马上开始关注也在第一时间开始学习可惜一开始就有点站错了队选错了型仍是对我自己而言我希望这种芯片应该是满大街都是随便哪里都可以买得到但我选的第一种显然做不到为此大概浪费了一年多时间吧现在回到对我来说是正确的道路上来啦边学边写点东西这里写的是我的学习的过程显然很多时候会是不全面的不系统的感悟式的甚至有时会是错误的有些做法会是不专业的那么为什么我还要写呢这是一个有趣的问题它甚至涉及到博客为什么要存在的问题显然博客里面的写的东西其正确性权威性大多没法和书比可为什么博客会存在呢理由很多我非专家只说我的感慨我们读武侠小说总会有一些创出独门功夫的宗师功夫极高然后他的弟子则基本上无法超越他我在想这位宗师在创造他自己的独门功夫时必然会有很多的次的曲折弯路甚至失败会浪费他的很多时间而他教给弟子时则已去掉了这些曲折和弯路当然更不会把失败教给弟子按理说效率应该更高可是没用弟子大都不如师为什么呢也许知识本身并不是最重要的获取知识的过程才是最重要的也许所谓的知识并不仅仅是一条条的结论而是附带着很多说不清道不明的东西如植物的根一条主根上必带有大量的小小的触须闲话多了些就权当前言了下面准备开始一条件的准备我的习惯第一步是先搭建一个学习的平台原来学51PICAVR 时都是想方设法自己做些工具实验板之类现在人懒了直接购买成品了硬件电路板火牛板软件有keil 和iar 可供选择网上的口水仗不少我选keil理由很简单这个我熟目前要学的知识中软硬件我都不熟所以找一个我有点熟的东西就很重要在我相当熟练之前肯定不会用到IAR如果真的有一天不得不用IAR 相信学起来也很容易因为这个时候硬件部分我肯定很熟了再加上有keil 的基础所以应该很容易学会了调试工具JLINK V8 这个不多说了价格便宜又好用就是它了二热身网上选购的付了款就是等了拿到包裹端详良久起身沐浴更衣焚香总得先吃晚饭洗澡再点个电蚊香什么的吧拆包细细端详做工精良尤其那上面的32 吋屏越看越喜欢接下来就是一阵折腾了装JLINK 软件给板子通电先试试JLINK 能不能与电脑和板子通信上了真顺一点问题也没有于是准备将附带的程序一个一个地写进去试一试一检查大部分例子的HEX 文件并没有给出这要下一步自己生成但是几个大工程的例子都有HEX 文件如MP3如UCCGI 测试等写完以后观察程序运行的效果因为之前也做过彩屏的东西知道那玩艺代码量很大要流畅地显示并不容当时是用AVR 做的在18 吋屏上显示一幅画要有一段时间现在看起来用STM32 做的驱动显示出来的画面还是很快的不过这里显示的大部分是自画图并没有完整地显示一整幅的照片所以到底快到什么程度还不好说看来不久以后这可以作为一个学习点的一个晚上过去了下一篇就是要开始keil 软件的学习了STM32 学习笔记2本想着偷点懒的没想到竞被加了精没办法啦只能勤快点啦硬件调通后就要开始编程了编程的方法有两种一种是用st 提供的库另一种是从最底层开始编程网上关于使用哪种方法编程的讨论很多据说用库的效率要低一些但是用库编程非常方便所以我还是从库开始啦库是ST 提供的怎么说也不会差到哪里再说了用32 位ARM 的话开发的观念也要随之改变一点了说说我怎么学的吧找个例子如GPIO可以看到其结构如下SOURCE 文件夹- APP 文件夹-CMSIS 文件夹-STM32F10x_StdPeriph_Driver 文件夹Lis 文件夹OBJ 文件夹其中SOURCE 中保存的是应用程序其中又有好多子文件夹而CMSIS 文件夹中和STM32F10x_StdPeriph_Driver 文件夹中是ST 提供的库这样如果要做新的工程只要将这个文件夹整个复制过来就行其中APP 中保存自己的代码因为我们用51 单片机时一般比较简单有时就一个文件所以通常不设置专门的输出文件夹而这里做开发通常会有很多个文件加入一个工程中编译过程中会产生很多中间文件因此设置专门的文件夹LIS 和OBJ 用来保存中间文件下面就将设置简单描述一下将复到过来的GPIO 根目录下的所有文件删除因为我们要学着自己建立工程用菜单Project-- New uVision Porject建立新的工程选择目标器件为STM32103VC这个过程与建立51 单片机的工程没有什么区别这里就偷点懒不上图了接下来看一看怎么设置点那个品字形打开对话框这里就给个图了相信有一定操作基础的人应该会用顺便提一下原来用VC或者IAR 时总觉得它们的一个功能就是建立一个是Debug 组和Release 组这个功能挺好的从这个图可在Keil 里也是一样可以建的将刚才那个文件夹图中CMSIS 中的文件加入CMSIS 组一共3 个其中\Source\CMSIS\Core\CM3 有两个C 语言源程序文件全部加入另外还有一个在\Source\CMSIS\Core\CM3\startup\arm 文件夹中这个文件夹中有4 个s 文件我们选择其中的startup_stm32f10x_hds 文件这是根据项目所用CPU 来选择的我们用的CPU 是103VC 的属于高密度的芯片所以选这个至于LIB 中的文件就在这儿\Source\STM32F10x_StdPeriph_Driver\src 啦这里有很多个文件把什么文件加进去呢怕麻烦的话把所有文件全部加进去这并不会增加编译后的代码量但会增加很多的编译时间接下来设定目标输出文件夹上面这个图怎么出来的就不说啦单击Select Foler for Objects在弹出来的对话框中选择OBJ 文件夹同样方法选择List 文件的输出文件夹设置好后如果直接编译是不行的会出错还需要提供头文件所在位置单击cC标签页第一次进入时Include Paths 文本框中是空白的点击其后的按钮打开对话框增加相应的路径这样路径就设好了单击OK回到上一界面然后再单击OK退出设置即可编译链接下一会要试一试新的312 版的库效果如何了STM32 学习笔记3升级库光盘中所带的例子是310 的另外还有一个312 的我试着将312 的库替代原来的库还真有问题下面就简述问题及解决方法1将库文件解压库文件名是stm32f10x_stdperiph_libzip解压后放在任意一个文件夹中2 由于原作者做了很好的规划每一个项目中都分成三个文件夹并且在source 文件夹中又做了3 个文件夹其中APP 文件夹是放自己写的文件的其他的两个是从库中复制过来的因此想当com 版本中相同的两个文件夹CMSIS 和STM32F10x_StdPeriph_Driver 直接复制过来以为一切OK结果一编译出来一堆错误其中有错误Source\App\mainc 7 error 20 identifier "GPIO_InitTypeDef" is undefined还有大量的警告Source\STM32F10x_StdPeriph_Driver\src\stm32f10x_flashc 130 warning 223-D function "assert_param" declared implicitly看了看在APP 文件夹中还有一些不属于自己的东西stm32f10x_confhstm32f10x_ithstm32f10x_itc打开一看果然是310版本的没说的换找到STM32F10x_StdPeriph_Licom\Project\Template 文件夹用里面的同样的文件替换掉这几个文件这回应该万事大吉了吧再一看依然如故没办法了只好细细研究了通过观察发现原来可以编译通过的工程在mainc 下面挂满了h 文件而这个通不过的则少得很这是编译能通过的工程这是编译通不过的工程显然有些文件没有被包含进来一点一点跟踪发现大部分的头文件都包含在stm32f10x_confh 中而这个文件又出现在stm32f10xh 中其中有这样的一行ifdef USE_STDPERIPH_DRIVERinclude "stm32f10x_confh"endif看来是这个USE_STDPERIPH_DRIVER 没有被定义啊于是人为地去掉条件ifdef USE_STDPERIPH_DRIVERinclude "stm32f10x_confh"endif再次编译果然就OK 了可是可是也不能就这么去掉啊怎么办呢万能的网啊一搜果然就有了到设置 CC页面在那个define 中加入USE_STDPERIPH_DRIVERSTM32F10X_HD当然去掉条件编译前面的注释回到原样再次编译一切顺利可是原来的工程例子也没有加这个啊怎么回事呢再次打开原来的例子找到stm32f10xh可以看到有这么一行而新的stm32f10xh 中则是这样的原com 版的stm32f10xh 被人为地修改了一下所以不在define 中定义也不要紧而新com 则不行了至此简单的升级搞定本文见于好多地方但查询后未能确定其原始出处及作者故这里说明是转贴但作者和原始出处信息就无法提供了如果原作者看到请跟贴说明知情者也请跟贴说明ARM 中的RORW 和ZI DATA一直以来对于ARM 体系中所描述的RORW 和ZI 数据存在似是而非的理解这段时间对其仔细了解了一番发现了一些规律理解了一些以前书本上有的但是不理解的东西我想应该有不少人也有和我同样的困惑因此将我的一些关于RORW 和ZI 的理解写出来希望能对大家有所帮助要了解RORW 和ZI 需要首先了解以下知识ARM 程序的组成此处所说的ARM 程序是指在ARM 系统中正在执行的程序而非保存在ROM中的bin 映像image文件这一点清注意区别一个ARM 程序包含3 部分RORW 和ZIRO 是程序中的指令和常量RW 是程序中的已初始化变量ZI 是程序中的未初始化的变量由以上3 点说明可以理解为RO 就是readonlyRW 就是readwriteZI 就是zeroARM 映像文件的组成所谓ARM 映像文件就是指烧录到ROM 中的bin 文件也称为image 文件以下用Image 文件来称呼它Image 文件包含了RO 和RW 数据之所以Image 文件不包含ZI 数据是因为ZI 数据都是0没必要包含只要程序运行之前将ZI 数据所在的区域一律清零即可包含进去反而浪费存储空间Q为什么Image 中必须包含RO 和RWA 因为RO 中的指令和常量以及RW 中初始化过的变量是不能像ZI 那样无中生有的ARM 程序的执行过程从以上两点可以知道烧录到ROM 中的image 文件与实际运行时的ARM 程序之间并不是完全一样的因此就有必要了解ARM 程序是如何从ROM 中的image到达实际运行状态的实际上RO 中的指令至少应该有这样的功能1 将RW 从ROM 中搬到RAM 中因为RW 是变量变量不能存在ROM 中2 将ZI 所在的RAM 区域全部清零因为ZI 区域并不在Image 中所以需要程序根据编译器给出的ZI 地址及大小来将相应得RAM 区域清零ZI 中也是变量同理变量不能存在ROM 中在程序运行的最初阶段RO 中的指令完成了这两项工作后 C 程序才能正常访问变量否则只能运行不含变量的代码说了上面的可能还是有些迷糊RORW 和ZI 到底是什么下面我将给出几个例子最直观的来说明RORWZI 在C 中是什么意思1 RO看下面两段程序他们之间差了一条语句这条语句就是声明一个字符常量因此按照我们之前说的他们之间应该只会在RO 数据中相差一个字节字符常量为1 字节Prog1includevoid main voidProg2includeconst char a 5 void main voidProg1 编译出来后的信息如下Code RO Data RW Data ZI Data Debug948 60 0 96 0 Grand TotalsTotal RO Size Code RO Data1008 098kBTotal RW Size RW Data ZI Data 96 009kBTotal ROM Size Code RO Data RW Data 1008098kBProg2 编译出来后的信息如下Code RO Data RW Data ZI Data Debug948 61 0 96 0Grand TotalsTotal RO Size Code RO Data 1009 099kBTotal RW Size RW Data ZI Data 96 009kBTotal ROM Size Code RO Data RW Data 1009 099kB以上两个程序编译出来后的信息可以看出Prog1 和Prog2 的RO 包含了Code 和RO Data 两类数据他们的唯一区别就是Prog2 的RO Data 比Prog1 多了1 个字节这正和之前的推测一致如果增加的是一条指令而不是一个常量则结果应该是Code 数据大小有差别2 RW同样再看两个程序他们之间只相差一个已初始化的变量按照之前所讲的已初始化的变量应该是算在RW 中的所以两个程序之间应该是RW 大小有区别Prog3includevoid main voidProg4includechar a 5 void main voidProg3 编译出来后的信息如下Code RO Data RW Data ZI DataDebug948 60 0 96 0 Grand TotalsTotal RO Size Code RO Data 1008 098kBTotal RW Size RW Data ZI Data 96009kBTotal ROM Size Code RO Data RW Data 1008098kBProg4 编译出来后的信息如下Code RO Data RW Data ZI Data Debug948 60 1 96 0 GrandTotalsTotal RO Size Code RO Data 1008 098kBTotal RW Size RW Data ZI Data 97 009kBTotal ROM Size Code RO Data RW Data 1009 099kB可以看出Prog3 和Prog4 之间确实只有RW Data 之间相差了1个字节这个字节正是被初始化过的一个字符型变量a所引起的3 ZI再看两个程序他们之间的差别是一个未初始化的变量a从之前的了解中应该可以推测这两个程序之间应该只有ZI 大小有差别Prog3includevoid main voidProg4includevoid main voidProg3 编译出来后的信息如下Code RO Data RW Data ZI Data Debug948 60 0 96 0 GrandTotal RO Size Code RO Data 1008 098kBTotal RW Size RW Data ZI Data 96 009kBTotal ROM Size Code RO Data RW Data 1008 098kBProg4 编译出来后的信息如下Code RO Data RW Data ZI Data Debug948 60 0 97 0 GrandTotalsTotal RO Size Code RO Data 1008 098kBTotal RW Size RW Data ZI Data 97009kBTotal ROM Size Code RO Data RW Data 1008098kB编译的结果完全符合推测只有ZI 数据相差了1 个字节这个字节正是未初始化的一个字符型变量a所引起的注意如果一个变量被初始化为0则该变量的处理方法与未初始化华变量一样放在ZI 区域即ARM C 程序中所有的未初始化变量都会被自动初始化为0总结1 C 中的指令以及常量被编译后是RO 类型数据2 C 中的未被初始化或初始化为0 的变量编译后是ZI 类型数据3 C 中的已被初始化成非0 值的变量编译后市RW 类型数据附程序的编译命令假定C 程序名为tstcarmcc -c -o tsto tstcarmlink -noremove -elf -nodebug -info totals -info sizes -map -list aamap-o tstelf tsto编译后的信息就在aamap 文件中ROM 主要指NAND FlashNor FlashRAM 主要指PSRAMSDRAMSRAMDDRAM继续学习中先把开发板自带一个例子做了些精简以免看得吓人就是这个让PORTD 上接的4 个LED 分别点亮开始研究代码int main voidInit_All_Periph看到这一行开始跟踪于是又看到了下面的内容void Init_All_Periph voidRCC_Configuration继续跟踪void RCC_Configuration voidSystemInit这行代码在system_stm32f10xc 中找到了void SystemInit voidReset the RCC clock configuration to the default reset state fordebug purposeSet HSION bitRCC- CR uint32_t 0x00000001Reset SW HPRE PPRE1 PPRE2 ADCPRE and MCO bits ifndef STM32F10X_CLRCC- CFGR uint32_t 0xF8FF0000elseRCC- CFGR uint32_t 0xF0FF0000endif STM32F10X_CLReset HSEON CSSON and PLLON bitsRCC- CR uint32_t 0xFEF6FFFFReset HSEBYP bitRCC- CR uint32_t 0xFFFBFFFFReset PLLSRC PLLXTPRE PLLMUL and USBPREOTGFSPRE bits RCC- CFGR uint32_t 0xFF80FFFFifndef STM32F10X_CLDisable all interrupts and clear pending bits RCC- CIR 0x009F0000elseReset PLL2ON and PLL3ON bitsRCC- CR uint32_t 0xEBFFFFFFDisable all interrupts and clear pending bits RCC- CIR 0x00FF0000Reset CFGR2 registerRCC- CFGR2 0x00000000endif STM32F10X_CLConfigure the System clock frequency HCLK PCLK2 and PCLK1 prescalersConfigure the Flash Latency cycles and enable prefetch bufferSetSysClock这一长串的又是什么如何来用呢看来偷懒是不成的了只能回过头去研究STM32 的时钟构成了相当的复杂系统的时钟可以有3 个来源内部时钟HSI外部时钟HSE或者PLL 锁相环模块的输出它们由RCC_CFGR 寄存器中的SW 来选择SW 10系统时钟切换由软件置1或清0来选择系统时钟源在从停止或待机模式中返回时或直接或间接作为系统时钟的HSE 出现故障时由硬件强制选择HSI 作为系统时钟如果时钟安全系统已经启动00HSI 作为系统时钟01HSE 作为系统时钟10PLL 输出作为系统时钟11不可用PLL 的输出直接送到USB 模块经过适当的分频后得到48M 的频率供USB 模块使用系统时钟的一路被直接送到I2S 模块另一路经过AHB 分频后送出送往各个系统其中直接送往SDIFMSCAHB 总线8 分频后作为系统定时器时钟经过APB1 分频分别控制PLK1定时器TIM2TIM7经过APB2 分频分别控制PLK2定时器TIM1TIM8再经分频控制ADC由此可知STM32F10x 芯片的时钟比之于51AVRPIC 等8 位机要复杂复多因此我们立足于对着芯片手册来解读程序力求知道这些程序代码如何使用为何这么样使用如果自己要改可以修改哪些部分以便自己使用时可以得心应手单步执行看一看哪些代码被执行了Reset the RCC clock configuration to the default reset state fordebug purposeSet HSION bitRCC- CR uint32_t 0x00000001这是RCC_CR 寄存器由图可见HSION 是其bit 0 位HSION内部高速时钟使能由软件置1或清零当从待机和停止模式返回或用作系统时钟的外部4-25MHz 时钟发生故障时该位由硬件置1来启动内部8MHz 的RC 振荡器当内部8MHz 时钟被直接或间接地用作或被选择将要作为系统时钟时该位不能被清零0内部8MHz 时钟关闭1内部8MHz 时钟开启Reset SW HPRE PPRE1 PPRE2 ADCPRE and MCO bitsifndef STM32F10X_CLRCC- CFGR uint32_t 0xF8FF0000这是RCC_CFGR 寄存器该行程序清零了MC0[20]这三位和ADCPRE[10]ppre2[20]PPRE1 〔20〕HPRE 〔30〕SWS 〔10〕和SW 〔10〕这16 位MCO 微控制器时钟输出由软件置1或清零0xx没有时钟输出100系统时钟 SYSCLK 输出101内部8MHz 的RC 振荡器时钟输出110外部4-25MHz 振荡器时钟输出111PLL 时钟2 分频后输出Reset HSEON CSSON and PLLON bitsRCC- CR uint32_t 0xFEF6FFFF清零了PLLONHSEBYPHSERDY 这3 位Reset HSEBYP bitRCC- CR uint32_t 0xFFFBFFFF清零了HSEBYP 位为什么不一次写HSEBYP外部高速时钟旁路在调试模式下由软件置1或清零来旁路外部晶体振荡器只有在外部4-25MHz 振荡器关闭的情况下才能写入该位0外部4-25MHz 振荡器没有旁路1外部4-25MHz 外部晶体振荡器被旁路所以要先清HSEON 位再清该位Reset PLLSRC PLLXTPRE PLLMUL and USBPREOTGFSPRE bitsRCC- CFGR uint32_t 0xFF80FFFF清零了USBPREPLLMULPLLXTPRPLLSRC 共7 位Disable all interrupts and clear pending bitsRCC- CIR 0x009F0000这个暂不解读SetSysClock跟踪进入该函数可见一连串的条件编译单步运行执行的是elif defined SYSCLK_FREQ_72MHzSetSysClockTo72为何执行该行呢找到SYSCLK_PREQ_的相关定义如下图所示这样就得到了我们所要的一个结论如果要更改系统工作频率只需要在这里更改就可以了可以继续跟踪进入这个函数来观察如何将工作频率设定为72MHz 的static void SetSysClockTo72 void。
学习STM32的一些经验分享展开全文前两天在群里看到群友们在讨论学习STM32的话题,并且今天也有一位机械专业的准研究生读者也问了STM32的入门问题。
正好我也有一点点经验,所以试着分享一下这个话题。
我也不是什么大神,只是一名普通的工程师,以下分享仅仅是自己的一点经验及看法,仅供参考,希望能对一些初学的朋友有所帮助。
老鸟略过~~ 找资料在知乎,我也有看到类似问题:学STM32要买什么书籍、看什么书籍?STM32编程作为一项实操性很强的技能,所以要多实操。
初学的话,我觉得书籍就暂时先不买吧,先考虑入手一块STM32开发板,然后跟着开发板的教程走。
几年前,做STM32的教程有很多家:现在市面上还比较火的基本就只剩前4家了,从这4家中选择一家买开发板。
正好这4家的教程我都基本上都有看过一遍,下面简单介绍一下它们各自的特点:1、正点原子正点原子的教程特点的关键词:手把手。
教程对初学者比较友好。
51转过来的,觉得自己基础不太好的朋友可以选这个教程,我以前入门也是看了原子哥的视频入的门。
有个缺点就是:代码编码风格不是太好。
我现在比较少看他们的代码,因为看起来不舒服~2、野火野火教程特点的关键词:零死角。
野火的教程非常好,适合反反复复地读,STM32的教程我看得最多的就是野火的了。
我觉得无论现在你在用什么教程,最终都有必要再看一下野火的教程。
野火的教程很多知识点剖析得很透彻,真所谓零死角。
火哥书里有这样一句话:基础不牢,地动山摇。
与君共勉~3、安富莱安富莱教程特点的关键词:授人以渔。
安富莱的教程是我工作之后看得比较多的,教程在很详细剖析知识点的同时也在教我们学习的方法。
其实我第一次接触STM32用的是安富莱的教程,但那个时候看安富莱的代码令我很难受,当时不明白为什么那些变量命名得那么花里胡哨,所以也就没用它们的教程。
后来有了一点基础之后才发现我错了,这是多么规范的代码啊!安富莱教程是精品中的精品,适合进阶。
安富莱的教程我觉得跟野火的教程基本不分上下,让我做选择我也选不出。
随便写写,关于stm32 最近在学习stm32,写点东西,虽然简单,但都是原创啊开发板是前辈画的,好像是用来测试一个3G功能的,不过对于我来说太远;我要来了3个,自己焊了一个最小系统,好在公司资源还是不错的,器件芯片有,还可以问问前辈--对公司还是比较满意的,虽然工资少了点,但学东西第一位O(∩_∩)O~。
最开始当然是建工程了,这个真不太会,前前后后竟用了一周(时间真长,别见笑啊),上网查资料,问前辈,自己琢磨。
总算搞定,然后从GPIO开始学,开始还真没什么头绪(虽然在大学学点51,但完全没有真正应用,顶多是跑马灯实验),开始纠结是从寄存器开始学还是从库函数开始学,后来看到一句“用库函数入门,用寄存器提高”于是下定决心用库,但当时没有库的概念,结果走了很多弯路,看了很多不必要的东西,当时竟没理解到只是调用库就OK了,别的不用管。
最后潜心的在教程网看完一个例程后照猫画虎写了一个,经过了多次调试以后,灯终于亮了!那个兴奋啊。
再次还要感谢/mcu/1106.html 的作者他写的GPIO使用方法让我少走了很多弯路,接着学的EXTI,当时对中断的理解只是概念上的,也不知道中断程序要放在中断函数里(it.c),总之现在想想当时怎么那么不开窍啊。
慢慢的中断也弄出来了,一会我会把程序贴出来,很简单的嘿。
慢慢的有点感觉找到门了:先大致看一下要学习概要,找个例程,一个函数一个函数的看,重点理解配置的什么,参数,然后在头脑中形成一个大概的轮廓,虽然有时候不是特别清晰;接着学习TIMER(通用定时器),只是学习了最简单的溢出中断,其他捕获什么的都还没有看呢--想先对stm有个总体的学习,下一步准备每个模块细细“研读”。
应用定时器溢出中断做了个闪灯小程序;接着顺便把学习过的GPIO,EXTI,TIMER混在一起做了一个优先级(NVIC)的程序,以来了解下优先级,二来对前面的学习是一个复习,虽然很简单,但没能一下子就调出来--其实每次都会在细节上出不少差错:时钟忘使能啦,GPIO没有配置全啦,名称写错啦(很低级,但这个有时候真的不好找),概念理解不对啦。
stm32学习总结学习总结单片机学习经历总结自从大二寒假接受了一次初始培训开始,我便开始了单片机的学习,一开始借了一块MS430G255的板子,于是便从MS班始学习单片机.一开始的我对于单片机一窍不通,只能对照着数据手册学习,逐渐开始了解什么是IO口,中断,定时器,AD转换等.开学来了以后接受了四次培训,期间又重新熟悉这些模块并在学长指导下开始写了一些程序作为练习.后续的学习中我在串口通讯这里遇到了很大阻碍,不太能理解其中的含义,网上的解释又不太看得懂,便找了一些STM32的视频来学习串口,期间发现51和MS5经不是主流的板子了,现在的厂商更多的是用STM3型样的板子,于是后来的学习重心开始放到了STM32,由于有了前面的根底,这次从头的学习就更加容易理解STM32的原理与使用了.MS430G2553些模块的总结(1).io口模块,1.我们实用的MS430G255宥两组IO口,是1和XXX口的存放器有:方向选择存放器_DIR,输出存放器_OUT输入存放器_IN,IO 口内部上拉或下拉电阻使能存放器_RENIO功能选择存放器_SEL和_SELZIO中断使能存放器_IE,中断沿选择存放器_lES,IO口中断标志存放器_lFGo3.所有的IO都带有中断,其中所有的1公用一个中断向量,所有的2公用一个中断向量.所以在使用中断时,当进入中断后,还要判断到底是哪一个IO产生的中断,判断方法可以是判断各个IO口的电平.4.中断标志_IFG需要软件去除,也可以用软件置位,从而用软件触发一个中断XXX:如果引脚选择了内部的上拉或下拉电阻使能,那么_OU 似定电阻是上拉还是下拉,0:下拉,1:上拉(2).时钟系统XXX的时钟源有:(1).外接低频晶振LF_T1CLK低频模式32768Hz,高频模式450KHz8MHz(2).外接高速晶振_T2CLK8MHz(3).内部数字限制振荡器DCO(4).超低功耗低频振荡器VLO2.时钟模块:430的时钟模块有MCLKSMCLKACLK:(1).主系统时钟MCLK提供应MS430勺CU寸钟.可以来自LF_T1CLK_T2CLKDCOVLO可选,默认为DCO(2).子系统时钟SMCLK提供应高速外设.可以来自LF_T1CLK_T2CLKDCOVLO可选,默认为DCO(3).辅助系统时钟ACLK:提供应低速外设.可来自LF_T1CLKVL0S一个网上找到的比拟严谨的延时程序/#defineCU_R(double)160XXXX0000)/cufrequency160XXXX0000#define CU_R(double)1于000)/cufrequency1于000#definedelay_us(_)_delay_cycles(long)(CU_F_(double)_/XXX.0)#defin edelay_ms(_)_delay_cycles(long)(CU_F_(double)_/1000.0)(3).定时器XXX具有两个16位的定时器:Timer0_ATimer1_A.分别具有三个捕捉/比拟寄存器,具有输入捕捉,输出比拟功能.可以产生定时中而,也可以产生XXX的捕获/比拟存放器,当为捕获模式时:当捕获发生时,把TAR的值装载到TACCR_K当为比拟模式时:TACCR沛装的是要与TAR存放器相比拟的值.(四)XXX是十位的AD,在g2553上有A0A7八个可以外接的AD通道,A10接到片上的温度传感器上,其他的通道都接在内部的VCC或GND!XXX 的采样方式有:单通道单次采样,单通道屡次采样,多通道单次采样,多通道屡次采(五)UART这个模块这要设置好几个限制存放器,设置波特率,写几个收发函数就可以了.STM3殍习的总结STM32的使用与MS%同,它可以使用固件库来写程序,使得编写的难度与复杂度大大降低,但是在学习阶段我也必须了解它们的底层的具体存放器来帮助我更好的了解与学习.在之前的学习中我学习了它的XXX的配置和使用,2.中断的使用,3.如何配置系统时钟,XXX的配置和使用,6.根本定时器和高级定时器,XXX的配置和使用.由于这些模块的一些参数比拟长和复杂,局部和MSM些相似.而且它的配置有具体的固件库格式很容易了解,在这里我就不一一列举了.在学习过程中遇到的一些问题和对板子的看法XXX在学习MS430勺过程中,对于如何配置中断是我一开始遇到的一个很大的问题,我对它的中断使用格式有些混淆,随后在网上查询使我解决了这类问题.后来在编写程序的练习中对于中断的开关也出现过问题,后来发现不能用BIS_SR(LM0_bits+GIE)这样,不然会导致CI#眠,最好用_ENIT().在程序编写中对于循环的嵌套是个必须要注意的点,很容易出现错误.对于MS430G255眩个板子,它是低功耗的板子,但是IO口太少,对于做一些作品有很大限制XXX学习STM3井我用的是这款板子,它上面有7个GIQ3个ADC5个串口,对于现在的我做一些小作品来说是完全足够了.在学习和使用的过程中对于USART勺使用尤为重要.之前做一个程序同时翻开了串口1和串口2但是串口1接受的数据发送给电脑却不能通过电脑发送给串口2,是由于其中发生了溢出中断,没有清楚OR6导致卡住了.在STM32的学习中要更仔细并多看数据手册,遇到问题也要多在网上询问,这样才能提升自己。
STM32初学者教程STM32是意法半导体(STMicroelectronics)推出的一款32位微控制器系列。
它具有强大的处理能力、丰富的外设和灵活的可编程性,广泛应用于各种领域,如工业控制、汽车电子、物联网设备等。
对于初学者来说,掌握STM32的基础知识和编程技巧是非常重要的。
下面是一份适用于STM32初学者的教程,帮助你快速上手STM32开发。
第一步:了解STM32系列首先,你需要了解STM32系列的基本信息。
该系列微控制器以其精简的体积和低功耗而闻名,有多个型号可供选择。
每个型号都具有不同的处理能力和外设集成。
你可以根据项目需求选择适合的型号。
第二步:搭建开发环境要开始使用STM32,你需要搭建一个适合的开发环境。
首先,你需要一台计算机,并安装STM32开发工具。
STMicroelectronics提供了免费的开发工具STM32CubeIDE,它集成了多个开发工具,如编译器、调试器等。
同时,你还需要购买一块开发板,比如ST官方提供的Discovery系列开发板。
将开发板连接到计算机上,确保能够识别到设备。
第三步:学习基本操作第四步:学习开发工具的使用学习如何使用STM32开发工具是非常重要的。
你需要掌握编译、调试、烧录等操作。
STM32CubeIDE提供了一套强大的调试工具,如单步调试、断点调试等。
你可以利用这些工具来调试你的代码,查找错误。
此外,你还需要学会如何使用外设库函数,这些函数可以简化你的开发过程。
第五步:学习编程技巧掌握编程技巧对于STM32开发来说也是非常重要的。
你可以学习如何使用中断、定时器等功能来优化你的代码。
此外,你还可以学习如何使用DMA来提高数据传输效率。
通过学习这些编程技巧,你可以更好地利用STM32的功能。
第六步:参考文档和教程在学习STM32的过程中,你可以参考一些官方文档和教程。
STMicroelectronics提供了丰富的文档和教程,包括编程手册、应用笔记等。
STM32 学习经验总结
1. 今天把普中开发板上的RS232 芯片烧坏了,所以接下来要完成stlink 的使用,来下载程序,同时也尝试调试程序,也算是被逼的去学一个很有用
的工具,本来我都不想学stlink 的。
2. 先学习一下STM32 的定时器,过程中,加入stlink 的下载和调试。
3. 定时器:STM32 分高级定时器(TIM1 和TIM8),通用定时器(TIM2-5),基本定时器(TIM6,7)。
4. 通用定时器(TIM2-5):1)位于低速APB1 总线上。
2)预分频:将计数器时钟频率降低。
3)各个通用定时器之间是完全独立的。
4)向上计数:从0 到
加载值,其他类似。
5)定时器的时钟来源,可以来源于内部的APB1 时钟倍
频提供,这是时钟来源之一,但是用的比较多,也比较简单。
5. 通用定时器工作过程,只要有印象就可以,在配置的时候知道在配置什幺。
6. 这是时钟的计算方法,其中APB1 的时钟来源于AHB,如果APB1 = AHB,也就是APB1 = 1 * AHB,那幺,此时的CK_INT = APB1,而如果APB1 = AHB / 2,那幺这时候CK_INT = 2 * APB1 的时钟,得到定时器的原始时钟。
1.首先我们先看看与STM32相关的文档我们假定大家已经对STM32的书籍或者文档有一定的理解。
如不理解,请立即阅读STM32的文档,以获取最基本的知识点。
如果你手上拥有ST官方主推的STM32神舟系列的板子,那么光盘都会配好这些文档,STM32的学习与ARM9的学习有一个很大的区别。
ARM9的学习一般是需要购买书籍的。
比如三星的S3C2440,官方的文档都是英文的,大部分工程师只能去看国内出版的书籍。
英文好的同学,请不要以为你很牛,可以只看英文文档。
毕竟你是中国人,你最熟悉的,理解最好的还是中文。
看英文的速度还是比看中文慢一些,我们要的是最短的时间,而不是追求短时间内记住所有细节。
当然,如果是一篇论文,建议看英文原版还是有好处的。
STM32处理器进入国内市场时候,ST官方(或者第三方)的推广工作做的非常好。
翻译了大量的英文文档,迎合了国内的很多工程师的思维。
神舟系列的开发板就是迎合这种中国化,本土化,方便学习和使用;所以现在大部分STM32F103xxx的用户datasheet都有中文版,例子也很齐全,因此可以不用去购买书籍,看电子档即可。
学习的时候,关注两个比较重要的文档:《STM32F103xxx参考手册》,《STM32固件库使用手册》。
该网址,是针对有充足的时间、精力的同学,建议去下载需要查阅的文档,以获取更多信息。
阅读《STM32F103xxx参考手册》,一定要注意,不需要全部阅读——没有时间的。
建议选读,但是前几章必读。
存储器和总线架构、电源控制、备份寄存器、复位和时钟控制,通用和复用功能I/O,中断和时间等等前几章一定要花时间阅读。
后面章节,讲述的是具体的功能模块设计。
如果我们用到哪个模块,就可以去阅读哪个模块。
比如在使用AD的时候,就需要去阅读第10章ADC。
其他不举例。
相信每个初学者都有自己的研究方向和判断。
阅读《STM32固件库使用手册》,主要是为了简化编程。
STM32给我们提供了一个非常好的固件函数库,我们只要去调用即可。
嵌入式STM32入门总结及学习步骤嵌入式STM32是一种广泛应用于工业控制、智能家居、物联网等领域的微控制器,其具有高性能、低功耗、易扩展等优点,因此,了解和掌握STM32的使用是非常重要的。
下面将总结一些嵌入式STM32入门的学习步骤和注意事项。
一、前期准备:1.学习基础知识:了解嵌入式系统的基本原理、C语言、电路理论等相关知识,打好基础。
2.硬件准备:购买一块STM32开发板,推荐选择一款常用的型号,如STM32F103C8T6,该型号适合初学者,价格也相对较低。
二、学习步骤:2.学习STM32的基本概念:了解STM32的体系结构、寄存器的使用方法以及相关的技术文档和参考手册,掌握STM32的各种功能和特性。
3.学习STM32的编程语言:C语言是嵌入式系统开发的常用语言,掌握C语言的基本语法和常用函数,学习如何在STM32上进行编程。
5.学习STM32的外设驱动:STM32具有丰富的外设,如GPIO、USART、SPI、I2C等,学习如何配置和使用这些外设,并编写相应的驱动程序。
6.学习STM32的中断处理:了解STM32中断的原理和应用,学习如何配置和处理中断,掌握中断的优先级、触发条件和响应机制。
7. 学习调试技巧:熟悉使用调试工具进行程序的单步调试和观察变量的值,学习如何使用printf调试技术输出调试信息。
8. 学习使用RTOS:如果需要进行多任务处理,可以学习使用嵌入式操作系统RTOS(Remote Terminal Operating System),如FreeRTOS、uC/OS等。
9.实践项目应用:通过完成一些小型项目,如LED闪烁、按键控制、温度采集等,巩固所学知识,并不断提升自己的能力。
三、学习注意事项:1.掌握STM32的基础知识和原理:理解STM32的硬件架构和相关的技术概念,了解STM32的外设特性和使用方法,能够灵活运用已学知识解决问题。
2.多实践、多总结:通过实际的项目应用,不断练习和总结,加深对STM32的理解和应用技巧。
STM32基础教程首先,我们来介绍一下STM32的开发环境。
ST公司提供了一套完整的开发工具,称为STM32Cube,它可以支持不同型号的STM32微控制器。
STM32Cube包括了STM32CubeMX和STM32CubeIDE两个主要组成部分。
STM32CubeMX是一款图形化的配置工具,它可以帮助我们生成初始化代码和配置文件,简化了我们的开发过程。
通过STM32CubeMX,我们可以选择我们所需要的外设,例如GPIO、UART、SPI等,并进行相应的配置。
之后,STM32CubeMX会自动生成初始化代码和配置文件,我们只需要将其导入到我们的开发环境中即可。
在开始编写代码之前,我们需要先了解一些STM32的基本知识。
首先,STM32微控制器的核心是ARM Cortex-M内核,它具有低功耗和高性能的特点。
不同型号的STM32微控制器具有不同的内核版本,例如Cortex-M0、Cortex-M3和Cortex-M4等。
其次,STM32微控制器具有丰富的外围设备,包括GPIO、UART、SPI、I2C、定时器、中断控制器等。
这些外围设备可以帮助我们与外部器件进行通信和控制。
最后,我们需要了解STM32的编程模型。
STM32使用寄存器映射的方式来访问外围设备,我们可以通过写入和读取寄存器来控制设备的行为。
为了方便操作,ST公司提供了一套名为标准外设库(StandardPeripheral Library)的软件包,它封装了对STM32外设的底层操作函数。
接下来,让我们以一个LED闪烁的简单例子来演示一下使用STM32的过程。
首先,我们需要使用STM32CubeMX来配置GPIO外设。
我们选择一个GPIO引脚作为输出,将其配置为推挽输出模式,并使能对应的时钟。
然后,我们在STM32CubeIDE中编写应用程序。
我们需要包含相应的头文件,并初始化GPIO外设。
在一个无限循环中,我们将GPIO引脚设置为高电平,延时一段时间,然后设置为低电平,再次延时一段时间。
51、stm32单片机入门的一些经验51单片机作为最经典的一款单片机,已在各大高校的电子、通信专业的入门单片机课程,想学单片机这是最好的入门单片机。
单片机就是一块芯片,如stc89c52、stm32f103zet6、stm32f103zet6等,我们的开发板,由一块单片机和其他的外围电路构成,外围电路就像led、按键,通过写程序控制单片机的管脚输出数字电平0或1,数字电平与模拟电平的区别就在于:数字电平只有两种,相当于正负极,而模拟电压就像电池、交流电,0V~几千伏。
而对于按键就是单片机i/o(输入/输出口)对电平的检测,通过检测,写程序控制验完成相应功能。
还有常见的外围电路,包括数码管、液晶屏、蜂鸣器等。
当然这些就是人机交互的工具,随着进一步的学习,你们就会体会到的。
这里说一下,想学单片机的入门,怎么入门,笔者作为物理专业的学生,可是对单片机比较感兴趣,学习单片机开始就要有兴趣,没有兴趣的话就不建议你去学习了,老铁们。
开始从最简单的单片机学起,不建议直接上手stm32单片机,因为32的单片机资源太多,i/o口的使用,涉及到时钟,初始化等配置,步鄹较多。
对于初学者来讲,容易打消积极性。
首先,你要安装软件:keil 4,它是一个编译软件,自带生成能下载到芯片里的.hex文件,写程序就在这儿写。
protues软件,就是你没有单片机以及外围电路的时候,就用仿真的单片机以及原件.但是不建议使用,因为好的单片机学习者或工作人员,都可以设计一个最小系统,以及想完成特定功能的电路板。
对了,当你学的较好的时候,你就可以学画电路板了,用autium designer 软件。
说到这里推荐你最好这么做:买一块开发板,因为里面有视频资料,有普中科技的,还有郭天祥的开发板,淘宝上都有卖的。
郭天祥的视频一节课时间较长,一般都2小时。
普众科技的视频讲的较为简单。
还有手把手叫你学单片机(金沙滩工作室出品的),视频也不。
现在STM32初学入门,写些关于入门的帮助,也算答谢帮助过我的人.希望象我这样想学STM32的朋友不用迷茫.(本入门只适合低手,高手不要见笑).
1.硬件平台.
现在可以买到学习有的有英蓓特的MCBSTM32 和万利的EK-STM32F,可能目前出来最好的还是的神舟系列开发板,包括神舟I号(103RBT),神舟II号(103VCT),神舟III号(103ZET),神舟iv号(107VCT)几款都有,反正这几个板我都买了,学校出钱买的,还挺实惠,让老板打了个折扣,如果你自己开板做,成本还比这高.学会了才自己做自己的板子吧.
2.软件平台.
现在流行的有Keil MDK 3.15b和IAR EWARM 4.42A. 购买评估板时,里面的光盘已经带了.为什么选这两个平台,用的人多,你以后遇到问题,可以找人解决的机会就大.英蓓特的MCBSTM32用的是Keil MDK平台, 万利的是IAR EWARM.
3.C语言知识
如果想补这推荐一本入门的书C Primer Plus 中文版.这本也是入门的好书.
下载地址:/Soft/UploadSoft/ebook2008/程序开发/c/C Primer Plus(第五版)中文版(PDF).rar
4.ST的数据手册
STM32F10x参考手册看完这个就对STM32的内部有认识.
STM32 Document and library rules 个人认为这个最重要.因为你学会了C语言看例程时.很多如GPIO_SetBits GPIO_ResetBits.很多C语言以外的函数库.这些都是STM32的库文件.
下载地址:/upload/2008/4/1/8ce7857e-3776-4896-989a-7910baa0879c.rar
5.看例程.
如keil MDK 3.15b下的C:/Keil/ARM/Boards/Keil/MCBSTM32 有很多例程.GPIO口,RTC,PWM,USB,CAN等等....你想到的都有例程.
6.多上论坛,呵呵.....有不明问下高手,我也是这样.
只要不断努力,你一定会成功的.。