单片机编程:从点亮LED开始

2019-04-19 11:47:32 57点赞 263收藏 22评论

创作立场声明:本文仅作学习交流用途。如有错误,烦请指出,将不胜感激。

能点开这篇文章,想必对单片机不至于一无所知。

所谓单片机,也就是单片微型计算机。可以做一些简单的控制、显示、计算等,配合一些传感器、蓝牙、电机等模块还可以做非常多的东西。电子发烧爱好者如果想做一些小创造,或者本科生需要做一些简单的控制,用单片机是非常方便的。

单片机编程:从点亮LED开始

常用单片机有Arduino单片机、51单片机、STM32单片机。

一般说来,在性能方面STM32>51>Arduino,在价格方面STM32<51

本专栏就是STM32的入门指南。如无意外会一直更新,评论开放,随时可以一起讨论。

笔者非电气相关专业,仅爱好者,也是非常非常新的新手。

如有错误,请指出!我会十分感谢您的指点!

单片机编程:从点亮LED开始

硬件和知识需求

  1. C语言编程知识

  2. 最基础的数字电路模拟电路知识

  3. 一块STM32开发板(本文采用的是STM32F407 YS-F4Pro开发板)

  4. 一根配套数据线,用来连接电脑和单片机

  5. 一台电脑

  6. LED灯,面包板,杜邦线(非必需)

软件需求

本文采用的是64位Windows10系统电脑,使用软件包括STM32CubeMX、IAR。除了IAR,Keil4、Keil5也是可以的,不过更推荐IAR。需要下载链接、破解方法和配置方法的可私聊。

Keil5图标显示似乎出了些问题= =Keil5图标显示似乎出了些问题= =

这里简要介绍下STM32CubeMX,这是个不大的免费图形化编程程序,它可以在图形化的基础上,生成初始化代码,提供项目给不同的IDE软件,包括但不限于IAR和Keil。非常好用。

STM32编程有三种语言,我们这里采用C语言:

  • 汇编语言

  • C语言(最常用)

  • C++语言

C语言也有不同的方法,寄存器编程、标准库编程和HAL库编程。寄存器编程类似汇编语言,效率高,但繁琐,复杂程序里很麻烦,而标准库是老东西了,已经不维护不更新了,现在官方推广的是HAL库。我这用的也是HAL库。

配置流程

分三步走:

  1. STM32CubeMX软件生成初始化程序

  2. 在IAR或者Keil中打开初始化程序进行编辑,然后仿真下载程序,也就是俗称的烧写程序到芯片

  3. 连接超简单的硬件电路,单片机GPIO口---LED---单片机GND口,最后调试!开亮!要有光!

简陋到一定地步的电路简陋到一定地步的电路

配置STM32CubeMX

图形化编程真的很happy啊。

首先我们打开软件,点击New Project,也就是新建一个项目。

单片机编程:从点亮LED开始

出现CPU芯片和开发板型号选择界面,这个界面可以搜索得到自己的芯片。

我们在图左侧直接输入自己的芯片,我这里用的是STM32F407IG。

也可以用下面的选项卡,一步步选择自己的芯片型号。

单片机编程:从点亮LED开始

右边会显示搜索结果,鼠标点击选择自己的芯片,如图,笔者的芯片是第二行的,已选择。

再点击Start Project:

点击Datasheet会有芯片信息的PDF点击Datasheet会有芯片信息的PDF这时我们就正式新建了项目了。

简单介绍下此时的界面:

右边红色部分是各种引脚类型设置,默认都是disable,需要的时候再设置。比如说我设置RCC时钟,就要点击RCC,然后选择相应的设置。

蓝色部分就是芯片的各引脚了,黄色引脚是电源引脚,比如VCC之类的,灰色的是没设置过的引脚,浅绿色是特殊功能引脚。如果要设置,直接鼠标左键选择引脚,然后选择设置成不同类型。

黑色部分是不同配置表,我们需要配置前三个表。第四个表是功率计算,一般不需要。

单片机编程:从点亮LED开始

配置pinout表

首先选择自己的需要的输出引脚,用来输出高电平给LED灯。这个界面可以通过鼠标滚轮来放大缩小,按住滚轮或者同时按鼠标左右键来移动图形。

我这里选择的是PE6、PE5和PH9,左键点击之后选择GPIO_Output。也就是普通输出口。

选择之后会变成图2

单片机编程:从点亮LED开始

单片机编程:从点亮LED开始

然后对右边的栏进行设置。如下图。

打开RCC设置,选择外部晶振Crystal/Ceramic Resonator。观察仔细的同学可能就注意到了,此时右边PH0,PH1变成了绿色,不要慌,这是正常的。这俩是接外部晶振的。这里的外部是相对于芯片的外部,不是板子外部,这个东西依然是在开发板的板子上的。

打开SYS设置,点击Debug,选择Serial Wire。这个是用ST-Link仿真调试的时候需要选。

插一句题外话,芯片内部有内置时钟的,但大量工程师经验证明芯片内部的并不够可靠,所以一般STM32工控板都会在芯片之外,加一个精度更高的外部晶振。

单片机编程:从点亮LED开始

外部晶振的频率需自己查询工控板的开发板手册得知,我的截图来自开发板主板原理图,资料可以通过联系商家或者开发工程师获取。

单片机编程:从点亮LED开始

查询资料可知我这里的是外部输入频率8MHz,然后同样查询可知这个芯片的最大频率是128MHz。

记住这两个数字!

配置Clock Configuration表

然后我们在界面左上方,选择Clock Configuration时钟配置表。

按照图片里的数字顺序进行配置。

单片机编程:从点亮LED开始

另外,假如你的外部晶振不是8MHz的话,配置流程一样,但是输入数字不一样,数字需要自己另外计算。

首先你要得到图里黄色部分的最大频率,你的目的就是要让输入的频率,经过一系列乘除操作之后,在黄色部分的结果等于此处的最大频率。

第一个黄色部分的频率也就是芯片最大频率,我这里是168MHz。

右边两个黄色部分的最大频率,软件已经用绿色字体写出。

然后你再进行简单的乘除运算就好。例如我这里的流程是:

8 /8 *336 /2 =168

这里除以8是为了让得数为1

168 /1 /4 = 42

168 /1 /2 = 82

这么一套流程下来,我们就配置好了第二个表。

一般来说,这个地方,大部分简单程序都是这样配置的。记住这套操作就行。

单片机编程:从点亮LED开始

配置Configuration表

现在打开第三个配置表:Configuration配置

单片机编程:从点亮LED开始

左边一般来说不用管。

右边会有自己需要配置的东西。

我们点亮智慧的LED灯只需要配置GPIO口就好。

所以点击上图里的红色按钮,弹出界面,按照下图配置每一行:

单片机编程:从点亮LED开始

我选择了三个引脚做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,按照图里的顺序进行设置。

单片机编程:从点亮LED开始

第一个蓝色圈是项目名,第二个红色的是项目保存路径。

第三个黑色的就比较重要了!如果你后续用IAR,这里请选择EWARM,用Keil 4就MDK-ARM V4、用Keil 5就MDK-ARM V5,其他软件的话自己百度一下。

上图里的Linker Settings是堆和栈的选择,一般默认就好。

接下来在相同页面选择Code Generator,然后勾选一下图里第二个红线圈的选项。

其他保持默认就行。

单片机编程:从点亮LED开始

激动人心的一步来了。

还是选择菜单栏的Project,点击Generate Code,就生产了初始化程序!

如果需要的话,点击Generate Report,会产生一个说明的PDF文档。

单片机编程:从点亮LED开始

至此初始化程序,大功告成!!!

单片机编程:从点亮LED开始

之后的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窗口看门狗

  • 单片机编程:从点亮LED开始


展开 收起

电动车汽车防丢自行车定位器防丢汽车跟踪器适用于平替苹果airtag防丢免充电防丢迷你汽车辆运动定位器

电动车汽车防丢自行车定位器防丢汽车跟踪器适用于平替苹果airtag防丢免充电防丢迷你汽车辆运动定位器

15.6元起

苹果airtag防丢防丢定位器钥匙定卫器宠物定位平替追踪自行车定位gps苹果定位儿童老人定位器findmy

苹果airtag防丢防丢定位器钥匙定卫器宠物定位平替追踪自行车定位gps苹果定位儿童老人定位器findmy

14.8元起

MUZHTEN 慕单 airtag ios蓝牙防丢定位器

MUZHTEN 慕单 airtag ios蓝牙防丢定位器

20.6元起

iFLYTEK 科大讯飞 翻译机4.0 黑色

iFLYTEK 科大讯飞 翻译机4.0 黑色

2690元起

DDLMI 当当狸 智能五子棋

DDLMI 当当狸 智能五子棋

139元起

watchbond 适用华为GT4表带GT3米兰尼斯watch4手表3pro磁吸watchgt4新pronew智能B6环7荣耀magic钛金属夏天钢2e男款陶瓷

watchbond 适用华为GT4表带GT3米兰尼斯watch4手表3pro磁吸watchgt4新pronew智能B6环7荣耀magic钛金属夏天钢2e男款陶瓷

19.43元起

小米智能中枢网关 智能家居联动 无线控制 蓝牙Mesh网关 网关智能本地联动网关 小米中枢网关+3米网线

小米智能中枢网关 智能家居联动 无线控制 蓝牙Mesh网关 网关智能本地联动网关 小米中枢网关+3米网线

315元起

SAMSUNG 三星 Galaxy系列 Galaxy Ring 智能戒指

SAMSUNG 三星 Galaxy系列 Galaxy Ring 智能戒指

2699元起

Apple 苹果 AirTag 智能跟踪器

Apple 苹果 AirTag 智能跟踪器

199元起

MOMAX摩米士airtag定位器双模防丢适用于苹果安卓华为追踪器自行车物品gps定位跟踪订位器钥匙apple

MOMAX摩米士airtag定位器双模防丢适用于苹果安卓华为追踪器自行车物品gps定位跟踪订位器钥匙apple

79元起

大疆 DJl Power 无线连接模块 DJl Power 1000 配件 大疆户外电源配件 DJl Power 无线连接模块

大疆 DJl Power 无线连接模块 DJl Power 1000 配件 大疆户外电源配件 DJl Power 无线连接模块

149元起

三星(SAMSUNG)Galaxy SmartTag+Plus 蓝牙智能家居配件跟踪器附件定位器 升级款SmartTag 一键式便利 AR发现 蓝 升级款SmartTag 一键式便利 ARB

三星(SAMSUNG)Galaxy SmartTag+Plus 蓝牙智能家居配件跟踪器附件定位器 升级款SmartTag 一键式便利 AR发现 蓝 升级款SmartTag 一键式便利 ARB

818元起

Alcorrect 准儿 翻译机pro 多国离线翻译

Alcorrect 准儿 翻译机pro 多国离线翻译

暂无报价

九号(Ninebot)LINEFRIENDS联名布朗熊可妮兔头盔亲子礼盒成人儿童电动车帽 莎莉鸡儿童款

九号(Ninebot)LINEFRIENDS联名布朗熊可妮兔头盔亲子礼盒成人儿童电动车帽 莎莉鸡儿童款

179元起

watchbond 适用COROS高驰手表PACE3限量PACE2一体尼龙表带智能APEX2 PRO运动腕带基普乔格透气男女22织物夏配件

watchbond 适用COROS高驰手表PACE3限量PACE2一体尼龙表带智能APEX2 PRO运动腕带基普乔格透气男女22织物夏配件

21.2元起

冉物智能防丢器Air车钥匙扣定位器追踪防走丢走失钱包适用于苹果

冉物智能防丢器Air车钥匙扣定位器追踪防走丢走失钱包适用于苹果

85元起
22评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
263
扫一下,分享更方便,购买更轻松