单片机编程:从点亮LED开始
创作立场声明:本文仅作学习交流用途。如有错误,烦请指出,将不胜感激。
能点开这篇文章,想必对单片机不至于一无所知。
所谓单片机,也就是单片微型计算机。可以做一些简单的控制、显示、计算等,配合一些传感器、蓝牙、电机等模块还可以做非常多的东西。电子发烧爱好者如果想做一些小创造,或者本科生需要做一些简单的控制,用单片机是非常方便的。
常用单片机有Arduino单片机、51单片机、STM32单片机。
一般说来,在性能方面STM32>51>Arduino,在价格方面STM32<51
本专栏就是STM32的入门指南。如无意外会一直更新,评论开放,随时可以一起讨论。
笔者非电气相关专业,仅爱好者,也是非常非常新的新手。
如有错误,请指出!我会十分感谢您的指点!
硬件和知识需求
C语言编程知识
最基础的数字电路模拟电路知识
一块STM32开发板(本文采用的是STM32F407 YS-F4Pro开发板)
一根配套数据线,用来连接电脑和单片机
一台电脑
LED灯,面包板,杜邦线(非必需)
软件需求
本文采用的是64位Windows10系统电脑,使用软件包括STM32CubeMX、IAR。除了IAR,Keil4、Keil5也是可以的,不过更推荐IAR。需要下载链接、破解方法和配置方法的可私聊。
这里简要介绍下STM32CubeMX,这是个不大的免费图形化编程程序,它可以在图形化的基础上,生成初始化代码,提供项目给不同的IDE软件,包括但不限于IAR和Keil。非常好用。
STM32编程有三种语言,我们这里采用C语言:
汇编语言
C语言(最常用)
C++语言
C语言也有不同的方法,寄存器编程、标准库编程和HAL库编程。寄存器编程类似汇编语言,效率高,但繁琐,复杂程序里很麻烦,而标准库是老东西了,已经不维护不更新了,现在官方推广的是HAL库。我这用的也是HAL库。
配置流程
分三步走:
STM32CubeMX软件生成初始化程序
在IAR或者Keil中打开初始化程序进行编辑,然后仿真下载程序,也就是俗称的烧写程序到芯片
连接超简单的硬件电路,单片机GPIO口---LED---单片机GND口,最后调试!开亮!要有光!
配置STM32CubeMX
图形化编程真的很happy啊。
首先我们打开软件,点击New Project,也就是新建一个项目。
出现CPU芯片和开发板型号选择界面,这个界面可以搜索得到自己的芯片。
我们在图左侧直接输入自己的芯片,我这里用的是STM32F407IG。
也可以用下面的选项卡,一步步选择自己的芯片型号。
右边会显示搜索结果,鼠标点击选择自己的芯片,如图,笔者的芯片是第二行的,已选择。
再点击Start Project:
点击Datasheet会有芯片信息的PDF这时我们就正式新建了项目了。
简单介绍下此时的界面:
右边红色部分是各种引脚类型设置,默认都是disable,需要的时候再设置。比如说我设置RCC时钟,就要点击RCC,然后选择相应的设置。
蓝色部分就是芯片的各引脚了,黄色引脚是电源引脚,比如VCC之类的,灰色的是没设置过的引脚,浅绿色是特殊功能引脚。如果要设置,直接鼠标左键选择引脚,然后选择设置成不同类型。
黑色部分是不同配置表,我们需要配置前三个表。第四个表是功率计算,一般不需要。
配置pinout表
首先选择自己的需要的输出引脚,用来输出高电平给LED灯。这个界面可以通过鼠标滚轮来放大缩小,按住滚轮或者同时按鼠标左右键来移动图形。
我这里选择的是PE6、PE5和PH9,左键点击之后选择GPIO_Output。也就是普通输出口。
选择之后会变成图2
然后对右边的栏进行设置。如下图。
打开RCC设置,选择外部晶振Crystal/Ceramic Resonator。观察仔细的同学可能就注意到了,此时右边PH0,PH1变成了绿色,不要慌,这是正常的。这俩是接外部晶振的。这里的外部是相对于芯片的外部,不是板子外部,这个东西依然是在开发板的板子上的。
打开SYS设置,点击Debug,选择Serial Wire。这个是用ST-Link仿真调试的时候需要选。
插一句题外话,芯片内部有内置时钟的,但大量工程师经验证明芯片内部的并不够可靠,所以一般STM32工控板都会在芯片之外,加一个精度更高的外部晶振。
外部晶振的频率需自己查询工控板的开发板手册得知,我的截图来自开发板主板原理图,资料可以通过联系商家或者开发工程师获取。
查询资料可知我这里的是外部输入频率8MHz,然后同样查询可知这个芯片的最大频率是128MHz。
记住这两个数字!
配置Clock Configuration表
然后我们在界面左上方,选择Clock Configuration时钟配置表。
按照图片里的数字顺序进行配置。
另外,假如你的外部晶振不是8MHz的话,配置流程一样,但是输入数字不一样,数字需要自己另外计算。
首先你要得到图里黄色部分的最大频率,你的目的就是要让输入的频率,经过一系列乘除操作之后,在黄色部分的结果等于此处的最大频率。
第一个黄色部分的频率也就是芯片最大频率,我这里是168MHz。
右边两个黄色部分的最大频率,软件已经用绿色字体写出。
然后你再进行简单的乘除运算就好。例如我这里的流程是:
8 /8 *336 /2 =168
这里除以8是为了让得数为1
168 /1 /4 = 42
168 /1 /2 = 82
这么一套流程下来,我们就配置好了第二个表。
一般来说,这个地方,大部分简单程序都是这样配置的。记住这套操作就行。
配置Configuration表
现在打开第三个配置表:Configuration配置
左边一般来说不用管。
右边会有自己需要配置的东西。
我们点亮智慧的LED灯只需要配置GPIO口就好。
所以点击上图里的红色按钮,弹出界面,按照下图配置每一行:
我选择了三个引脚做GPIO口输出,所以这里就有三行,分别对应PE5、PE6、PH9三个引脚。
选择一行或多行,可以看到配置的具体选项。
逐一说明一下:
GPIO output level:这个很简单,High就是高电平输出,Low就是低电平输出。
GPIOmode:选择Output Push Pull 我们一般用这个3.3V输出且有电流。
GPIO Pull-Up Pull-Down:一般做输入口的时候才配置。所以我们选择No pull-up and no pull-down,就是啥都不要。
Maximum output speed:根据需要选择高中低最高速,低的话功耗低,我们点灯不需要高速,选Low就好
UserLabel:自己随意添加标识Label,到了C语言里就是一个宏定义。
最后点击Apply,配置任务就大功告成!
STM32CubeMX生成初始化工程文件
点击软件界面最左上角的菜单栏Project
然后选择Settings,按照图里的顺序进行设置。
第一个蓝色圈是项目名,第二个红色的是项目保存路径。
第三个黑色的就比较重要了!如果你后续用IAR,这里请选择EWARM,用Keil 4就MDK-ARM V4、用Keil 5就MDK-ARM V5,其他软件的话自己百度一下。
上图里的Linker Settings是堆和栈的选择,一般默认就好。
接下来在相同页面选择Code Generator,然后勾选一下图里第二个红线圈的选项。
其他保持默认就行。
激动人心的一步来了。
还是选择菜单栏的Project,点击Generate Code,就生产了初始化程序!
如果需要的话,点击Generate Report,会产生一个说明的PDF文档。
至此初始化程序,大功告成!!!
之后的IAR和Keil工程配置和程序仿真下载,会在篇2里详细说明。
“我是不会鸽的!”
备注:在STM32CubeMX软件的pinout配置表里,左边栏的各引脚和功能对应关系如下:
MiddleWares:第三方高级应用
Peripherals:
ADC模数转换
DAC数模转换
CAN通信
CRC校验
DCMI摄像头
ETH网络功能
FSMC外部存储器扩展
I2C通信
I2S通信
IWDG独立看门狗
RCC时钟
Crystal/CeramicResonator 晶体/陶瓷谐振器 8MHz的晶振 外部的 很准(内部没那么可靠)
(选择之后PH0 PH1会亮深绿并RCC_OSC_IN RCC_OSC_OUT)(看开发板原理图
LSE低速时钟(需要RTC时要选中)
HSE高速时钟
RNG随机数
RTC实时时钟
SDI读Sd卡
SPI接口
SYS系统相关
ST-Link仿真器的话需要选择Debug:Serial Wire
TIM一共14个定时器
UART串口
WWDG窗口看门狗
![](https://res.smzdm.com/pc/pc_shequ/dist/img/the-end.png)
值友3644960644
校验提示文案
darkengine
校验提示文案
值友3146675020
校验提示文案
lylnk
校验提示文案
greyGun
校验提示文案
云栖隐者
校验提示文案
陈东晖
校验提示文案
猫理沙
校验提示文案
最孤独的黑
校验提示文案
ChipsAhoy
校验提示文案
hackchen
校验提示文案
刘二狗斐讯联壁万家抢
校验提示文案
语蓝
校验提示文案
OoooCCCP
谁会这么财大气粗买个f0+以上系列。
要不430也OK呀。图形化编程完全OK。
校验提示文案
最孤独的黑
校验提示文案
猫理沙
校验提示文案
OoooCCCP
谁会这么财大气粗买个f0+以上系列。
要不430也OK呀。图形化编程完全OK。
校验提示文案
语蓝
校验提示文案
刘二狗斐讯联壁万家抢
校验提示文案
hackchen
校验提示文案
lylnk
校验提示文案
值友3644960644
校验提示文案
值友3146675020
校验提示文案
darkengine
校验提示文案
陈东晖
校验提示文案
云栖隐者
校验提示文案
greyGun
校验提示文案
ChipsAhoy
校验提示文案