1、北京XXSD教育科技有限公司01STM32基础知识02开发环境的搭建与工程的建立03LED流水灯应用开发目录目录CONTENTS04按键控制呼吸灯应用开发05串行通信控制LED灯应用开发06电池电量监测应用开发STM32基础开发基础开发1STM32STM32基础知识基础知识STM32是意法半导体(STMicroelectronics,简称ST)有限公司出品的一系列微控制器(Micro Controller Unit, 简称MCU)的统称。展示了STM32微控制器的产品家族。STM32基础知识基础知识STM32微控制器的命名规则STM32基础知识基础知识下面以一个具体的微控制器型号(STM32F
2、103VET6)为例来说明型号中各部分的含义,如表2-1所示。序号序号型号型号具体含义具体含义1STM32代表ST公司出品的基于ARM Cortex-M内核的32位微控制器。2F代表“基础型”产品类别。3103代表“基础型”产品系列。4V代表MCU的引脚数,如:T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚,I代表176脚等。5E代表MCU的内存容量,如:6代表32K字节,8代表64K字节,B代表128K字节,C代表256K字节,D代表384K字节,E代表512K字节,G代表1M字节。6T代表MCU的封装,如:H代表BGA封装,T代表LQFP封装,U代表VFQFPN封
3、装。76代表MCU的工作温度范围,如:6和A代表-40到85,7和B代表-40到105。STM32基础知识基础知识STM32微控制器的主要特征微控制器的主要特征(1)32位位ARM Cortex-M3内核内核CPU(2)存储)存储(3)时钟、复位和电源管理)时钟、复位和电源管理(4)低功耗)低功耗(5)3个个12bit,1s A/D转换器(最多支持转换器(最多支持21个通道)个通道)(6)2个个12bit D/A转换器转换器(7)调试模式)调试模式(8)最多)最多112个快速个快速I/O口口(9)11个定时器个定时器(10)多达)多达13个通信接口个通信接口(11)CRC计算单元,计算单元,9
4、6位唯一位唯一ID(12)无铅()无铅(ECOPACK)封装)封装STM32基础知识基础知识STM32STM32的应用领域的应用领域STM32基础知识基础知识2开发环境的搭建与工程的建立开发环境的搭建与工程的建立2任务要求任务要求 本任务要求搭建基于STM32CubeMX工具和HAL库的STM32微控制器的开发环境,生成可在MDK-ARM集成开发环境下运行的工程。正确地配置、编译工程后,将其下载至开发板中运行。2知识连接知识连接1. STM32的软件开发库的软件开发库软件开发库名称移植性程序优化(内存占用&执行效率)易用性程序可读性支持硬件系列STM32Snippets+标准外设库+STM32
5、CubeHAL库+LL库+在学习STM32的软件开发模式之前,我们有必要先了解STM32的软件开发库。ST公司为开发者提供了多个软件开发库,如:标准外设库、HAL库与LL库。另外,ST公司还针对F0与L0系列MCU推出了STM32 Snippets示例代码集合。标准外设库推出时间最早,HAL库次之,而LL库是最近才新增的,目前支持的芯片较少,尚未覆盖全系列产品。ST公司为这些软件开发库配套了齐备的开发文档,为开发者的使用提供了极大的方便。2知识连接知识连接2. STM32的软件开发模式的软件开发模式 开发者基于ST公司提供的软件开发库进行应用程序的开发,常用的STM32软件开发模式主要有以下几
6、种:(1)基于寄存器的开发模式)基于寄存器的开发模式(2)基于标准外设库的开发模式)基于标准外设库的开发模式(3)基于)基于STM32Cube的开发模式的开发模式 这种开发模式对开发者的要求较低:开发者只要会调用API即可编写程序。基于标准外设库编写的代码容错性好且后期维护简单,其缺点是运行速度相对寄存器级的代码偏慢。总的来说,这种开发模式适合快速入门,大多数初学者会选择这种开发模式。 基于寄存器编写的代码简练、执行效率高。这种开发模式有助于开发者从细节上了解STM32微控制器的架构与工作原理,但由于STM32微控制器的片上外设多且寄存器功能五花八门,因此开发者需要花费很多时间精力研究产品手册
7、。总的来说,这种开发模式适合有较强编程功底的开发者。 基于STM32Cube的开发模式是ST公司目前主推的一种模式,对于近年来推出的新产品,ST公司也已不为其配备标准外设库。因此,为了顺应技术发展的潮流,本书选取了基于STM32Cube的开发模式,后续的任务实施的讲解,都是基于这种开发模式。2知识连接知识连接3. STM32的集成开发环境的集成开发环境 根据ST公司官网显示,支持STM32开发的IDEs(Integrated Development Environments,集成开发环境)有20余种,其中包括商业版软件和纯免费的软件。目前比较常用的商业版IDE有MDK-ARM与IAR-EWAR
8、M,免费的IDE包括SW4STM32、TrueSTUDIO和CoIDE等。另外,ST官方推荐使用STM32CubeMX软件可视化地进行芯片资源和管脚的配置,然后生成项目的源程序,最后导入IDEs中进行编译、调试与下载。本书在后续的任务实施讲解中,将采用“STM32CubeMX + MDK-ARM”的开发工具组合。 根据任务要求,利用STM32CubeMX进行功能配置; 生成基于MDK-ARM集成开发环境的初始代码; 添加功能逻辑完成应用开发。201下载安装包并安装02安装软件包任务实施任务实施1. MDK-ARM的安装的安装201下载安装包并安装02嵌入式软件包的安装任务实施任务实施2. ST
9、M32CubeMX的安装的安装2任务实施任务实施3. ST-Link驱动程序的安装驱动程序的安装 ST-Link是ST公司官方出品的一款支持STM32系列单片机的程序下载调试工具,使用前应安装相应的驱动程序。 MDK-ARM的安装目录中包含了ST-Link下载调试工具的驱动程序,其位于“C:Keil_v5ARMSTLinkUSBDriver”路径,如图中的标号处所示。 读者的PC机如果安装了64位的操作系统,则直接执行上述路径下的“dpinst_amd64.exe”可执行文件即可完成驱动程序的安装,如图中的标号处所示。2任务实施任务实施4. 建立工程建立工程01建立工程存放的文件夹建立工程存放
10、的文件夹新建新建STM32CubeMXSTM32CubeMX工程工程0203配置配置GPIOGPIO功能功能配置调试端口配置调试端口0405配置配置MCUMCU时钟树时钟树06保存保存STM32CubeMXSTM32CubeMX工程工程07生成生成C C代码初始工程代码初始工程2任务实施任务实施5. 完善完善main()函数函数 打开后的工程如图所示,展开左侧的“工程列表”窗口,打开“main.c”文件(右图的标号处),在while(1)代码段中添加标号处所示的两行代码。2任务实施任务实施6. C代码工程配置代码工程配置2任务实施任务实施6. C代码工程配置代码工程配置2任务实施任务实施7.
11、编译工程、下载并运行编译工程、下载并运行本工程运行的现象是LED2闪烁,亮1秒灭1秒,周期为2秒。3LEDLED流水灯应用开发流水灯应用开发3任务要求任务要求本任务要求设计一个LED流水灯系统,具体要求如下:系统中有8个LED灯,分别是LED1LED8。系统上电时,8个LED灯默认为熄灭状态。接下来8个LED灯依次点亮,即:LED1点亮1秒后熄灭,然后LED2点亮1秒后熄灭最后LED8点亮1秒后熄灭,并以此循环往复。3知识连接知识连接1. 认识认识STM32Cube嵌入式软件包嵌入式软件包接下来以STM32CubeF1为例,介绍STM32Cube嵌入式软件包的构成。点击STM32CubeMX软
12、件上方的“Help”菜单,选择“Updater Settings”选项,在弹出的设置框中可找到软件包的存放地址,如图中标号处所示。3知识连接知识连接 进入STM32Cube嵌入式软件包的存放地址,可以看到软件包由6个文件夹和2个文件构成,如图所示。l “ _ h t m r e s c ” 文 件 夹 、 “ p a c k a g e . x m l ” 和“Release_Notes.html”文件是软件包发布记录及一些图标资源。l Documentation文件夹:存放软件包的帮助文档,为“.pdf”格式。l Drivers文件夹:存放STM32Cube固件驱动函数库。l Middlew
13、ares文件夹:存放中间件组件。l Projects文件夹:存放实例(Examples)、应用程序(Applications)、演示案例(Demonstrations)。l Utilities文件夹:存放一些工具类杂项。3知识连接知识连接图展示了STM32Cube软件包的组件构成框架。l 对应软件包中“DriversSTM32F1xx_HAL_Driver”文件夹;l 对应软件包中“Projects开发板文件夹Examples”文件夹;l 对应软件包中“Middlewares”文件夹;l 对应软件包中“Projects开发板文件夹Demonstrations”文件夹;l 对应软件包中“Util
14、ities”文件夹;l 对应软件包中“DriversCMSIS”文件夹;l STM32CubeMX软件。3知识连接知识连接2. 工程架构分析工程架构分析 在进行应用开发之前,我们有必要对STM32CubeMX软件生成的初始C代码工程进行了解,如:了解工程架构、了解主要的函数功能与执行过程。 打开 “task1_ProjectFirst”,如图所示。编号函数名函数功能标号HAL_Init()系统外设初始化标号SystemClock_Config()系统时钟初始化标号MX_GPIO_Config()GPIO功能初始化标号While(1)主循环3知识连接知识连接3. GPIO工作模式配置工作模式配置
15、 G P I O 工 作 模 式 配 置 相 关 的 函 数 A P I 主 要 位 于 “ s t m 3 2 f 1 x x _ h a l _ g p i o . c ” 和“stm32f1xx_hal_gpio.h”文件中。利用HAL库进行应用开发时,各外设的初始化一般通过对初始化结构体的成员赋值来完成。某个GPIO端口的初始化函数原型如下:typedef struct uint32_t Pin; 要初始化的要初始化的GPIO引脚编号引脚编号 uint32_t Mode; GPIO引脚的工作模式引脚的工作模式 uint32_t Pull; GPIO引脚的上拉引脚的上拉/下拉形式下拉形式
16、 uint32_t Speed; GPIO引脚的输出速度引脚的输出速度 GPIO_InitTypeDef; 接下来主要对GPIO引脚的工作模式这个成员进行介绍。GPIO的工作模式主要有以下几种:GPIO_MODE_INPUT:输入模式GPIO_MODE_OUTPUT_PP:推挽输出模式GPIO_MODE_OUTPUT_OD:开漏输出模式GPIO_MODE_AF_PP:推挽复用模式GPIO_MODE_AF_OD:开漏复用模式GPIO_MODE_AF_INPUT:复用输入模式GPIO_MODE_ANALOG:模拟量输入模式l 第一个参数是需要初始化的GPIO端口,对于STM32F103VET6型号
17、来说,取值范围是GPIOA GPIOE。l 第二个参数是初始化参数的结构体指针,结构体类型为GPIO_InitTypeDef。void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) 3知识连接知识连接4. 定时器基本定时功能配置定时器基本定时功能配置(1)STM32F103VE型号型号MCU定时器概述定时器概述 STM32F103VE型号MCU共有8个定时器,编号为TIM1TIM8,其中包括2个高级控制定时器、4个通用定时器和2个基本定时器。定时器类型定时器编号计数器位数计数器类型捕获/比较通道数挂载总线/接口时
18、钟定时器时钟高级控制定时器TIM1、TIM816位递增、递减、递增/递减4APB2/72MHz72MHz通用定时器TIM2、TIM3TIM4、TIM516位递增、递减、递增/递减4APB1/36MHz72MHz基本定时器TIM6、TIM716位递增无APB1/36MHz72MHz3知识连接知识连接(2)基本定时器功能框图)基本定时器功能框图 计数器寄存器(计数器寄存器(TIMx_CNT) 预分频器寄存器(预分频器寄存器(TIMx_PSC) 自动重载寄存器(自动重载寄存器(TIMx_ARR)3知识连接知识连接(3)定时器基本初始化结构体介绍)定时器基本初始化结构体介绍typedef struct
19、 uint32_t Prescaler; 定时器时钟源分频系数定时器时钟源分频系数 uint32_t CounterMode; 计数模式计数模式 uint32_t Period; 周期(自动重载值)周期(自动重载值) uint32_t ClockDivision; 定时器内部时钟分频系数定时器内部时钟分频系数 uint32_t RepetitionCounter; 重复计数值重复计数值 uint32_t AutoReloadPreload; 是否启用预加载功能是否启用预加载功能 TIM_Base_InitTypeDef; 3知识连接知识连接(4)配置定时器的工作参数)配置定时器的工作参数根据本
20、任务的要求,LED流水灯每隔1秒钟切换一次显示效果。因此可以使能TIM6的更新中断,并将时间间隔配置为1秒钟。 配置配置CK_CNT频率频率TIM6挂载在挂载在APB1总线上,定时器时钟源频率(总线上,定时器时钟源频率(CK_INT = CK_PSC)为)为36MHz2=72MHz。可将。可将TIMx_PSC配配置为置为7199,根据计算公式可得:,根据计算公式可得:fCK_CNT = 72MHz / (7199 + 1) = 10000Hz(周期为(周期为100s) 配置自动重载寄存器配置自动重载寄存器TIMx_ARR值值1s(1000000s) 100us = 10000 = (TIMx_
21、ARR + 1)即:即:TIMx_ARR = 10000 1 = 99993任务实施任务实施01建立工程存放的文件夹建立工程存放的文件夹新建新建STM32CubeMXSTM32CubeMX工程工程0203选择选择MCUMCU型号型号配置调试端口配置调试端口0405配置配置MCUMCU时钟树时钟树06配置配置LEDLED灯相关的灯相关的GPIOGPIO功功能能07配置定时器配置定时器TIM6TIM6的参数的参数与中断功能与中断功能08保存保存STM32CubeMXSTM32CubeMX工程工程1. 建立建立STM32CubeMX工程并生成初始工程并生成初始C代码代码09生成初始生成初始C C代码
22、工程代码工程301使能TIM6更新中断02编写TIM6更新中断服务程序任务实施任务实施2. 完善代码完善代码03添加自定义变量和函数定义04编写main()函数的主循环程序 编译程序并下载运行后的现象是系统上电时,8个LED灯默认为熄灭状态,接下来8个LED灯依次点亮。4按键控制呼吸灯应用开发按键控制呼吸灯应用开发4任务要求任务要求本任务要求设计一个可通过按键进行控制的呼吸灯系统,具体要求如下:使用外部中断实现按键功能;LED灯的显示效果为“逐渐变亮”然后“逐渐变暗”;系统刚上电时,LED灯为关闭状态。第奇数次按下按键,LED灯显示呼吸灯效果;第偶数次按下按键,LED灯关闭,并以此循环往复。按
23、键与呼吸灯的电路原理图如图2-36所示,其中按键的GPIO引脚为PC13,呼吸灯LED与GPIO引脚PB8相连。知识连接知识连接1. STM32F1的中断管理的中断管理STM32F1系列微控制器支持多个中断,互联型产品支持78个中断,其他产品支持70个中断。如:STM32F103VET6型号支持10个系统异常和60个可屏蔽中断。具有16级可编程的中断优先级,用户在编程时主要对60个可屏蔽中断进行管理与配置。组别组别PRIGROUP10:8IPRxbit7bit4分配分配优先级级数优先级级数抢占优先级子优先级抢占优先级子优先级0011B4 bitNone16级None1100B3 bit1 bi
24、t8级2级2101B2 bit2 bit4级4级3110B1 bit3 bit2级8级4111BNone4 bitNone16级对“抢占优先级”和“子优先级”在程序执行过程中的判定规则说明如下: 若两个中断的“抢占优先级”与“子优先级”都相同,则哪个中断先发生就先执行谁; “抢占优先级”高的中断可以打断“抢占优先级”低的中断; 若两个中断的“抢占优先级”相同,当两个中断同时发生时,“子优先级”高的中断先执行,且“子优先级”高的中断不能打断“子优先级”低的中断。4知识连接知识连接2. STM32F1的外部中断的外部中断/事件控制器事件控制器 STM32F1的外部中断/事件控制器(External
25、 Interrupt/Event Controller,EXTI)包含20个可用于产生中断/事件请求的边沿检测器。STM32F1的每个GPIO引脚都可以作为外部中断的中断输入口,且每个外部中断都设置了状态位,具备独立的触发和屏蔽设置。这20个外部中断或事件分别是:EXTI 线 015:对应外部 IO 口的输入中断。EXTI 线 16:连接到 PVD 输出。EXTI 线 17:连接到 RTC 闹钟事件。EXTI 线 18:连接到 USB 唤醒事件。EXTI 线 19:连接到以太网唤醒事件(只适用于互联型产品)。4知识连接知识连接3. STM32F1的高级控制和通用定时器的高级控制和通用定时器 S
26、TM32F1的高级控制和通用定时器相对基本定时器来说,增加了外部通道引脚,支持输入捕获、输出比较等功能,部分定时器还支持增量(正交)编码器和霍尔传感器电路接口。高级控制定时器相比通用定时器,又增加了可编程死区互补输出、重复计数器和刹车(断路)等工业电机控制的高级功能。通道号CH1CH2CH3CH4引脚编号PA6/PB4/PC6PA7/PB5/PC7PB0/PC8PB1/PC9 根据本任务的要求,LED显示呼吸灯效果需要使用PWM信号作为控制信号。只有高级控制定时器或者通用定时器才具备比较输出通道,因此我们可选取通用定时器TIM3作为PWM信号输出的定时器。4知识连接知识连接通用定时器比基本定时
27、器增加了外部通道和其他功能,因此其功能框图更加复杂,如图2-38和图2-39所示。4知识连接知识连接由这两张图可知,通用定时器由六部分构成,分别是:时钟源、控制器模块、时基单元、4l 输入捕获模块、l 捕获/比较寄存器组l 输出比较模块。知识连接知识连接3. PWM介绍介绍 脉冲宽度调制(Pulse Width Modulation,PWM)简称脉宽调制,它是一种利用微处理器的数字输出对模拟电路进行控制的技术,其被广泛应用于测量、通信、功率控制与变换等领域。 脉冲宽度调制可对模拟信号电平进行数字编码。通过使用高分辨率计数器来调制方波的占空比,可对一个具体模拟信号的电平进行编码。PWM信号是数字
28、信号,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。4知识连接知识连接 PWM采用调整脉冲占空比的方式达到调整电压与电流的效果。如:在1ms内,高电平占0.3ms,低电平占0.7ms。则LED灯通电0.3ms,断电0.7ms,这样的脉冲占空比为30%。 STM32微控制器的定时器可输出两种模式的PWM信号:PWM1和PWM2,分别如图2-40和图2-41所示。 P
29、WM信号的生成样式与计数器寄存器(TIMx_CNT)、自动重载寄存器(TIMx_ARR)以及捕获/比较寄存器(TIMx_CCRy)有关。4任务实施任务实施01建立工程存放的文件夹建立工程存放的文件夹新建新建STM32CubeMXSTM32CubeMX工程工程0203选择选择MCUMCU型号型号配置调试端口配置调试端口0405配置配置MCUMCU时钟树时钟树06配置外部中断按键配置外部中断按键GPIOGPIO功能功能07配置定时器配置定时器TIM4TIM4输出输出PWMPWM信号信号08保存保存STM32CubeMXSTM32CubeMX工程工程1. 建立建立STM32CubeMX工程并生成初始
30、工程并生成初始C代码代码09配置按键配置按键NVICNVIC10生成初始生成初始C C代码工程代码工程401编写按键外部中断回调函数02定义相关变量任务实施任务实施2. 完善代码完善代码03使能TIM4输出PWM信号04编写主循环程序45串行通信控制串行通信控制LEDLED灯应用开发灯应用开发5任务要求任务要求本任务要求设计一个LED流水灯系统,该系统与上位机之间通过串行通信接口相连。上位机可发送命令对LED流水灯系统进行控制,具体要求如下:系统中有8个LED灯,分别是LED1LED8。系统上电时,8个LED灯默认为熄灭状态。系统运行时,8个LED灯依次点亮。LED流水灯的工作模式有两种:模式
31、一:8个LED灯依次点亮,每个LED灯点亮1秒后熄灭,然后切换为另一个,点亮顺序为LED0、LED1、LED7,并以此循环往复;模式二:8个LED灯依次点亮,每个LED灯点亮1秒后熄灭,然后切换为另一个,点亮顺序为LED7、LED6、LED0,并以此循环往复。上位机以串行通信的方式发送命令至该系统进行LED流水灯工作模式的切换,命令“mode_1#”和“mode_2#”分别对应模式一和模式二的控制,命令“stop#”控制LED流水灯停止运行并全灭。知识连接知识连接1. 通用同步异步收发器概述通用同步异步收发器概述 通用同步异步收发器的英文全称是Universal Synchronous Asy
32、nchronous Receiver and Transmitter,简称USART。STM32F1系列微控制器有多个收发器外设(俗称“串口”)可用于串行通信,包括3个USART和2个UART(通用异步收发器,Universal Asynchronous Receiver and Transmitter),它们分别是:USART1、USART2、USART3、UART4、UART5。UART与USART相比,裁剪了同步通信的功能,只有异步通信功能。同步通信与异步通信的区别在于通信中是否需要发送器输出同步时钟信号USART_CK,实际应用中一般使用异步通信。 USART是MCU的重要外设,在程序
33、设计的调试阶段可发挥重要作用。如:将开发板与PC机通过串行通信接口相连后,可将调试信息“打印”到串口调试助手等工具中,开发者可借助这些信息了解程序运行情况。5知识连接知识连接STM32F1的各个收发器外设的工作时钟来源于不同的APB总线:USART1挂载在APB2总线上,最大频率为72MHz;其他4个收发器则挂载在APB1总线上,最大频率为36MHz。表2-8展示了STM32F103VET6芯片USART/UART的外部引脚分布:引脚名称引脚名称APB2(最高(最高72MHz)APB1(最高(最高36MHz)USART1USART2USART3UART4UART5TXPA9/PB6PA2/PD
34、5PB10/PD8/PC10PA0/PC10PC12RXPA10/PB7PA3/PD6PB11/PD9/PC11PA1/PC11PD2sCLKPA8PA4/PD7PB12/PD10/PC12-nCTSPA11PA0/PD3PB13/PD11-nRTSPA12PA1/PD4PB14/PD12-5知识连接知识连接2. USART的中断控制的中断控制STM32F1的USART支持多种中断事件,与发送有关的中断有:发送完成、清除以发送(CTS标志)和发送数据寄存器为空;与接收有关的中断有:接收数据寄存器不为空、检测到空闲线路、检测到上溢错误、奇偶校验错误、检测到LIN断路、多缓冲通信中的噪声标志、上溢
35、错误和帧错误。中断事件中断事件事件标志事件标志使能控制位使能控制位发送期间发送期间发送完成TCTEIE清除以发送(CTS标志)CTSCTSIE发送数据寄存器为空TXETXEIE接收期间接收期间接收数据寄存器不为空(准备好读取接收到的数据)RXNERXNEIE检测到上溢错误ORE检测到空闲线路IDLEIDLEIE奇偶校验错误PEPEIE检测到LIN断路LBDLBDIE多缓冲通信中的噪声标志、上溢错误和帧错误NF/ORE/FEEIE5任务实施任务实施01建立工程存放的文件夹建立工程存放的文件夹新建新建STM32CubeMXSTM32CubeMX工程工程0203选择选择MCUMCU型号型号配置调试端
36、口配置调试端口0405配置配置MCUMCU时钟树时钟树06配置配置LEDLED灯的灯的GPIOGPIO功能功能07配置配置USARTUSART外设的工作外设的工作参数参数08保存保存STM32CubeMXSTM32CubeMX工程工程1. 建立建立STM32CubeMX工程并生成初始工程并生成初始C代码代码09生成初始生成初始C C代码工程代码工程501将USART发送函数重定向到print()函数02定义USART收发所需的变量任务实施任务实施2. 完善代码完善代码03编写USART接收中断服务函数04编写LED流水灯显示程序05编写main()函数56电池电量监测应用开发电池电量监测应用开
37、发6任务要求任务要求本任务要求设计一个可对电池电压进行监测的应用程序,电路图如图2-48所示。在图2-48中,供电电池的电压为12.6V,通过“PIN”端接入。电池电压经过分压后,通过“VM_ADC”与微控制器的PA1引脚相连,作为ADC采集输入。要求每隔1秒钟对电池电压进行采集,采集到的电压值通过串行通信的方式发送至上位机显示。电压显示样例:3.25V,数值精确到小数点后两位数。任务要求任务要求 本任务要求搭建基于STM32CubeMX工具和HAL库的STM32微控制器的开发环境,生成可在MDK-ARM集成开发环境下运行的工程。正确地配置、编译工程后,将其下载至开发板中运行。6知识连接知识连
38、接1. ADC简介简介 ADC(Analog-to-Digital Converter,模数转换器)是一种可将连续变化的模拟信号转换为离散的数字信号的器件,其可将温度、压力、声音或者图像等转换成更易存储、处理和发射的数字信号。 STM32F103VET6微控制器有3个ADC,可工作在独立、双重或三重模式下,以适应多种不同的应用需求。每个ADC都具有18个复用通道,可测量16个外部信号源、2个内部信号源,转换精度可配置为12bit、10bit、8bit或6bit,转换结果存储在一个可左对齐或右对齐的16位数据寄存器中。图2-49展示了单个ADC的结构框图。6知识连接知识连接2. ADC的功能分析
39、的功能分析(1)ADC的输入电压范围的输入电压范围引脚名称引脚名称信号类型信号类型功能说明功能说明VREF+正模拟参考电压输入ADC高(正参考)电压,1.8V VREF+ VDDAVDDA模拟电源输入模拟电源电压等于 VDD全速运行时,2.4V VDDA VDD (3.6 V)低速运行时,1.8V VDDA VDD (3.6 V)VREF-负模拟参考电压输入ADC低(负参考)电压,VREF- = VSSAVSSA模拟电源接地输入该引脚一般接地,电压等于VSS如上图的标号处所示,ADC的输入电压VIN的范围是:VREF- VIN VREF+,由图中的VREF-、VREF+、VDDA和VSSA四个
40、外部引脚的电压决定 6如图2-49的标号处所示,单个ADC的输入通道多达18个,其中包括16个外部通道,这16个外部通道分别连接着不同的GPIO口,如表2-11所示,表中还显示了内部通道16、17连接的资源。知识连接知识连接(2)ADC的输入通道的输入通道通道号通道号ADC1ADC2ADC3外部通道外部通道0PA0PA0PA0外部通道外部通道1PA1PA1PA1外部通道外部通道2PA2PA2PA2外部通道外部通道3PA3PA3PA3外部通道外部通道4PA4PA4PF6外部通道外部通道5PA5PA5PF7外部通道外部通道6PA6PA6PF8外部通道外部通道7PA7PA7PF9外部通道外部通道8P
41、B0PB0PF10外部通道外部通道9PB1PB1PF3外部通道外部通道10PC0PC0PC0外部通道外部通道11PC1PC1PC1外部通道外部通道12PC2PC2PC2外部通道外部通道13PC3PC3PC3外部通道外部通道14PC4PC4PF4外部通道外部通道15PC5PC5PF5通道通道16(内部)(内部)内部VSS内部VSS内部VSS通道通道17(内部)(内部)内部参考电压VREFINT内部VSS内部VSS6知识连接知识连接(3)ADC的转换顺序的转换顺序 图处所示,STM32F1将ADC转换分为两个通道:规则通道和注入通道。规则通道相当于正常运行的程序,注入通道相当于中断。正如中断可以打
42、断正常运行的程序,注入通道的ADC转换可以打断规则通道的转换,只有等注入通道转换完成后,规则通道的转换才能继续运行。 规则通道的转换顺序由规则序列寄存器SQR3、SQR2和SQR1控制,注入通道的转换顺序由注入序列寄存器JSQR控制。(4)ADC的输入时钟与采样周期的输入时钟与采样周期 图处所示,STM32F1的ADC输入时钟ADCCLK由PCLK2经过ADC预分频器产生。根据数据手册显示,当VDDA范围为2.4V至3.6V时,ADCCLK最大值为14MHz。分频系数由ADC通用控制寄存器ADC_CCR中的“ADCPRE1:0”位段设置,可设置的值有2、4、6和8。当PCLK2为72MHz时,
43、若设置ADC预分频器的分频系数为6,则ADCCLK的时钟频率为12MHz,对应一个时钟周期的时间Tp(1/ADCCLK)等于0.0833s A/D转换需要若干个时钟周期才可完成采样,采样时间可通过ADC采样时间寄存器ADC_SMPR1和ADC_SMPR2中的“SMP2:0”位段进行设置,允许设置为1.5个、7.5个或28.5个时钟周期等。 一次A/D转换所需的总时间Tconv = 采样时间 + 数据处理时间(12.5Tp),因此当ADCCLK设置为12MHz,采样时间设置为1.5个时钟周期,可计算出最短的转换时间Tconv = 14 Tp = 1.162s。6知识连接知识连接(5)ADC的触发
44、方式的触发方式 图标号处所示,ADC支持多种外部事件触发方式,包括定时器触发和外部GPIO中断等。具体选择哪种触发方式,可通过ADC控制寄存器2(ADC_CR2)进行配置,即:对规则组和注入组分别进行配置。另外,该寄存器还可对触发极性进行配置,如:上升沿检测、下降沿检测等。 另外,ADC还支持软件触发,它由ADC_CR2寄存器的“SWSTART”位进行控制,控制的前提是“ADON”位先配置为1。一次转换结束后,硬件会自动将“SWSTART”位置零。(6)ADC的数据寄存器的数据寄存器 图标号处所示,ADC转换完毕后,结果数据存放在相应的数据寄存器中。ADC的数据寄存器有两种:规则数据寄存器AD
45、C_DR和注入数据寄存器ADC_JDRx。上述两种数据寄存器用于独立转换模式的结果存放,双重和三重转换模式的结果则存放于通用规则数据寄存器ADC_CDR中。6知识连接知识连接(7)ADC的中断控制的中断控制 图标号处所示,ADC转换结束后,支持产生四种中断:DMA溢出中断、规则转换结束中断、注入转换结束中断和模拟看门狗事件中断。它们的事件标志和使能控制位见表。中断事件中断事件事件标志事件标志(状态寄存器(状态寄存器ADC_SR)使能控制位使能控制位(控制寄存器(控制寄存器1 ADC_CR1)DMA溢出溢出OVROVRIE规则转换结束规则转换结束EOCEOCIE注入转换结束注入转换结束JEOCJ
46、EOCIE模拟看门狗事件模拟看门狗事件AWDAWDIE注意:规则和注入转换结束后,除了可通过产生中断方式处理转换结果之外,还可产生DMA请求,以把转换好的数据直接转存至内存中。这对于独立模式的多通道转换、双重模式或三重模式而言非常必要,既可简化程序编程又可提高运行效率。6任务实施任务实施01建立工程存放的文件夹建立工程存放的文件夹新建新建STM32CubeMXSTM32CubeMX工程工程0203选择选择MCUMCU型号型号配置调试端口配置调试端口0405配置配置MCUMCU时钟树时钟树06配置配置ADCADC外设的工作参数外设的工作参数07配置配置USARTUSART外设的工作外设的工作参数参数08保存保存STM32CubeMXSTM32CubeMX工程工程1. 建立建立STM32CubeMX工程并生成初始工程并生成初始C代码代码09生成初始生成初始C C代码工程代码工程6