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

news2024/11/24 16:55:02

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按钮,板子进入编程模式5
    在这里插入图片描述

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

  • 在弹出的对话框中选择所有默认设置,直接点击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/ ↩︎

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

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

相关文章

最热门高效的Node.JS开源第三方开发库和特点(持续更新......)

目录 1. Express 2. Socket.io 3. Mongoose 4. Passport 5. Async 6. PM2 7. Nodemailer 8. Request 9. Cheerio 10. Lodash 11. Bluebird 12. Winston 13. Socket.io-client 14. Node-sass 15. Moment 16. Gulp 17. Grunt 18. Chai 19. Sinon 20. Nodemon…

Java线程之间如何通信的,有哪些方式?

线程之间的通信方式主要有以下几种: 共享变量:线程之间可以通过共享变量来进行通信。不同的线程可以共享同一个变量,并在变量上进行读写操作。需要注意的是,共享变量可能会引发线程安全问题,需要通过同步机制来确保线程…

chatgpt赋能Python-python中怎么导入numpy

介绍 Python是一种广泛使用的编程语言,具有许多内建功能和模块,让开发者能够快速地编写代码。然而,虽然能够实现许多计算,但是原始Python本身并不足够处理各种科学和数字计算上需要的高效性,因此numpy这个开源的Pytho…

chatgpt赋能python:Python中如何对文本进行修改

Python中如何对文本进行修改 在Python编程中,涉及到文本操作的场合并不少见。我们可能需要读取文件、解析HTML网页、处理字符串等等。而在对文本进行操作的过程中,修改文本是非常常见的需求。本文将介绍Python中对文本进行修改的几种基本方法。 1. 字符…

实验篇(7.2) 04. 映射内网服务器到公网IP ❀ 远程访问

【简介】由于服务器的IP是内网地址,所以无法从公网直接访问服务器。要想远程访问服务器,最简单的办法就是将服务器映射到公网IP,然后通过公网IP加端口号的方式进行访问。 实验要求与环境 OldMei集团深圳总部部署了一台服务器,用来…

微服务实战项目-学成在线-内容管理模块(有项目实战实现)

内容管理模块 1 模块需求分析 1.1 什么是需求分析 在百度百科中对需求分析的定义如下: 需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要…

Golang每日一练(leetDay0081) 基本计算器I\II Basic Calculator

目录 224. 基本计算器 Basic Calculator 🌟🌟🌟 227. 基本计算器 II Basic Calculator 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C…

OpenAI API最新速查表;轻松制作数字分身;8个ChatGPT「作弊」策略;微软提示工程官方教程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 The OpenAI API in Python 最新速查表 ShowMeAI知识星球资源编码:R102 大语言模型的发展,正在推动 OpenAI API…

chatgpt赋能python:Python中的宏定义及其使用

Python中的宏定义及其使用 Python是一种高级编程语言,其灵活性和可读性深受程序员的喜爱。Python中的宏定义是一种强大且实用的编程特性,在编写复杂程序时可以提高程序的可重用性和可扩展性。 什么是宏? 在计算机编程中,宏是一…

chatgpt赋能python:Python中怎么安装包:完整指南

Python中怎么安装包:完整指南 Python是一种高级编程语言,被广泛应用于数据科学、Web开发、自动化、AI和机器学习等领域。Python的强大功能得益于它的包管理系统,这意味着开发者可以在自己的项目中使用已经编写好的代码。在本文中&#xff0c…

IaaS、PaaS、SaaS、DaaS的区别

IasS - 基础设施即服务 IaaS是Infrastructure as a server的缩写,意思是基础设施即服务。云端公司把IT环境的基础设施建设好,然后直接对外出租硬件服务器或者虚拟机。消费者可以利用所有计算基础设施,包括处理CPU、内存、存储、网络和其它基…

电容笔哪个牌子好用?苹果平板笔推荐

随着国内消费水平的上升,大家开始注重环保。开始使用起了无纸化书写,而无纸化的书写最离不开电容笔。但市面上的电容笔品牌大同小异,而每个人的使用体验都不同。所以今天给大家科普一下挑选电容笔的注意事项和推荐几款市面上好用的电容笔&…

116.移除指定元素 removeSpecifyElement

文章目录 题目描述解题思路代码详解运行截图 题目描述 题目链接 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输…

Rust每日一练(Leetday0015) 字符串相乘、通配符匹配、跳跃游戏II

目录 43. 字符串相乘 Multiply Strings 🌟🌟 44. 通配符匹配 Wildcard Matching 🌟🌟🌟 45. 跳跃游戏 II Jump Game II 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一…

chatgpt赋能python:Python中如何创建矩阵

Python中如何创建矩阵 矩阵(matrix)是线性代数中的重要概念,它在数学、物理、计算机科学等领域中都有着广泛应用。在Python编程中,我们也经常需要创建矩阵来进行各种数学计算,例如矩阵乘法、逆矩阵求解等。那么&#…

chatgpt赋能python:Python中如何去掉重复项

Python中如何去掉重复项 在Python的编程中,常常会遇到需要去掉重复项的情况。重复项的存在会极大地影响程序的效率和准确性。在本篇文章中,我们将讨论Python中如何去掉重复项,包括使用set()函数、使用列表推导式和使用字典的方法。这些方法都…

chatgpt赋能python:Python中怎么分段?

#Python中怎么分段? ##介绍 Python是一种高级编程语言,它被广泛用于各种任务,包括数据分析、Web开发、人工智能、游戏开发等等。对于Python的初学者来说,其中有一个重要的问题是如何正确地分段。在这篇文章中,我们将…

夜深人静学32系列16——RTC实时时钟

RTC时钟 RTC什么是RTC?RTC结构框图CubeMX配置RTC代码配置 实战——简易时钟任务要求代码实现实验结果 补充唤醒功能配置代码如下: RTC 什么是RTC? RTC(Real Time Clock):实时时钟 RTC是个独立的定时器。RTC模块拥有一个连续计数…

chatgpt赋能python:Python中如何清屏

Python中如何清屏 在Python编程中,有时候我们需要清除屏幕以方便我们查看输出,或者在一些UI开发中,需要在用户交互后清除屏幕并重新渲染界面。本文将介绍Python中如何清屏。 使用os模块的system函数 os模块提供了执行操作系统命令的接口&a…

Struts2 012 漏洞分析

0x00 前言 之前的003,005,009都是基于参数本身的ONGL注入,012则是基于参数值的ONGL注入 0x01 环境 还是建议使用vulhub poc: 无回显 %{(#context[xwork.MethodAccessor.denyMethodExecution]false)(#_memberAccess[allowStaticMethodAccess]true)(java.lang.R…