近5年来,从云计算、大数据到机器学习、AI,各类新潮的技术概念一波~~接一波。html
做为一名好奇心旺盛的软件程序员,每个技术概念流行起来都会去凑凑热闹。程序员
但,在个人技术栈里,一切开发出来的软件都须要经过PC、手机才能进行人机交互。编程
怎么破?搞嵌入式开发!windows
好几年前,一个在搞嵌入式开发的朋友,给我安利了嵌入式开发的知识,因为一直在忙于工做,没有真正的认真接触,直到今年,本身创业,才认真考虑嵌入式是否可以为本身带来新的机遇?机器学习
刚开始,个人朋友推荐了树莓派做为我入门的开发板。ide
树莓派,能够安装操做系统,价格适中,功能完善,几乎就是一台低性能的小电脑,用于熟悉各类引脚功能、把玩经常使用传感器设备很是方便,还能够很是廉价的搭建Linux操做系统,很适合编程初学者搭建Linux开发环境。函数
可是它并不能学习到真正的嵌入式开发的知识。相对PC来讲,它很是便宜,可是作嵌入式产品,它的功耗、体积和价格都过高。工具
向朋友请教后,决定选择一款真正的单片机开发板来学习嵌入式开发。性能
在网上查找资料,了解到目前流行的单片机有学习
其中我选择了STM32。缘由以下:
访问ST公司的官方网站。https://www.st.com
顺便说一下,单片机的更新速度没有软件领域那么快,所以网上的技术资料没有软件方面的多,而且更新速度也不及时,可是碰巧ST公司这两年更新了不少内容,好比STM32CubeMX、STM32CubeProgrammer、STM32CubeIDE的介绍就比较少,ST公司还封装了HAL库(硬件抽象库),把寄存器的操做都封装成了容易使用的函数,因此建议你们尽可能经过官方网站查阅资料。
能够看到,ST公司有不少产品,32位微处理器只是其中一项。STM32即ST公司的32-bit的微处理器(Microprocessor)。
在ST官网上方搜索框直接搜索stm32cubeIDE
STM32CubeIDE is an all-in-one multi-OS development tool, which is part of the STM32Cube software ecosystem.
STM32CubeIDE 基于ECLIPSE™/CDT的多功能的跨平台开发工具,它属于STM32Cube软件体系的一部分。
在学习阶段,只须要使用STM32CubeIDE 就足够了,它包含了配置工具和调试工具。
和软件开发不一样,除了一台电脑,咱们还须要购买单片机。可是一块单片机是不能直接用来学习的,咱们须要购买一块具备一些简单功能而且引出引脚的单片机开发板。
万能的某宝上直接搜索STM32开发板
就能够看到不少不一样型号和价格的开发板,接下来如何选择呢?
单片机自己的价格很便宜,几块到十几块而已,可是开发板的价格差距就很大了,几块到几十块甚至几百块的都有。价格差别主要是开发板的外设功能不一样,有不少板子作了不少接口,所以价格也高,可是咱们在入门学习并不必定用获得,做为入门,我选择的是最小系统板。
最小系统板,就是只包含一些基本的接口,引出引脚,体积小,价格便宜。
可是最小系统板也有好几款,它们的区别主要在于STM32微处理器的型号。
看看官网的图
从图上能够看出,ST公司根据性能、用途把处理器分红了不少型号,其中F0和F1系列是比较适合入门学习的,这也是为何某宝上搜索STM32开发板 F0和F1比较多的缘由,其中F103C8T6这个型号是最多的,由于它的性能和功能足够丰富,彻底知足用于学习,其中一款代号“BluePill”的开发板很好用,价格也便宜。
BluePill开发板长这样,对比着买吧,价格大概在12-22不等(新手建议买焊接好针脚的):
买买买,建议买2-3块,根据个人经验,有很小的概率买到有问题的板子,有2-3块板子,若是发现有什么疑问,能够换着试试,检查一下是本身的问题仍是板子的问题,并且做为新手,手上有两三块备用板子,能够放心大胆的玩,不怕玩坏,学习起来更有效率。
除了开发板,咱们还须要采购一些设备才能进行调试和开发。我学习的时候彻底不懂,身边也没人指导,买来一块板子就懵逼了,怎么用,而后一点一点的配齐配件才能动手作实验。
必要配件:
可选配件(初学者不必定会用到,可是想深刻,早晚须要用到):
设备都配置齐全后,就能够开始第一个小实验了。
以BluePill开发板为例,首先接好ST-Link V2,接法很简单,开发板上的TX接ST-Link上的RX、开发板上的RX接ST-Link上的TX,开发板的Gnd与ST-Link的Gnd想接,Vcc与Vcc相接,而后插在电脑的USB口上。
打开STM32CubeIDE,新建一个工程,导航上会出现一些配置选项。
Eclipse的部分就不赘述了,主要说说STM32库的选择。
不一样型号的处理器,库和配置是不一样的,所以,新建项目以前,STM32CubeIDE会要求选择单片机型号,在搜索框中输入对应的单片机型号,而后在列表里选择肯定。
以后,IDE就会用对应的库初始化项目。
项目建立完成后,在左侧文件窗口点开 .ioc文件
这个文件很是重要,在ST公司推出CubeMX以前,作初始化是很麻烦的事情,用任何引脚、配置时钟、中断使能、串口配置等都须要编写初始化代码。如今,CubeMX把这些工做都作成了可视化配置,而且CubeIDE里集成了CubeMX的这个功能。
经过可视化的配置,STM32CubeIDE生成了标准的初始化代码,相似下图
在生成的main.c文件中,能够看到不少注释。要注意,这些注释可不是多余的,都颇有用。为何呢?由于,修改.ioc文件会提示是否从新生成main.c文件,通常状况下确定是须要从新生成的,否则修改的配置不会生效,那么以前若是已经在main.c写的代码怎么办?会被覆盖掉吗?会,除非,你的代码是写在
/* USER CODE BEGIN xxxxx */ /* USER CODE END xxxxxx */
之间,全部不在相似 USER CODE BEGIN 和END 之间的代码,都会被覆盖掉。
STM32CubeIDE生成的main.c留出了不少写用户代码的位置,而且经过注释引导你写在正确的位置。
接下来写一个简单的试验性代码,让BluePill上的PinC13的灯闪起来
首先在打开ioc文件,配置pc13为输出引脚
保存配置从新生成main.c文件
而后在主循环while中添加代码,
while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ //设置C组13引脚为低电平 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); //延时200ms HAL_Delay(200); //设置C组13引脚为高电平 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); //延时200ms HAL_Delay(200); } /* USER CODE END 3 */
OK,一个简单的闪灯程序就完成了。
还记得以前让用ST-link接入,并插在电脑上吗?立刻要用到它了。
打开Debug配置
刚才介绍的是SWD的接线方式,因此这里选择SWD接口
接线正常的状况下,点击Debug按钮,程序就能自动烧写到开发板的单片机里并运行了。
这时候,你应该可以看到BluePill上的小绿等快速的闪烁。
到这里,就差很少介绍完了,可是单片机的知识面很是庞杂,相比起来,本篇文章十分粗浅,冰山一角,我只是从一个软件程序员的角度去介绍它,想经过本文让想学习STM32单片机开发的新同窗看到一个相对完整的从0到第一个闪灯实验的过程,依此概览单片机学习和开发的轮廓。
单片机的开发须要耐心的学习不少基础知识,有兴趣的同窗能够留言一块儿学习!