您现在的位置是:首页 >技术杂谈 >STM32速成笔记—概述网站首页技术杂谈
STM32速成笔记—概述
前言
本人技术菜鸟一枚,2022年大学毕业,大学加入老师实验室,参加过一些嵌入式相关的比赛,获得过2020年TI杯大学生电子设计竞赛山东省一等奖,参加两次大学的电子设计竞赛均获得一等奖。其他的参加过蓝桥杯,成绩并不理想,山东省嵌入式大学组省二。
最初大一下刚加入实验室时学习51单片机,后续使用STM32系列单片机。本人也并不是很专业系统的学习过STM32的开发,当时跟随B站上普中科技的STM32视频一步一步学习的STM32开发。个人觉得看视频记笔记的方式还是很适合我的。开这个专栏既是为了能够让更多的人能够快速上手STM32,其次也是为了再次学习,扎实基础。
发自内心的讲,最开始学习STM32时学的是时钟呀,一些文件的关系呀,一下子由51转到32觉得好难,心里发怵。但是实际使用时其实32比51更加简单,重要的是学习过程中要对自己充满信心。最后,祝愿大家能够在专栏中有所收获,共同进步!
一、专栏简介
本专栏介绍如何利用库函数
进行STM32单片机开发,主要针对的单片机型号为STM32F103ZET6
。总结来说,“速成”体现在以下方面
- 在讲述基础知识后会有相应的实例或者模板程序
- 学习完后会有小项目练习
- 专栏基础知识部分内容精简,对于“速成”选手更加友好
其次专栏还有以下内容
- 简单介绍变成规范合和程序架构
- 专栏不断更新一些外设的使用方法并提供例程
二、前期准备
前期准备主要有物品以及相关软件的准备。首先是物品,单片机选用的是普中科技的一款核心板,主控芯片为STM32F102ZET6,是下面的样子
图片上是带有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等。