历史上的今天
返回首页

历史上的今天

今天是:2025年12月08日(星期一)

正在发生

2022年12月08日 | 10天学会STM32的学习心得总结

2022-12-08 来源:zhihu

01 前言


有读者问,如何系统地入门学习stm32呢?


假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。


我们要考虑的是, 我可以快速用STM32实现什么?为什么使用STM32而不是8051?


是因为51的频率太低,无法满足计算需求?

是51的管脚太少,无法满足众多外设的IO?

是51的功耗太大,电池挺不住?

是51的功能太弱,而你要使用SPI、I2C、ADC、DMA?

是51的内存太小而你要存储的东西太多?

当你需要使用STM32某些功能,而51实现不了的时候, 那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法。


比如要用spi协议的网卡、要使用串口通信、要使用rtos等等...


02 快速上手的学习步骤


我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解,请立即阅读STM32的文档,以获取最基本的知识点。


英文好的同学,请不要以为你很牛,可以只看英文文档。毕竟你是中国人,你最熟悉的,理解最好的还是中文。


看英文的速度还是比看中文慢一些,我们要的是最短的时间,而不是追求短时间内记住所有细节。当然,如果是一篇论文,建议看英文原版还是有好处的。


STM32处理器进入国内市场时候,ST官方(或者第三方)的推广工作做得非常好。翻译了大量的英文文档,迎合了国内的很多工程师的思维。


学习的时候,关注两个比较重要的文档:《STM32F103xxx参考手册》,《STM32固件库使用手册》。


这是针对有充足的时间、精力的同学,建议去下载需要查阅的文档,以获取更多信息。


阅读《STM32F103xxx参考手册》,一定要注意,不需要全部阅读——没有时间的。


建议选读,但是前几章必读。存储器和总线架构、电源控制、备份寄存器、复位和时钟控制,通用和复用功能I/O,中断和时间等等前几章一定要花时间阅读。


后面章节,讲述的是具体的功能模块设计。如果我们用到哪个模块,就可以去阅读哪个模块。


比如在使用AD的时候,就需要去阅读第10章ADC。其他不举例。相信每个初学者都有自己的研究方向和判断。


阅读《STM32固件库使用手册》,主要是为了简化编程。STM32给我们提供了一个非常好的固件函数库,我们只要去调用即可。


这里我主要强调的是,阅读《STM32固件库使用手册》的时候,前面几章也是必须阅读的。比如第一章文档和库规范中的命名规则,编码规则,这些都是需要注意的。


第二章是最关键的,希望大家熟读。


第四章开始之后,就可以根据大家的需要来阅读。实际上,后续的章节,都是描述某个模块有什么什么函数,每个函数如何使用等。


关于后面的章节,建议对GPIO库函数、中断部分库函数、复位和时钟设置的库函数要比较熟悉,因为平时经常会用到。


以上提到的这两个文档,可以从中获取大量的STM32基础知识。


03 设定一个不错的两周入门计划


这里所谓的“入门”,指的是能理解并掌握一些常用的STM32外设,真正想掌握一款处理器,两周根本说明不了什么问题。只能说,你已经有所了解了。但是,这对我们初学者来说已经足够了。


这里所谓的“两周”,根据每个人的时间安排不同而不同。


如果您每天有充足的时间学习,那么可以规定自己尽快地能独立地进行简单的STM32开发。


如果您每天只有业余时间来学习STM32,建议根据您的具体情况安排时间。


毕竟计划时间如果安排太紧,反而收不到良好的效果,只能进入恶性循环,这是我们要避免的。


但是建议,不管您有无充足的时间,都必须给自己做一个计划!


这里列出一个思路,仅供参考。


步骤一:环境搭建,安装完STM32学习的软件,比如J-Link、Keilfor ARM(MDK)、ISP(如果需要从串口下载的话)。


步骤二:搞一个开发板,挑选部分例程的HEX,比如LED灯的例程HEX文件,下载到STM32开发板中,观察运行情况。


实际上,以上两个步骤,是为了熟悉要使用的工具软件而已。属于找感觉的阶段。其实我们还没开始STM32的学习呢!


步骤三:准备几个常用的文档,比如《STM32的用户手册》,《STM32固件库使用手册》等文档。用于平时查阅。


步骤四:开始查看例程的编写,看看例程是如何写的,自己可否修改下例程,达到自己想要的效果呢?


步骤五:RTOS的使用,是否需要试一下?


恭喜你,至此,你已经可以自如进行独立的开发了。最后一步,给自己一个目标(项目),把它实现出来!


再次强调,以上只是一个学习STM32的思路,供大家参考。下面列出了前面关键的步骤,希望大家能尽快入门。


第1步:熟悉调试软件


对初学者来说,我们至少需要的几个软件:J-Link驱动软件、ST-Link驱动、MDK(就是原来的Keil)软件。


该步骤要达到的目标:熟悉调试软件,如烧写HEX出现问题,可简单判别问题所在,并独立解决。


第2步:GPIO编程


这是第一次接触固件库的编程,一定要硬着头皮去了解固件库。建议大家尽量去用固件库。


常见的比如HAL库,LL库等等。


而不是避开固件库自己写代码——这样只能在学习中才会发生。实际的项目中,代码成百上千个,如何一个一个自己写?


使用现成稳定的轮子,才是王者之道。


GPIO本身的编程实际上很简单:


设置GPIO口的引脚为输入或者输出模式。我们在进行点灯代码的时候,一般设置为推挽输出模式。

操作寄存器,往寄存器里置1或者清零操作——这个步骤,固件库已经提供了专门的GPIO_SetBits函数和GPIO_ResetBits函数,我们只要去调用即可实现对IO口的置1和清零。

实现多种花样的LED闪动,使得自己熟悉GPIO的编程过程。

该步骤要达到的目标:熟悉调试软件,如烧写HEX出现问题,可简单判别问题所在,并独立解决。


第3步:开始全新的STM32深入研究


经过以上调试软件的熟悉和GPIO口的编程调试后,相信您已经对STM32有一定的了解。


至少知道如何利用STM32的固件库去写一个代码。


在这个阶段,将要接触到串口编程、TFT液晶屏驱动编程、定时器编程、串行外设接口SPI编程、存储器编程、SD卡与文件系统移植、USB读写、UCOS移植等,有精力还可以研究其他外设。


推荐阅读

史海拾趣

Belden Wire & Cable公司的发展小趣事

随着市场的不断变化和客户需求的多样化,Belden公司开始实施产品多元化战略。除了传统的电线电缆产品外,公司还开发了一系列新型电缆产品,如光纤电缆、数据电缆等。这些新产品不仅拓宽了公司的产品线,还为公司带来了新的增长点。同时,Belden还加大了市场拓展力度,积极参与各类行业展会和论坛,提升品牌影响力。

Global Power Technologies Group公司的发展小趣事
提供稳定的电源电压,避免因电源电压波动影响电路的正常工作。
Heyco公司的发展小趣事

随着全球化趋势的加剧,Heyco开始积极拓展海外市场。公司在欧洲市场取得长足发展的同时,也逐步进入北美和亚太地区。通过在全球各地建立销售网络和生产基地,Heyco实现了产品的全球化生产和销售。这一战略不仅提升了公司的市场份额,还进一步巩固了其在电子工业备品备件销售领域的领先地位。

GWP Group公司的发展小趣事

Heyco非常重视与合作伙伴的关系建设。2021年,Heyco将年度全球最佳分销商称号授予了电子元器件分销商贸泽电子,以表彰其在过去一年中不懈的努力和出色的销售业绩。这一奖项的颁发不仅体现了Heyco对贸泽电子的高度认可,也展示了双方之间深入、愉快的合作关系。通过与贸泽电子等优秀分销商的紧密合作,Heyco能够更好地服务全球客户,满足其多样化的需求。

Data Translation Inc公司的发展小趣事

Data Translation一直以客户为中心,致力于为客户提供优质的产品和服务。公司不断创新产品设计和制造技术,以满足客户对数据采集和处理性能、稳定性、易用性等方面的需求。同时,公司还建立了完善的客户服务体系,为客户提供从产品咨询、选型、安装、调试到售后维护等全方位的服务。这些举措赢得了客户的广泛赞誉和信任,为公司赢得了更多的市场份额和声誉。

Cortina Systems Inc公司的发展小趣事

Data Translation Inc公司成立于1973年,初期专注于数据采集和处理技术的研发。在成立初期,公司就凭借对技术的深刻理解和敏锐的市场洞察力,成功开发了一系列具有创新性的数据采集和处理产品。这些产品不仅满足了当时工业界对高精度、高速度数据采集的需求,还引领了整个行业的发展方向。随着技术的不断进步和市场需求的不断变化,Data Translation不断推出新产品,逐渐确立了其在数据采集和处理领域的领先地位。

问答坊 | AI 解惑

HDTV的完整音视频解决方案

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 HDTV的完整音视频解决方案 不管是受摩尔定律还是消费者需求的推动,当前电视机对性能的要求大幅提升。具有数据处理量是标准清晰度(SD)电视格式 6 倍的1,080像素高清晰度(HD)格式、管理DTV、IP ...…

查看全部问答>

超音频宽频带功率正弦波逆变电源 正弦脉宽调制(SPWM)波的基本要素

                      项目简介                              &n ...…

查看全部问答>

无线监控,你看好么?

曾和一些商家讨论过关于无线监控会不会取代有线监控,或者它会不会在将来成为主流, 很多人都表示无线存在传输不稳定,受距离影响,设备成本高,不知道各位前辈怎么看待这个问题 ?…

查看全部问答>

Windows CE设备驱动程序开发.pdf

Windows CE设备驱动程序开发.pdf…

查看全部问答>

s3c2440 WINCE5.0 关于eboot下载映像原理基础问题,求教

硬件配置64MNAND 1208 每个PAGE 512字节,一个BLOCK有32个PAGES 问题1:wince5.0 LOADER.H中 // NAND Boot (loads into SteppingStone) @ Block 0 #define NBOOT_BLOCK                 ...…

查看全部问答>

c51问题,好心的帮忙解决一下

用c51 语言写带定时器中断控制的C51程序 1、定时器/计数器T0工作在16位定时器方式,使其定时器周期TA最大 2、定时器/计数器T1工作在16位计数器方式,其计数脉冲周期为TA的两倍 3、使P1口的值在0、1间循环变化,其变化的频率为1/100TA。 各位帮 ...…

查看全部问答>

如何做CE程序台式机电脑的仿真版?

看到国外的软件好多都用台式机的仿真器进行软件演示,并且台式机的上运行的程序和CE中的程序无论图标还是界面都几乎完全相同?这种台式机上的仿真程序如何实现?…

查看全部问答>

使用m3s811自带的adc模块测5v电压

使用m3s811自带的adc模块,如何测5v的外部电压呢?adc模块的参考电压是3v哦,最大才能测到3v呢,怎么办?求高手解答,…

查看全部问答>

关于NRF24LE1芯片的使用调试

最近在做一个NRF24LE1的无线模块,,,在看前辈们的程序的时候有些地方不太明白,,不知道你们大家是怎么学习这个芯片的?可否交流一下,,我想用这种芯片组建一个RFid的系统,,但是对于射频那一块的寄存器是怎么选择的和写入数据的是在是费解,, ...…

查看全部问答>