STM32CubeIDE + HAL + STM32f103C8T6 系列教程1 ---板载PC13LED闪烁

STM32CubeIDE + HAL + STM32f103C8T6 系列教程1 --- 板载PC13LED闪烁

  • 引言
  • 硬件
    • 关于开发板[^2]
      • 控制器
      • 内置存储器
      • 原理图
    • 硬件连线
      • 硬件连接表
      • 硬件连线图
  • 软件
    • STM32CubeIDE下载及安装
    • Stm32CubeIDE设置补全快捷键和主题
    • 新建一个工程
    • 选择开发板核心芯片型号
    • 设置工程相关参数
    • STM32CubeMX配置
  • 板载灯PC13LED闪烁代码
    • STM32程序和Arduino代码对比
      • 代码大致结构对比
      • 库函数调用对比
    • 闪烁代码
  • 下载代码到开发板
  • 小结

引言

之前的系列教程都是基于Arduino的,但是公司招聘51和stm32的开发还是多些,所以特别开了一个stm32的系列。这个系列特点是注重了Arduino编程思维和习惯下向STM32开发的过渡。前期没有涉及到太多寄存器相关的知识,利用HAL库和STM32CubeIDE快速入手STM32的数字输入/输出、模拟输入/输出及相关简单的项目应用,计划每个小的项目渗透一点相关的寄存器知识,潜移默化的过渡到底层硬件开发。并选用了麻雀虽小但五脏俱全且价格及其亲民的十元左右的BULLPILL(STM32f103C8T6)。之前Arduino实验中用的外接器件也都可以用到本教程中。从学习难度和硬件购买两方面大大降低了学习门槛。

硬件

  • STM32f103C8T6 (BULLPILL) *1块 ----- 未焊引脚十元左右
    在这里插入图片描述
  • STLINK V2 *1 ----- 10元左右1
    在这里插入图片描述

关于开发板2

控制器

芯片STM32F103C8T6
制造商ST-Microelectronics
内核Arm Cortex-M3
最高时钟频率72MHz
封装LQFP48pins

内置存储器

FLASH64KB
SRAM20KB

Tips:
1.下图所示的5V引脚和USB口的5V在电路板中是直接连在一起的,他们之间没有任何保护电路,所以不要对USB和5V同时供电。
The +5V pins on this board are directly connected to the +5V pin of the USB connector. There is no protection in place. Do not power this board through USB and an external power supply at the same time.
在这里插入图片描述
2.有时候板子的D+引脚的读数不对,造成这个的原因可能是其连接的电阻阻值不对,更换为1.5KΩ即可。
This board may have a wrong value of resistor on the USB D+ pin. Instead of a 1.5kΩ it has either a 10kΩ or 4.7kΩ resistor. This can be solved by replacing the resistor with the right value.
3.这个板子名称源于论坛,灵感来自《骇客帝国》
This board got its name from a forum post at the STM32duino forums and is a reference to the movie The Matrix

原理图

在这里插入图片描述

硬件连线

硬件连接表

STM32STLINK V2
3.3V3.3V
SWDIOSWDIO
SWCLKSWCLK
GNDGND

硬件连线图

在这里插入图片描述

软件

之前做STM32的开发使用的STM32CubeMX+Keil5的方式,其中比较不方便的部分就是Keil其实是需要破解的。开发过程会分段,感觉对新手还是不太友好。前几天看到一个博主做了STM32CubeIDE的教程,照着试了下,直呼真香。手里随便一块板子很快就能实现版在等闪烁。简单、直接、免费~ 而且代码开发还支持代码自动补全~ 再次感叹真香~ 哈哈哈。据说支持第三方插件。
在这里插入图片描述

STM32CubeIDE下载及安装

下面这个帖子写的很详细,这个部分没什么难度所以不重复写了。
STM32CubeIDE下载安装教程: 3

Stm32CubeIDE设置补全快捷键和主题

Stm32CubeIDE设置补全快捷键和主题:4
https://blog.csdn.net/u014627020/article/details/117444089

新建一个工程

  • "File"—>"new"—>"STM32Project"
    在这里插入图片描述

选择开发板核心芯片型号

第一步:选择”STM32103C8T6“
第二步:在右下方的表格中选中相应的型号
第三步:点击”next“
在这里插入图片描述

设置工程相关参数

在这里插入图片描述
在这里插入图片描述

STM32CubeMX配置

  • 在显示的芯片图中,鼠标左键点击"PC13"引脚。在弹出的菜单中选择"GPIO_OutPut"。这时引脚就会变成绿色。
    在这里插入图片描述
  • 生成工程代码
    "Project"—>"Generate Code"
    在这里插入图片描述
    在弹出的对画框中点击就"Yes",稍等就可以自动生成全部工程代码。(要知道在07、08年的时候,一个工程文件的建立难倒多少英雄汉呀。。现在竟然这么便捷了
    在这里插入图片描述

板载灯PC13LED闪烁代码

STM32程序和Arduino代码对比

代码大致结构对比

打开的代码中可以看大main.c文件中64-99行其实是主函数的入口。其中如图所示,是上面的部分相当于Arduino中的SetUp,下面的部分相当于Arduino中的loop。因为已经在上面的cubeMx中配置好了引脚的状态。所以和Arduino中不同,此处就不需要在SetUp中添加PinMode(D4,OutPut)这样的语句了。那么控制灯闪烁的代码添加在下面这个while(1)中就可以了其实根据c语言中所学的基础,我们可以知道while(1)本身就是条件永远为true的死循环。它一定是一直执行的.

在这里插入图片描述

库函数调用对比

Arduino:digitalWrite(D4, HIGH);
STM32: HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_SET);

  • 函数名不同
  • 函数传参不同
    本实例中板载灯为PC13,所以第一个参数应该为GPIOC,第二个参数为13,第三个参数为1.完整写出来就是

HAL_GPIO_WritePin`(GPIOC, GPIO_PIN_13, 1);

在这里插入图片描述

  • 同理如果是PA4引脚代码就应该替换为:

HAL_GPIO_WritePin`(GPIOA, GPIO_PIN_4, 1);

闪烁代码

96-99行插入如下代码:

	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,1);
	HAL_Delay(1000);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,0);
	HAL_Delay(1000);

在这里插入图片描述

下载代码到开发板

  • 按照之前的连线接好STLINK和bluePill。将STLINK插入电脑的USB口。点击下图所示的绿色运行按钮。

  • 将bluePill板子上的黄色跳线帽如下图1中方式跳线,并点击下面的Reset按钮,板子进入编程模式56
    在这里插入图片描述

  • 点击工具栏中的绿色小箭头标志进行编译和下载。
    在这里插入图片描述

  • 在弹出的对话框中选择所有默认设置,直接点击OK
    在这里插入图片描述

  • 如下图所示,显示successful就说明下载完成了
    在这里插入图片描述

  • 此时需要将开发板上的跳线更改为运行模式,就可以看到板载PC13灯开始闪烁了。(有时候也不用,,,如果你下载了发现没变化可以改变跳帽试试。新手,,这个地方不太能解释清楚。)

tips 下载的时候编译器可能会弹出下图所示的界面。此时需要更新你的STLINK。方法是第一步线点击Open in update mode,这时下方标号2所示的位置就会显示你的下载器相关信息。点击标号3所示的upgrade。开始更新。更新完后就能正常进入下载模式了。
在这里插入图片描述

小结

其实这个教程就是简单的展示了下如何利用HAL库提供的函数快速在STM32板子上点亮一个小灯。因为不涉及到复杂的参数设置,所以CubeMX里面的相应设置比较少。整个过程和Arduino开发比起来稍显复杂,但是基本思路是相同的。Arduino中因为都是直接选择开发板,所以不用配置CubeMX中的相关信息。其实CubeMX中也可以直接选择开发板。后续会涉及到。
后续计划这个教程都配套录制对应的视频教程来弥补文字教程中可能遗漏的细节。

参考文献


  1. STLINK-V2和STM32连线:
    https://freeelectron.ro/installing-st-link-v2-to-flash-stm32-targets-on-linux/ ↩︎

  2. STM32-base:
    https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill.html ↩︎

  3. STM32CubeIDE下载安装:
    https://blog.csdn.net/Brendon_Tan/article/details/107685044 ↩︎

  4. Stm32CubeIDE设置补全快捷键和主题:
    https://blog.csdn.net/u014627020/article/details/117444089 ↩︎

  5. BLUEPill编程和运行模式切换:
    https://iotforgeeks.com/program-blue-pill-stm32-directly-with-usb-port/ ↩︎

  6. STM32官方WiKiSTEP by STEP教程https://wiki.stmicroelectronics.cn/stm32mcu/wiki/Category:Getting_started_with_STM32_:_STM32_step_by_step ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《程序员面试金典(第6版)》面试题 02.08. 环路检测(哈希法,双指针,检测链表是否有环)

题目描述 给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。若环不存在,请返回 null。 题目传送门:面试题 02.08. 环路检测 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链…

【笔记整理】常见聚类算法

【笔记整理】常见聚类算法 文章目录 【笔记整理】常见聚类算法一、均值偏移 - Mean-shift(★★★★)1、概述 & 图解(“偏心”)2、公式 & 步骤1)基本公式(“偏移量更新圆心”)2&#xff…

4:File类与IO流

文章目录 File类1:引入:2:对文件进行操作3:对目录/文件夹进行操作 IO流1:引入:2:字符输入 / 出流FileReader 与 FileWriter3:用try - catch - finally 处理异常4:几个常见…

【Android-JetpackCompose】13、实战在线课程 App

文章目录 一、BottomNavigation 底部导航1.1 底部导航栏的布局、点击1.2 设置 bottomBar 的颜色1.3 设置顶部 actionBar 的颜色 二、主页 StudyScreen2.1 顶部状态栏2.2 一、BottomNavigation 底部导航 1.1 底部导航栏的布局、点击 首先,构造 NavigationItem 的 d…

c++—断言、异常

一、 断言,主要用于在函数入口处进行参数检查,是否符合参数设置要求; (1)true:继续执行;false:终止运行; (2)特点:在程序运行时才能起…

【20】SCI易中期刊推荐——计算机信息系统工程电子与电气(中科院3区)

💖💖>>>加勒比海带,QQ2479200884<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉…

zookeeper学习笔记

zookeeper Zookeeper 入门概述Zookeeper工作机制特点数据结构应用场景统一命名服务统一配置管理统一集群管理服务器动态上下线软负载均衡 zookeeper安装本地模式安装配置参数解读 Zookeeper 集群操作集群操作集群安装 选举机制节点类型客户端命令行操作命令语法znode 节点数据信…

mysql 是否包含 返回索引 截取字符串

是否包含返回索引 原文链接&#xff1a;https://www.cnblogs.com/shoshana-kong/p/16474175.html 方法1&#xff1a;使用通配符%。 通配符也就是模糊匹配&#xff0c;可以分为前导模糊查询、后导模糊查询和全导匹配查询&#xff0c;适用于查询某个字符串中是否包含另一个模糊…

Redis的全局命令及相关误区

Redis中所说的数据结构是针对key-value中的value而言的。主要的结构包括String、哈希表、列表、集合等等在redis中存在16个库&#xff0c;涉及到后期的集群搭建只能使用0号库最为方便 查看所有键&#xff08;支持通配符&#xff09; keys * keys S*返回当前数据库中的键总数 …

智能出行更安全,亚马逊云科技携手木卫四助汽车客户安全合规出海

木卫四&#xff08;北京&#xff09;科技有限公司在汽车网络安全领域拥有独特专业知识&#xff0c;其融合人工智能算法的安全检测引擎可以不依赖车辆中安装的代理软件&#xff0c;只需几周即可快速部署实施&#xff0c;是汽车网络安全领域的技术领先者。 在亚马逊云科技初创团…

ChatGPT国内镜像站

免费国内镜像推荐&#xff08;超稳定&#xff09; 下面为大家收集了目前国内最稳定流畅的ChatGPT镜像网站 目录 机器人 博弈ai 泰cool辣 道合顺 二狗问答 核桃 WOChat GPT中文站 TomChat 利用ChatGPTMindShow三分钟生成PPT ChatGPT国内镜像是啥 ChatGPT 镜像是指…

大语言模型技术原理

在今天这个时代&#xff0c;人们的工作和生活已经离不开数据访问&#xff0c;而几乎所有平台背后的数据存储和查询都离不开数据库。SQL作为一种数据库的查询和处理语言历史悠久&#xff0c;最早由IBM于上世纪70年代初研究关系数据模型时提出&#xff0c;后续发展为一种广泛使用…

帕累托改进和帕累托最优、卡尔多-希克斯改进

根据目标个数&#xff0c;分为单目标规划&#xff0c;以及多目标规划。多目标的规划是去找折中的解集合&#xff0c;既pareto最优解集合。对优化目标超过3个以上的&#xff0c;称之为超多目标优化问题。 帕累托改进描述的就是在没有人变得不好的前提下让有些人更好的过程。帕累…

C#简单数据结构类和常用泛型结构类

文章目录 1.简单数据结构类&#xff08;1&#xff09;动态数组Arraylist&#xff08;2&#xff09;栈Stack&#xff08;3&#xff09;队列Queue&#xff08;4&#xff09;哈希表Hashtable 2.泛型3.常用泛型数据结构类&#xff08;1&#xff09;列表List&#xff08;2&#xff0…

Linux之基础IO

文章目录 前言一、再谈文件二、再谈文件操作二、如何理解文件1.文件操作的本质2.管理被打开的文件 三、进程和被打开的文件如何关联四、文件描述符fd1.引入2.理解3.分配规则 五、重定向1.引入重定向2.接口3.追加重定向4.输入重定向 总结 前言 本文介绍了系统IO、fd、重定向等内…

【Linux】在Ubuntu中卸载、下载mysql以及如何检查mysql是否卸载成功

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

micropython固件编译——把自己的py库添加进固件

目录 0. 前言1. 编写自己库的代码2. 移植库3. 验证 0. 前言 本节编译自己写的py库&#xff0c;增强移植性&#xff0c;往后烧录自己的固件即可轻易移植代码 没装好环境或者没有基础可以先看看这个&#xff1a; Ubuntu下ESP-IDF的环境搭建 Ubuntu下编译esp32micropython固件编…

windows下上架iOS应用到appstore

windows下上架iOS应用到appstore 背景步骤申请苹果开发者账号创建唯一标示符App IDs申请发布证书申请发布描述文件创建App并填写信息选择证书编译打包上传IPA到App Store提交审核 尾巴 背景 现在由于跨平台技术的兴起&#xff0c;不使用原生技术就能开发出Android和iOS应用。A…

一些关于c++的琐碎知识点

目录 bool强转 const构成重载:const修饰*p 移动构造 new int (10)所做的四件事 this指针---为什么函数里面需要this指针&#xff1f; .和->的区别 new创建对象 仿函数 new和malloc的区别 c系统自动给出的函数有 delete和delete[ ]区别何在 检查有没有析构函数 e…

BTC API:如何在比特币网络上创建应用程序?

比特币是一种去中心化的数字货币&#xff0c;可以通过比特币API与比特币网络进行交互。比特币API是一组允许开发人员与比特币网络进行交互的编程接口&#xff0c;可以帮助开发者构建各种比特币应用程序。 比特币API可以用于创建区块浏览器、钱包和比特币支付。其中利用比特币A…