STM32速成笔记—概述

news2025/1/11 5:19:51

文章目录

  • 前言
  • 一、专栏简介
  • 二、前期准备
  • 三、编程规范以及程序架构简介
    • 1. 编程规范
    • 2. 程序架构
  • 四、STM32F103ZET6简介

前言

本人技术菜鸟一枚,2022年大学毕业,大学加入老师实验室,参加过一些嵌入式相关的比赛,获得过2020年TI杯大学生电子设计竞赛山东省一等奖,参加两次大学的电子设计竞赛均获得一等奖。其他的参加过蓝桥杯,成绩并不理想,山东省嵌入式大学组省二。

最初大一下刚加入实验室时学习51单片机,后续使用STM32系列单片机。本人也并不是很专业系统的学习过STM32的开发,当时跟随B站上普中科技的STM32视频一步一步学习的STM32开发。个人觉得看视频记笔记的方式还是很适合我的。开这个专栏既是为了能够让更多的人能够快速上手STM32,其次也是为了再次学习,扎实基础。

发自内心的讲,最开始学习STM32时学的是时钟呀,一些文件的关系呀,一下子由51转到32觉得好难,心里发怵。但是实际使用时其实32比51更加简单,重要的是学习过程中要对自己充满信心。最后,祝愿大家能够在专栏中有所收获,共同进步!

一、专栏简介

本专栏介绍如何利用库函数进行STM32单片机开发,主要针对的单片机型号为STM32F103ZET6。总结来说,“速成”体现在以下方面

  • 在讲述基础知识后会有相应的实例或者模板程序
  • 学习完后会有小项目练习
  • 专栏基础知识部分内容精简,对于“速成”选手更加友好

其次专栏还有以下内容

  • 简单介绍变成规范合和程序架构
  • 专栏不断更新一些外设的使用方法并提供例程

二、前期准备

前期准备主要有物品以及相关软件的准备。首先是物品,单片机选用的是普中科技的一款核心板,主控芯片为STM32F102ZET6,是下面的样子
STM32F103ZET6
图片上是带有LCD屏幕排母的,有一种是不带的,因为本人开发时经常使用LCD,所以买了带排母的,在某宝和聚诚科技购买的,不带彩屏169RMB。学习过程中除了单片机以外还需要购买调试器,ST-LINK,用来下载程序和调试。USB转TTL(可以直接搜索TTL),用来做串口通信时使用,也可以用来下载程序,但是不可以调试。对于前期学习来讲,这些物品就足够啦。

除了物品之外还需要提前准备一些软件和驱动。比如Keil5,CH340(串口驱动),ST-LINK的驱动,这些时需要安装的。其他的类似于下载软件,串口调试助手都是不需要安装的,本人用的是普中科技提供的一些常用辅助开发软件,小伙伴们可以自己动手找一下,没有找到的话私信留一下邮箱,注明需要常用辅助开发软件,后续会邮件发送。

三、编程规范以及程序架构简介

1. 编程规范

对于新手来讲,编程规范以及代码架构也非常重要,有一个良好的编程规范和代码架构,可以提高开发效率,方便问题排查以及后续的程序维护。这里介绍的编程规范很简单,要求不严格。主要有以下几点

  • 变量定义
    变量定义时最好是能够体现该变量所属的外设模块,该变量是否为全局变量,静态变量或者指针变量。变量首字母小写,后面的单词首字母大写。举例如下
// 以ADC模块为例,需要定义一个存储AD值的变量,举例说明变量命名方式

// 局部变量
u32 adValue = 0;

// 全局变量
u32 gAdcAdValue = 0;   // 加一个g表示是全局变量

// 全局静态变量
static u32 gsAdcAdValue = 0;   // 加一个s表示静态变量

// 指针变量
u32 *gpAdcAdValue = (u32*)0x2000800;   // 加一个p表示为指针变量
  • 注释
    函数注释举例如下
/*
 *==============================================================================
 *函数名称:
 *函数功能:
 *输入参数:
 *返回值:无
 *============================================================================*/
*/

对于程序语句注释,如果过长可以在程序上方加注释,如果不是很长可以在程序语句后面空三格输入注释。

  • 函数命名
    函数命名要体现函数所属的层级以及函数的功能,关于层级会在代码架构的部分详细说明,这里只说一下函数命名方式。
// 这里以ADC模块的读取AD值函数为例,说明函数命名方式
void Med_Adc_ReadAdValue (void)
{
    // 函数内容
}

这里med指示该函数位于功能层,属于ADC模块,作用是读取AD值。

  • if,while等语句的使用
    使用if或者while等语句时,需要在括号前面加一个空格,如下
if (gAdcAdValue == 0)
{
    // 程序语句
}
  • 四则运算
    四则运算符号前后需要加空格,包括等于号等符号。如下
c = a * b;

2. 程序架构

该程序架构是本人在工作期间学习的,个人感觉还是有助于提高开发效率,方便后续维护的。主要思想是将一个模块的程序分成三部分,每一部分是一个新建的文件夹,下面都是其他模块相同层级的文件。

  • Drv 驱动层
    该层主要是写一些模块的初始化程序,例如GPIO的初始化,ADC的初始化等。
  • Med 功能层
    该层主要是完成一些功能性的操作,比如读取AD值,点亮LED等。Med层的函数可以包含Drv层的函数。
  • App 业务层
    该层主要是完成一些业务,比如在点亮LED的基础上实现流水灯,比如显示电压值等。

四、STM32F103ZET6简介

STM32F103ZET6是由意法半导体(ST)生产的一款单片机,32指32位。STM32也可以成为32位微处理器。STM32F103ZET6的主时钟频率为72MHz,512KB的FLASH,64KB的SRAM。常用到的有GPIO,中断,ADC,TMR,UART,DMA等。

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

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

相关文章

【利用AI让知识体系化】简要了解网络七层协议

文章目录 一、前言引言目的和意义 二、网络七层协议简介OSI参考模型七层协议分层结构和各层协议简介 三、物理层 - Layer 1物理层概述物理层的作用物理层标准和协议 四、数据链路层 - Layer 2数据链路层概述常见的协议 五、网络层 - Layer 3网络层概述网络层的作用IP地址的作用…

Nuxt.js:用 Vue.js 打造服务端渲染应用程序

文章目录 I. 简介Nuxt.js是什么Nuxt.js的历史和发展Nuxt.js的特点和优势1. 服务端渲染2. 自动生成路由3. 静态文件服务4. 异步数据加载5. 基于Webpack的构建系统6. 支持模块化的Vue组件7. 可定制的ESLint与StyleLint8. 支持PWA等高级功能 II. Nuxt.js基础Nuxt.js的安装和配置Nu…

ACL2023 | WebCPM:清华发布中文LFQA 数据集,探索搜索引擎和PLM大模型结合新范式

一、概述 title:WEBCPM: Interactive Web Search for Chinese Long-form Question Answering 论文地址:https://arxiv.org/abs/2305.06849 代码:https://github.com/thunlp/WebCPM 1.1 Motivation 开发一个类似于WebGPT一样的中文版本的…

如何保证数据库分布式事务的强一致性

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 针对分布式数据库,如何保证分布式事务的强一致性,是分布式数据库的关键。分布式事务的强一致性方案这里介绍两种,一种是GTM(global transaction manager),另一种是基于XA协议的两阶…

12道前端知识题目深入浅出下JavaScript

文章目录 1. 原型和原型链2. 作用域和闭包3. 高阶函数和函数式编程4. 异步编程和Promise、async/await5. 正则表达式6. 对象属性描述符和代理7. ES6新特性如模板字符串、解构赋值、箭头函数、let/const等8. 设计模式和架构模式设计模式架构模式 9. 性能优化技巧和调试技巧1. 性…

chatgpt赋能python:Python如何持续保存CSV文件

Python如何持续保存CSV文件 如果你需要不断更新数据并将其保存到CSV文件中,Python语言可以轻松完成这个任务。本文将介绍如何使用Python在代码执行的同时,将数据不断写入CSV文件中,实现持续保存的功能。 CSV文件是什么? CSV代表…

chatgpt赋能python:抓包是什么?

抓包是什么? 当我们在浏览器中访问一个网站时,我们的电脑会向网络服务器发送请求并接收响应。这个过程中,有一些工具可以让我们查看和分析这些请求和响应,其中最常用的就是“抓包”。 抓包就是指截获网络通信过程中的数据包并分…

chatgpt赋能python:Python怎么指定循环次数?

Python怎么指定循环次数? Python是一种广泛应用于编程领域的高级编程语言,它具有简单易学、代码可读性强、语言编写规范等诸多优点。其中,循环是Python语法中的重要一环,而如何指定循环次数则是其中一个重要的问题。 什么是循环…

Linux 检测通信路径上的PMTU(路径最大传输单元)

问题描述 终端设备向云端POST数据,数据量较小的没有问题,数据量大的必然出现丢包。网络很通畅,延迟较低。 分析 后来发现,终端到云端的通信路径上某个路由器节点的MTU小于终端的MTU,当终端发出的IP数据包长度大于该…

力扣题库刷题笔记4--寻找两个正序数组的中位数

1、题目如下: 2、个人Python代码实现如下: 代码如下: class Solution: def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float: nums nums1 nums2 #合并数组 nums.sort() …

java【toString覆写】

笔试题 输出结果:D.func(),num0 解析: 继承的原则,先调用父类的无参构造,因此调用func()函数func() 此方法,new 的是 D 的对象,且被D所重写,触发动态绑定,直接调用D中的func()方法在…

Jupyter Notebook是什么及使用

一、什么是Jupyter Notebook Jupyter项目是一个非盈利的开源项目,源于2014年的python项目, Juptter Notebook,原名IPython Notbook,是IPython的加强网页版,一个开源web应用程序名字源自Julia、Python和R是一款程序员…

CRC校验(1):CRC原理、计算例子和最优多项式的选择

CRC(Cyclic Redundancy Check),即循环冗余校验,它通过计算生成固定长度的校验码,用于验证数据在传输过程中是否发生了错误或损坏,从而确保数据的完整性。假设我们想把小写字母z发送出去。在Unicode中,z由数字0x7A表示&…

这有可能是国内最有趣的大学生知识交流社区了吧?

WRITE-BUG数字空间(http://www.writebug.com)内测 WRITE-BUG创建于2019年,创始团队主要来自于清华大学、中国人民大学等国内高校学生。运营至今,已累积100000注册用户,91%是18-24岁在校大学生,覆盖国内绝大…

前端vue基于秋云 ucharts echarts词云图 多重圆弧进度条 弧形进度条

前端vue基于秋云 ucharts echarts词云图 多重圆弧进度条 弧形进度条 进度条 弧形进度条 圆形进度条 词云图&#xff0c; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id13029 效果图如下: #### 使用方法 使用方法 <!-- 关键字 --> &l…

java设计模式之:代理模式

文章目录 简介静态代理动态代理Cglib代理spring中AOP使用代理总结 简介 代理(Proxy)模式是一种结构型设计模式&#xff0c;提供了对目标对象另外的访问方式&#xff1b;即通过代理对象访问目标对象。 这样做的好处是&#xff1a;可以在目标对象实现的基础上&#xff0c;增强额…

注意力机制和Transformer

注意力机制和Transformer 机器翻译是NLP领域中最重要的问题之一&#xff0c;也是Google翻译等工具的基础。传统的RNN方法使用两个循环网络实现序列到序列的转换&#xff0c;其中一个网络&#xff08;编码器&#xff09;将输入序列转换为隐藏状态&#xff0c;而另一个网络&…

【探测器】win10网卡设置巨型帧解决探测器无法成像的问题

【探测器】win10网卡设置巨型帧解决探测器无法成像的问题 1、背景2、解决办法3、补充说明 1、背景 探测器很奇怪的叫法&#xff0c;其实就是相机。 大家在安防领域&#xff0c;智慧工厂&#xff0c;智慧学校、智慧工地等经常会看到海康、大华的网络摄像头&#xff0c; 这些摄像…

软考高级架构师笔记-7信息安全

目录 1. 前言 & 考情分析2. 信息安全1. 信安基础知识2. 信息安全系统的组成框架3. 信息安全技术4. 信息安全的抗攻击技术5. 信息安全的保证体系和评估方法3. 网络安全4. 网络安全协议1. 前言 & 考情分析 前文回顾: 软考高级架构师笔记-1计算机硬件软考高级架构师笔记…

集成测试总结

集成测试 基本概念&#xff1a;将软件集成起来后进行测试。集成测试又叫子系统测试、组装测试、部件测试等。集成测试主要是针对软件高层设计进行测试&#xff0c;一般来说是以模块和子系统为单位进行测试。 集成测试包含的层次&#xff1a; 模块内的集成&#xff0c;主要是测…