单片机编程:从点亮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开始


展开 收起

Ninebot 九号 车载电动充气泵打气筒轮胎压数显 自行车打气筒篮足气球泳圈充气筒 充气宝

Ninebot 九号 车载电动充气泵打气筒轮胎压数显 自行车打气筒篮足气球泳圈充气筒 充气宝

暂无报价

iFLYTEK 科大讯飞 翻译机4.0 黑色

iFLYTEK 科大讯飞 翻译机4.0 黑色

2690元起

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

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

2699元起

MIJIA 米家 9290029051 智能台灯 白色

MIJIA 米家 9290029051 智能台灯 白色

99元起

Apple 苹果 AirTag 智能跟踪器

Apple 苹果 AirTag 智能跟踪器

209元起

慕单airtag平替防丢苹果tag宠物追踪定位器电自行车防盗狗猫咪项圈儿童老人防丢钱包防丢智能防丢定位器

慕单airtag平替防丢苹果tag宠物追踪定位器电自行车防盗狗猫咪项圈儿童老人防丢钱包防丢智能防丢定位器

20.6元起

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

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

15.93元起

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

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

15.6元起

绿联定位器gps防丢器适用苹果迷你跟踪自行车钱包旅行箱书包airtag平替汽车宠物老人防丢失电动车钥匙扣

绿联定位器gps防丢器适用苹果迷你跟踪自行车钱包旅行箱书包airtag平替汽车宠物老人防丢失电动车钥匙扣

45元起

DDLMI 当当狸 智能五子棋

DDLMI 当当狸 智能五子棋

139元起

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

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

315元起

适用小米手环7pro/8pro/9pro表带织回环尼龙弹力替换春夏天透气nfc版智能运动小米手表8pro腕带高山配件

适用小米手环7pro/8pro/9pro表带织回环尼龙弹力替换春夏天透气nfc版智能运动小米手表8pro腕带高山配件

11.57元起

适用小米手环9pro/8pro表带织滑扣回环尼龙弹力透气替换带智能运动小米手环7pro腕带nfc版band手链

适用小米手环9pro/8pro表带织滑扣回环尼龙弹力透气替换带智能运动小米手环7pro腕带nfc版band手链

10.4元起

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

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

2789元起

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

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

85元起

UBTECH 优必选 阿尔法可编程人工智能机器人 AI陪伴人形机器人 教育跳舞儿童Alpha 遥控可对话高科技alpha ebot

UBTECH 优必选 阿尔法可编程人工智能机器人 AI陪伴人形机器人 教育跳舞儿童Alpha 遥控可对话高科技alpha ebot

2999元起
22评论

  • 精彩
  • 最新
  • 点赞,收藏,退出 [紫薯布丁]

    校验提示文案

    提交
    哈哈感谢。

    校验提示文案

    提交
    收起所有回复
  • 上张大妈写代码指日可待 [赞一个]

    校验提示文案

    提交
    嘿嘿嘿是的

    校验提示文案

    提交
    收起所有回复
  • Arduino不是单片机,是开源硬件平台,用的Atmel家的单片机;性能方面一般学校用的入门51性能最低,其他没具体型号不好对比,价格同性能条件下,这仨的确STM32性价比高。。。N年不搞单片机了,还是忍不住来当杠精,好开心~~~ [高兴]

    校验提示文案

    提交
    你说的对,我用词不够严谨了hh

    校验提示文案

    提交
    收起所有回复
  • 觉得arduino好入门

    校验提示文案

    提交
    的确是这样。

    校验提示文案

    提交
    收起所有回复
  • 小姐姐太厉害了! [吐舌] 但是感觉单片机好复杂

    校验提示文案

    提交
    小哥哥更厉害

    校验提示文案

    提交
    收起所有回复
  • 张大妈的技术文章要配合实际应用场景的

    校验提示文案

    提交
    这个有呀。

    校验提示文案

    提交
    收起所有回复
  • 同嵌入式路过

    校验提示文案

    提交
    哈哈,好的~

    校验提示文案

    提交
    收起所有回复
  • 从入门到睡着

    校验提示文案

    提交
  • 纯小白有点这方面需求想入门学习一下,不知道大佬能不能给解惑一下 [喜极而泣]

    校验提示文案

    提交
    我也是,纯小白,软件,硬件都还整不明白那种。可以给我推荐推荐什么书籍,视频,很新手的那种,谢谢。QQ:1377351008

    校验提示文案

    提交
    收起所有回复
  • 价格方面一般是stm32比较高 [观察] 不知道为啥写错了

    校验提示文案

    提交
  • 加个QQ跟你学习一下,我刚入门

    校验提示文案

    提交
  • 这不是一般人能搞定的

    校验提示文案

    提交
  • 加油,我追随lz小姐姐的脚步学习sm单片鸡

    校验提示文案

    提交
  • stm8或者新唐单片机考虑一下 [皱眉]
    谁会这么财大气粗买个f0+以上系列。
    [观察]
    要不430也OK呀。图形化编程完全OK。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

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

相关文章推荐

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