之前的系列教程都是基于Arduino的,但是公司招聘51和stm32的开发还是多些,所以特别开了一个stm32的系列。这个系列特点是注重了
Arduino编程思维和习惯下向STM32开发的过渡
。前期没有涉及到太多寄存器相关的知识,利用HAL库和STM32CubeIDE快速入手STM32的数字输入/输出、模拟输入/输出及相关简单的项目应用,计划每个小的项目渗透一点相关的寄存器知识,潜移默化的过渡到底层硬件开发。并选用了麻雀虽小但五脏俱全且价格及其亲民的十元左右的BULLPILL(STM32f103C8T6)。之前Arduino实验中用的外接器件也都可以用到本教程中。从学习难度和硬件购买两方面大大降低了学习门槛。
芯片 | STM32F103C8T6 |
制造商 | ST-Microelectronics |
内核 | Arm Cortex-M3 |
最高时钟频率 | 72MHz |
封装 | LQFP48pins |
FLASH | 64KB |
SRAM | 20KB |
Tips:
1.下图所示的5V引脚和USB口的5V在电路板中是直接连在一起的,他们之间没有任何保护电路,所以不要对USB和5V同时供电。
The +5V pins on this board are directly connected to the +5V pin of the USB connector. There is no protection in place. Do not power this board through USB and an external power supply at the same time.
2.有时候板子的D+引脚的读数不对,造成这个的原因可能是其连接的电阻阻值不对,更换为1.5KΩ即可。
This board may have a wrong value of resistor on the USB D+ pin. Instead of a 1.5kΩ it has either a 10kΩ or 4.7kΩ resistor. This can be solved by replacing the resistor with the right value.
3.这个板子名称源于论坛,灵感来自《骇客帝国》
This board got its name from a forum post at the STM32duino forums and is a reference to the movie The Matrix
STM32 | STLINK V2 |
---|---|
3.3V | 3.3V |
SWDIO | SWDIO |
SWCLK | SWCLK |
GND | GND |
之前做STM32的开发使用的STM32CubeMX+Keil5的方式,其中比较不方便的部分就是Keil其实是需要破解的。开发过程会分段,感觉对新手还是不太友好。前几天看到一个博主做了STM32CubeIDE的教程,照着试了下,直呼真香。手里随便一块板子很快就能实现版在等闪烁。简单、直接、免费~ 而且代码开发还支持代码自动补全~ 再次感叹真香~ 哈哈哈。据说支持第三方插件。
下面这个帖子写的很详细,这个部分没什么难度所以不重复写了。
STM32CubeIDE下载安装教程: 3
Stm32CubeIDE设置补全快捷键和主题:4
https://blog.csdn.net/u014627020/article/details/117444089
第一步:选择”STM32103C8T6“
第二步:在右下方的表格中选中相应的型号
第三步:点击”next“
"PC13"
引脚。在弹出的菜单中选择"GPIO_OutPut"
。这时引脚就会变成绿色。"Project"
—>"Generate Code"
"Yes"
,稍等就可以自动生成全部工程代码。(打开的代码中可以看大main.c
文件中64-99行其实是主函数的入口。其中如图所示,是上面的部分相当于Arduino中的SetUp
,下面的部分相当于Arduino中的loop
。因为已经在上面的cubeMx
中配置好了引脚的状态。所以和Arduino中不同,此处就不需要在SetUp中添加PinMode(D4,OutPut)
这样的语句了。那么控制灯闪烁的代码添加在下面这个while(1)
中就可以了。其实根据c语言中所学的基础,我们可以知道while(1)本身就是条件永远为true的死循环。它一定是一直执行的.
Arduino:digitalWrite
(D4, HIGH);
STM32: HAL_GPIO_WritePin
(GPIOA, GPIO_PIN_13, GPIO_PIN_SET);
GPIOC
,第二个参数为13
,第三个参数为1
.完整写出来就是HAL_GPIO_WritePin`(GPIOC, GPIO_PIN_13, 1);
HAL_GPIO_WritePin`(GPIOA, GPIO_PIN_4, 1);
在96-99行插入如下代码:
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,1);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,0);
HAL_Delay(1000);
按照之前的连线接好STLINK和bluePill。将STLINK插入电脑的USB口。点击下图所示的绿色运行按钮。
此时需要将开发板上的跳线更改为运行模式,就可以看到板载PC13灯开始闪烁了。(有时候也不用,,,如果你下载了发现没变化可以改变跳帽试试。新手,,这个地方不太能解释清楚。)
tips 下载的时候编译器可能会弹出下图所示的界面。此时需要更新你的STLINK。方法是第一步线点击Open in update mode
,这时下方标号2所示的位置就会显示你的下载器相关信息。点击标号3所示的upgrade
。开始更新。更新完后就能正常进入下载模式了。
其实这个教程就是简单的展示了下如何利用HAL库提供的函数快速在STM32板子上点亮一个小灯。因为不涉及到复杂的参数设置,所以CubeMX里面的相应设置比较少。整个过程和Arduino开发比起来稍显复杂,但是基本思路是相同的。Arduino中因为都是直接选择开发板,所以不用配置CubeMX中的相关信息。其实CubeMX中也可以直接选择开发板。后续会涉及到。
后续计划这个教程都配套录制对应的视频教程来弥补文字教程中可能遗漏的细节。
参考文献
STLINK-V2和STM32连线:
https://freeelectron.ro/installing-st-link-v2-to-flash-stm32-targets-on-linux/ ↩︎
STM32-base:
https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill.html ↩︎
STM32CubeIDE下载安装:
https://blog.csdn.net/Brendon_Tan/article/details/107685044 ↩︎
Stm32CubeIDE设置补全快捷键和主题:
https://blog.csdn.net/u014627020/article/details/117444089 ↩︎
BLUEPill编程和运行模式切换:
https://iotforgeeks.com/program-blue-pill-stm32-directly-with-usb-port/ ↩︎
STM32官方WiKiSTEP by STEP教程https://wiki.stmicroelectronics.cn/stm32mcu/wiki/Category:Getting_started_with_STM32_:_STM32_step_by_step ↩︎