点亮你的第一颗Led灯

news2025/1/12 3:48:34

1、📕前言


该系列文章用于记录个人学习stm32单片机的过程,全文搭配图文解说,零基础的萌新也能读懂,欢迎指导讨论~

2、📦准备材料

2.1、📝硬件材料清单

面包板1块

PWLINK PowerWriter仿真器1个

杜邦线(公对母)2根

发光二极管1只

Stm32F103RCT6的单片机1个

万用表1个

(用于测试电路,非必要)

2.2、📁软件清单

Java

Stm32CubeMX

Keil5

PowerWriter


3、🔌接线

3.1连接仿真器与单片机

        我们在Stm32单片机连接仿真器前,应先分清杜邦线(PWLINK PowerWriter附赠了杜邦线,不用担心没有杜邦线)与之对应的接口。我在下图中用两个红圈圈出了对应的关系,即图中①③⑤⑦⑨(即第一排标号)对应右边上面的四根线(即黄、绿、黑、红、红四根线)

         在PWLINK PowerWriter官方的参考图(下图)中,首先我们可以知道SWCLKSWDIO分别连接单片机的PA14PA13引脚。其次仿真器的TX、RX分别与单片机的RX、TX(RX对TX,TX对RX的顺序)相连接,在Stm32f103系列当中,PA10RX引脚,PA9TX引脚,也就是将TXPA10相连接,将RXPA9相连接,同时将仿真器的5V(电源线)和GND(接地线)与单片机的5V和GND对应相连。

        在我们接线的过程中需要注意的是RX、TX容易接错,所以接完之后可与上面电路图比对,确认无误后再插入USB,下图为接线完成之后的图片。

3.2连接面包板与LED灯

        面包板的同一横线的插孔处于相同电路(电势),我们要使Led与单片机构成回路,则Led灯的管脚的插放位置应如上图所示。若Led的两个管脚处于同一横线,那么Led灯会被短路。同理,我们在接两根杜邦线(公对母)时也需插入在不同横线的插孔当中。

        为了测试是否成功,我们将万能表调至通断档,然后再用电笔去接触杜邦线,如上图中所示可发现Led灯发光,则面包板上构成通路,接线成功。

3.3连接LED灯与单片机

        我们将杜邦线一根接入单片机的GND引脚,另一个杜邦线接入你想要接入的引脚X,本文中在这接入PA5引脚,请一定要记住你接入的引脚X,在下面新建工程和编写代码中都要使用这个引脚X。最终接完后如下图所示。


4、🔧配置软件

4.1配置PowerWriter

         如下图红框中所示,我们在安装好PowerWriter之后,在“选择设备”一栏中,我们选择设备为PWLINK2

         我们在首页中点击“选择芯片”,然后按照下图红框中的操作选中STM32F103xC芯片型号(本文使用的单片机为Stm32f103rct6,而如果你的芯片是Stm32f103c8t6则选择STM32F103x8型号),最后点击确定

        当你选择好后型号后,此时把仿真器插入到电脑上,然后勾选自动连接,接着再刷新设备。如果你已成功连接到设备,PowerWirter会显示目标芯片:已连接,并且仿真器上的红灯会变为蓝灯,如下图所示。


4.2配置Stm32CubeMX

4.2.1网盘安装固件包(离线安装)(个人推荐)

        首先下载安装Stm32CubeMx(文章末尾给出连接),在我们安装完成之后打开Stm32CubeMX,如下图红框中所示,首先点击上方栏中的“Help”,然后选择“Updater Settings

        如下图中所示,我们可以看到“Repository Folder ”此栏,这是存放固件包的仓库。你可以直接在D盘中解压固件包压缩包(资源在文末的百度分享链接当中,如果从官方下载安装往下看),解压后点击BrowseRepository Folder设为如下地址:

D:\STM32Cube\Repository

最后重启STM32CubeMX即可。

        在我们重启之后,再次进入STM32CubeMX,如下图红框中所示,点击“Manage embedded software packages ”。

如下图红框所示,我们首先找到STM32F1系列,然后选择点击展开.

 如下图所示,在展开之后我们可以看到已经成功安装了三个版本的固件包。

4.2.2官方安装固件包 (离线安装)

        假如你要准备从官方下载固件包,如下图所示,首先根据你需要的版本进行下载,然后下载时会提醒你需要邮箱验证下载或者创建账号登入下载(官网有CN站,不用担心网速),跟着官方说明步骤进行下载。

         如下图所示,我们将从官网下载好的压缩包进行解压,然后打开解压后的文件夹,虽然看到的是1.8.0版本的文件夹,但是你不用对此怀疑,因为高版本相当于基础版的增强版,我们只需要将其重命名为实际的版本,然后复制粘贴到存放固件包的仓库。

         最后同上面安装步骤一样,将Repository Folder的路径选择为你存放该固件包的仓库路径,然后重启Stm32CubeMX,重复上面步骤即可看到成功安装。网盘里面的相当于将官方中安装包里的文件夹提取出来,因此两者之中固件包并不存在差异。虽然Stm32cubeMX也提供了在线下载的方式,但我一直没下载成功,所以在这里就不详细讲解了。


5、🏗️新建工程

我们首先打开Stm32CubeMX的首页,找到上方栏中的“File”,选择“New Project”新建一个项目,如下图红框中所示。

        如下图所示,在进入之后我们在搜索栏中输入"STM32F103RCT6"然后回车,然后在搜索结果最左边选择收藏,这样在下次新建工程时在收藏夹中可直接找到,然后我们双击该名称进入到工程当中。

         我们在进入之后能看到单片机模型,当然你可以从模型中直接找到引脚,不过在这里我们使用智能搜索,在搜索栏中输入PA5(请注意,这里对应的是连接LED灯与单片机时的引脚)然后回车,然后PA5引脚就会闪烁提示,如下图所示。

在我们找到PA5引脚之后,单击此引脚然后选择GPIO_Output模式

         首先我们在左侧栏中展开System Core,然后选中GPIO,接着在左边中点击PA5名称,之后就是按照如下图所示配置相关选项。

         来到配置工程的部分,我们首先在上方栏中点击Project Manger,然后点击左侧的Project进行配置工程。在第一栏设置你的项目名称,在这里最好使用英文例如My_LED。在Toolchain/IDE中我们选择MDK_ARM,这样生成的就是keil工程,接着我们取消使用识别到的固件包,因为怕生成失败,这里我们从下载解压的本地固件仓库中进行选择固件包。

        点击左边栏中的Code Generator,我们在上面的选项中勾选添加仅需的文件,然后再将下面第一个选项勾上,即生成C代码和头文件,最后点击上方栏上面的GENERATE CODE即可完成工程。

        当构造工程文件完成时,你可以选择Open Project打开keil工程,当然为了防止以后找不到,在这里我们可以从文件夹中打开,我们返回到Project中可以找到咱们存储工程的路径,然后从文件资源管理器中进入后,接着双击进入MDK-ARM文件夹,最后找到.uvprojx后缀文件并双击进入到keil工程


6、👨‍💻编写代码

我们进入到keil之后,找到左侧第二个文件夹并展开,然后双击main.c文件进入编写代码

         Stm32CubeMX已经帮我们初始好了代码,所以我们只需在特定的地方编写代码即可。我们找到main函数里的while循环,如下图所示,在这编写点亮LED灯的代码。

        查阅Stm32的hal库资料可知在Stm32单片机中HAL_GPIO_WritePin函数控制GPIO的输出,具体解释如下:

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint32_t PinState);
  • GPIOx:GPIO_TypeDef * 类型,是GPIO寄存器类型,参数可选范围是GPIOA~GPIOG。
  • GPIO_Pin:unit16_t类型,是GPIO寄存器的位端口,参数可选范围是GPIO_PIN_0~GPIO_PIN_15。
  • PinState:uint32_t类型,指定要写入选定位的值,参数可选范围是GPIO_PIN_RESET,GPIO_PIN_SET两个值,分别代表低电平、高电平。

         前面知道了LED灯接入的单片机引脚为PA5,所以我们前两个参数传入GPIOAGPIO_PIN_5。如果是简单的点亮一行代码,我们仅需设置为高电平即可,即在while中添加如下代码:

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);

        那么接下来我们要实现进阶的流水灯效果该怎么做呢?首先交替高低电平可以用GPIO_PIN_RESET,GPIO_PIN_SET交替出现,而单片机自身的代码执行时间极短,所以我们还需在其中添加延时,故我们使用HAL_Delay函数实现延时,它的延时时长为传入数字乘以毫秒,即

HAL_Delay(1000)=1秒

故最后我们在while中添加如下代码,并按"Ctrl"+"S"进行保存

	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
    HAL_Delay(500);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
    HAL_Delay(500);


7、🪄烧录

        在烧录时我们需要配置keil软件才能生成Hex文件,在我们keil中上方栏中有个魔术棒符号,点击进入配置。

 

 找到上方栏中的Output选项,然后勾选上"Create HEX File",最后点击OK返回。

我们在配置好之后就可以开始编译代码,找到文件栏上方中第二个按钮"Build"并点击(也可以按"F7"或"Fn"+"F7"),然后无报错之后进行下一步。

 我们返回到PowerWriter首页当中,点击"Program Memory"再选择"添加固件"(添加Hex文件)

         我们进入到文件资源管理器之后在路径输入之前Stm32CubeMX存放工程的路径,然后双击进入到MDK-ARM文件夹当中(忘了可以往前翻翻,和打开keil工程时文件夹一致)

 接着我们双击进入到名字为工程名称的文件夹当中,如下图所示。

 在该文件夹中我们可以找到一个可执行文件(Hex后缀文件),双击该文件进行添加,最后点击确定

 我们找到PowerWriter上方栏中的自动(机器人图标)并点击,操作完成之后可以看到数据已经烧录到缓存区当中了。

烧录之后没现象发生是因为还差最后一步,我们在PowerWriter上方栏找到"复位"并点击,即可观察到LED被成功点亮并实现流水灯效果。

LED流水灯效果展示

当然让LED灯安全停下也是必不可少的步骤,我们返回到PowerWriter当中,然后选择“删除固件",然后再点击"自动"图标即可停下来。


8、🔍参考资料

Powriter官方文档https://docs.powerwriter.com/docs/powerwriter_for_arm/intro

Stm32CubeMX官方下载https://www.st.com/zh/development-tools/stm32cubemx.html#get-softwareStm32CubeMX百度分享https://pan.baidu.com/s/1-j0cK0w_zjEsz7oaHqHyLw?pwd=xz69

Stm32CubeMXF1系列固件库官方下载https://www.st.com/zh/embedded-software/stm32cubef1.html

Stm32CubeMXF1系列固件库百度分享https://pan.baidu.com/s/1sz3tziQzDKZQS96nI_KKwA?pwd=zgj2

PowerWriter下载https://manage-cloud.icworkshop.com/attachment/manage/2022/07/27/205938/PowerWriter_1_3_3_6_installer_exe.zip


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/870489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023/8/12总结

增加了管理员功能点:(管理标签和分类) 另外加了一个转换成pdf的功能 主要是通过wkhtmltopdf实现的,之前看过很多说用adobe的还有其他但是都没成功。 然后就是在学习websocket和协同过滤算法实现,还只是初步了解了这些。…

【C语言】自定义实现strlen函数的3种方法

大家好,我是苏貝,本篇博客带大家了解C语言中自定义实现strlen函数的3种方法,如果大家觉得我写的不错的话,可以给我一个赞👍吗,感谢❤️ 在自定义实现strlen函数之前,我们简单的介绍一下strlen函…

2023 年第八场牛客多校题解

A Alive Fossils 题意:依次举办 n n n 场多校,每场多校有一些出题人。问哪些出题人每场都出题了。 解法:用 set 维护下一直在出题的人即可。 B Bloodline Counter 题意:求 n n n 个点的竞赛图中最大环大小恰好为 k k k 的方…

【国赛清单】2023全国大学生电赛综合测试【总结】

综合测评简介 (1)综合测评是全国大学生电子设计竞赛评审工作中非常重要的一个环节,是“一次竞赛二级评审”工作中全国专家组评审工作的一部分。 (2)测试对象为赛区推荐上报全国评奖的优秀参赛队全体队员,…

找不到资产文件project.assets.json

NuGet 在“obj”文件夹中写入名为 project.assets.json 的文件,.NET SDK 使用该文件来获取有关要传递到编译器的包的信息 。 如果在生成过程中找不到资产文件 project.assets.json,则会发生此错误。 1.执行命令的方式解决 点击工具,分别展开命…

实例 -- Loadrunner实现Android / IOS 手机APP压力测试

随着手机APP用户量的增大,大的手机APP一般都需要进行压力测试,这几天用了Loadrunner 12进行了手机APP的压力测试,整理了下,大家可以参考参考怎样给Andorid / IOS手机APP进行压力测试,以下是操作实例。 先前我的一个帖…

论文浅尝 | CI4MRC:基于因果推断去除机器阅读理解中的名字偏差

笔记整理:朱珈徵,天津大学硕士,研究方向:问答 链接:https://aclanthology.org/2023.findings-acl.812/ 动机 机器阅读理解(Machine Reading Comprehension,MRC)是根据给定的文章回答…

linux 命令- systemctl

systemctl 参数说明 1、使用语法 用法:systemctl [OPTIONS…] {COMMAND} … 2 、参数说明 参数参数说明start立刻启动后面接的unitstop立刻关闭后面接的unitrestart立刻关闭后启动后面接的unit,亦即执行stop再start的意思reload不关闭后面接的unit的…

从零开始实现一个玩具版浏览器渲染引擎

前言 浏览器渲染原理作为前端必须要了解的知识点之一,在面试中经常会被问到。在一些前端书籍或者培训课程里也会经常被提及,比如 MDN 文档中就有渲染原理的相关描述。 作为一名工作多年的前端,我对于渲染原理自然也是了解的,但是…

HCIP学习--BGP1

目录 BGP是什么 AS EGP协议 IGP协议 EGP和IGP的区别 IGP协议追求 EGP协议的追求 BGP协议 BGP的特性 可靠性 可控性强 AS-BY-AS 具有丰富的属性来取代IGP中度量进行选路 默认不被用于负载均衡 不需要周期更新 无类别路径矢量 BGP数据包 Open Keeplive Update…

MIMO-NOMA系统MATLAB仿真实现

非正交多址接入(NOMA)技术可以打破传统的正交多址一个基本资源块由单用户独占的限制,通过在时域和频域的基础上开辟新的功率域维度,在相同的时频资源上通过功率复用技术允许同一个时频资源块由多个用户共享,有效提升了…

树莓派使用 ENC28J60

前言 一些老的、Mini 的 ARM 开发板上没有预留网口,这样在调试升级内核或应用程序时很不方便。纵使有串口下载工具,但其速度也是慢地捉急。这种情况下,使用其它接口来扩展出一个网口无疑是一个比较好的方法。 ENC28J60 就是一个使用 SPI 接口…

软件测试基础篇——MySQL

MySQL 1、数据库技术概述 数据库database:存放和管理各种数据的仓库,操作的对象主要是【数据data】,科学的组织和存储数据,高效的获取和处理数据SQL:结构化查询语言,专为**关系型数据库而建立的操作语言&…

LabVIEW开发图像采集和基于颜色的隔离

LabVIEW开发图像采集和基于颜色的隔离 在当今的工业和工厂中,准确性和精度是决定特定行业生产力的两个重要关键点。为了优化生产力,各行各业正在从手动操作转向自动操作和控制。机器人技术在工业过程中的出现为人类提供了机械辅助。机器视觉在工业机器人…

LinuxC编程——线程的同步与互斥

目录 一、同步的概念二、同步机制2.1 信号量2.1.1基础概念2.1.2 函数接口2.1.3 例子 2.2 互斥锁2.2.1 几个概念2.2.2 函数接口2.2.3 练习 2.3 条件变量2.3.1 步骤2.3.2 函数2.3.3 练习 我们知道,一个进中的所有线程共享进程的资源,所以可以通过在进程中定…

【概念篇】文件概述

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! 文件概述 1,文件的概念 狭义上的文件是计算机系统中用于存储和组织数据的一种数据存…

大华智慧园区综合管理平台文件上传漏洞复现(HW0day)

0x01 产品简介 “大华智慧园区综合管理平台”是一款综合管理平台,具备园区运营、资源调配和智能服务等功能。平台意在协助优化园区资源分配,满足多元化的管理需求,同时通过提供智能服务,增强使用体验。 0x02 漏洞概述 大华智慧园…

PowerShell 使用SqlScriptDOM对T-SQL做规则校验

对于数据项目来说,编写Sql是一项基本任务同时也是数量最多的代码。为了统一项目代码规范同时降低Code Review的成本,因此需要通过自动化的方式来进行规则校验。由于本人所在的项目以SQL Server数据库为基础,于是本人决定通过使用SqlScriptDom…

静态库和动态库制作

文章目录 前言一、静态库和动态库介绍1、静态库2、动态库 二、静态库的制作及使用1、准备好源码2、编译源码生成 .o 文件3、制作静态库4、使用静态库 三、动态库的制作及使用1、生成位置无关的 .o 文件2、制作动态库3、使用动态库4、指定动态库路径并使其生效 四、对比1、静态库…

初步制作做一个AI智能工具网站,持续更新

文章目录 介绍AI对话AI绘画AI音视频AI图片处理AI小工具体验 介绍 网页有五大部分:AI对话、AI绘画、AI音视频、AI 图片处理、AI小工具。 AI对话 AI对话是指人工智能技术在模拟人类对话交流方面的应用。通过使用自然语言处理和机器学习算法,AI对话系统可…