单片机编程:从点亮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窗口看门狗

值友3644960644
校验提示文案
darkengine
校验提示文案
值友3146675020
校验提示文案
lylnk
校验提示文案
greyGun
校验提示文案
云栖隐者
校验提示文案
陈东晖
校验提示文案
猫理沙
校验提示文案
最孤独的黑
校验提示文案
ChipsAhoy
校验提示文案
hackchen
校验提示文案
刘二狗斐讯联壁万家抢
校验提示文案
语蓝
校验提示文案
OoooCCCP
谁会这么财大气粗买个f0+以上系列。
要不430也OK呀。图形化编程完全OK。
校验提示文案
最孤独的黑
校验提示文案
猫理沙
校验提示文案
OoooCCCP
谁会这么财大气粗买个f0+以上系列。
要不430也OK呀。图形化编程完全OK。
校验提示文案
语蓝
校验提示文案
刘二狗斐讯联壁万家抢
校验提示文案
hackchen
校验提示文案
lylnk
校验提示文案
值友3644960644
校验提示文案
值友3146675020
校验提示文案
darkengine
校验提示文案
陈东晖
校验提示文案
云栖隐者
校验提示文案
greyGun
校验提示文案
ChipsAhoy
校验提示文案