近五年来,从云计算、大数据到机器学习、人工智能,各种新潮的技术概念层出不穷。
作为一个充满好奇心的软件程序员,每当一个技术概念流行时我都会去凑热闹。
然而在我的技术栈中,所有开发的软件都需要PC和手机进行人机交互。
怎么破呢? 从事嵌入式开发!
几年前,一位从事嵌入式开发的朋友给了我嵌入式开发的知识。 由于工作比较忙,并没有真正认真的接触过它。 直到今年我开始自己创业,我才认真考虑嵌入式对我是否有用。 带来新机遇?
选择STM32
一开始,朋友推荐了Raspberry Pi作为我的起始开发板。
树莓派可以安装操作系统。 价格实惠,功能齐全。 它几乎是一台低性能的小型计算机。 对于熟悉各种引脚功能、玩转常用的传感器器件非常方便。 它还可以非常便宜地构建Linux操作系统。 ,非常适合编程初学者搭建Linux开发环境。
但无法学到真正的嵌入式开发知识。 与PC相比,它非常便宜,但对于嵌入式产品来说,它的功耗、尺寸和价格都太高了。
征求了朋友的意见后,我决定选择真正的单片机开发板来学习嵌入式开发。
网上查资料了解到,目前流行的单片机有
其中,我选择了STM32。 原因如下:
我在技术论坛上看到,51虽然很经典,但确实有点过时了。 技术指标和功能不如STM32。 STM32性价比高,功能多,但价格还是很便宜。 最小的系统板比其他微控制器板更好。 非常便宜。 有足够的信息。 不过,我也看到有人批评这些信息过于复杂。 因为STM32确实提供了很多功能,所以要学习的内容自然也多很多。 比如有5个时钟,比51个复杂。完整的IDE和库。 到目前为止,这是我认为STM32最方便的部分,也是我能够真正零基础上手的原因。 官方提供了基于Eclipse的IDE和HAL硬件抽象库(C语言)。 如果你从来没有学过单片机的原理,你可以通过查看HAL库来做一些简单的实验。 (要知道,在大多数51单片机教程中,你需要先学习一些寄存器知识和汇编语言知识,然后才能真正开始)。 大多数单片机的开发环境在Windows下非常方便,但OSX下好用的IDE和调试软件很少,不过ST官方提供了跨平台一体式开发工具。赶快行动吧
访问ST公司官方网站。
顺便说一句,单片机的更新速度没有软件领域快,所以网上的技术资料没有软件那么多,更新速度也不及时。 不过正好ST这两年更新了很多内容,比如STM32CubeMX、STM32CubeProgrammer、STM32CubeIDE等介绍相对较少。 ST还封装了HAL库(硬件抽象库),将寄存器操作封装成简单易用的函数,所以建议大家尝试通过官网查资料。
正如你所看到的,ST有很多产品,32位微处理器只是其中之一。 STM32是ST公司的32位微处理器。
第一步是下载IDE
直接在ST官网上方搜索框搜索stm32cubeIDE
STM32CubeIDE是一款一体化多操作系统开发工具,是STM32Cube软件生态系统的一部分。
STM32CubeIDE是基于ECLIPSE™/CDT的多功能跨平台开发工具,是STM32Cube软件系统的一部分。
在学习阶段,使用STM32CubeIDE就足够了,其中包括配置工具和调试工具。
第二步选择开发板
与软件开发不同,除了电脑之外,我们还需要购买单片机。 但微控制器不能直接用于学习。 我们需要购买一块具有一些简单功能和引脚的单片机开发板。
如果直接在万能网站搜索STM32开发板,可以看到很多不同型号、不同价格的开发板。 接下来如何选择?
单片机本身的价格很便宜,从几元到十几元不等,但开发板的价格差距却很大,从几元到几十元甚至几百元不等。 价格差异主要是由于开发板的外围功能不同。 板子很多,接口也很多,所以价格也很高,但是我们学习的时候不一定会用到。 首先,我选择了最小的系统板。
最小的系统板仅包含一些基本的接口和引脚,体积小,价格便宜。
不过,最小系统板有多种,它们的差异主要在于STM32微处理器的型号。
看看官网的图片
从图中可以看出,ST公司根据性能和用途将处理器分为多种型号。 其中F0和F1系列比较适合入门学习。 这就是为什么在某网站上搜索STM32开发板F0和F1的次数很多。 其中F103C8T6型号最受欢迎,因为它的性能和功能足够丰富,完全可以满足学习的要求。 其中一款代号为“BluePill”的开发板非常好用,而且价格便宜。
BluePill 开发板如下所示。 我们来比较一下,然后购买。 价格12元到22元不等(建议新手买带焊脚的):
买,买,买。 建议购买2-3块板。 根据我的经验,买到有缺陷的板子的可能性很小。 有2-3块板。 如果您发现任何疑问,可以尝试另一台并检查。 我的问题依然是板子的问题,而作为新手,我手头有两三块备用板子,可以放心大胆地玩,不用担心玩不好,学习效率更高。
第三步,购买配件
除了开发板之外,我们还需要购买一些设备用于调试和开发。 当我学习的时候,我没有任何想法,周围也没有人指导我。 我买了一块板,但不知道如何使用它。 然后我必须一点一点地组装配件才能开始实验。
必要配件:
ST-Link V2用于编程程序:编写好的程序安装到单片机的工具面包板中:方便连接电路进行实验。 杜邦线:连接电路所必需,公头、母头、母头。 买一些mini USB电源和线(一般安卓手机充电器和线就够了)
可选配件(初学者不一定会用,但如果想深入的话迟早会需要):
各种传感器:除了控制开发板上的小灯之外,如果能用传感器来做实验,那就很有趣了。 发光二极管:和传感器有类似的功能,都是为了实验方便。电阻:很多发光二极管的额定电压和电流很低,需要电阻的组合。 USB TTL传输:另一种编程方式。 另外,在电脑上调试串口时,会用到焊接设备。 第四步,编写程序。
设备完全配置完毕后,就可以开始第一个小实验了。
以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已经将所有这些任务都变成了可视化配置,并且CubeMX的这一功能已集成到CubeIDE中。
通过可视化配置,STM32CubeIDE生成标准初始化代码,类似下图
在生成的main.c文件中,可以看到很多注释。 请注意,这些注释并不多余,而且很有用。 为什么? 因为,修改.ioc文件会提示是否重新生成main.c文件。 一般必须重新生成,否则修改的配置不会生效。 那么如果之前代码已经写在main.c中又如何呢? 它会被覆盖吗?是的,除非,你的代码是用
/* USER CODE BEGIN xxxxx */
/* USER CODE END xxxxxx */
所有不在 USER CODE BEGIN 和 END 之间的代码都将被覆盖。
STM32CubeIDE生成的main.c为编写用户代码留下了很大的空间,并使用注释指导您将其编写在正确的位置。
接下来,编写一个简单的实验代码,使 PinC13 在 BluePill flash 上点亮。
首先打开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连接并插入电脑吗? 我们很快就会需要它。
打开调试配置
刚才介绍的是SWD接线方式,所以这里选择SWD接口。
当接线正常后,点击调试按钮,程序会自动烧写到开发板的单片机中并运行。
这时,你应该可以看到BluePill上的小绿灯快速闪烁。
到这里,介绍就差不多完成了,但是关于单片机的知识却非常复杂。 相比之下,这篇文章很肤浅,只是冰山一角。 我只是从一个软件程序员的角度来介绍一下。 希望通过这篇文章,让想要学习STM32单片机的人能够更多地了解STM32单片机。 开发中的新同学可以看到从0到第一次烧写实验的一个比较完整的过程,大致了解单片机学习和开发的轮廓。
单片机的开发需要耐心学习很多基础知识。 有兴趣的同学可以留言一起学习!