STM32L476VET6 是单片机芯片,嵌入式 - 微控制器。
STM32L476VET6 是高性能32位RISC内核的超低功耗微控制器,其工作频率高达80 MHz。
核心处理器:ARM® Cortex®-M4。
内核规格:32-位
I/O 数:82
速度:80MHz
程序存储容量:512KB(512K x 8)
程序存储器类型:闪存
RAM 大小:128K x 8。
电压 - 供电 (Vcc/Vdd):1.71V ~ 3.6V。
工作温度:-40°C ~ 85°C(TA)
可以用FlexibleButton表示。
FlexibleButton 是一个基于标准 C 语言的小巧灵活的按键处理库,支持单击、连击、短按、长按、自动消抖,可以自由设置组合按键,可用于中断和低功耗场景。
该按键库解耦了具体的按键硬件结构,理论上支持轻触按键与自锁按键,并可以无限扩展按键数量。另外,FlexibleButton 使用扫描的方式一次性读取所有所有的按键状态,然后通过事件回调机制上报按键事件。
核心的按键扫描代码仅有三行,没错,就是经典的 三行按键扫描算法。使用 C 语言标准库 API 编写,也使得该按键库可以无缝兼容任意的处理器平台,并且支持任意 OS 和 non-OS(裸机编程)。
快速体验:
FlexibleButton 库中提供了一个测试例程 ./examples/demo_rtt_iotboard.c,该例程基于 RT-Thread OS 进行测试,硬件平台选择了 RT-Thread IoT Board Pandora v2.51 开发板。
当然你可以选择使用其他的 OS,或者使用裸机测试,只需要移除 OS 相关的特性即可。
如果你使用自己的硬件平台,只需要将 FlexibleButton 库源码和例程加入你既有的工程下即可。
DEMO 程序说明:
该示例程序可以直接在 RT-Thread stm32l475-atk-pandora BSP 中运行,可以在该 BSP 目录下,使用 menuconfig 获取本软件包。
STM32指南者和探索者都是STM32开发板,它们都有自己的优点和缺点,取决于您的需求。
STM32指南者是一款高性能的STM32开发板,它拥有一个高性能的STM32F7处理器,支持多种外设,包括LCD、摄像头、WiFi、蓝牙、GPS等,可以满足大多数开发需求。
STM32探索者是一款低成本的STM32开发板,它拥有一个低功耗的STM32L4处理器。
Arm处理器大致可以分为Classic、Cortex-M、Cortex-R以及Cortex-A三个系列,其性能天梯图如下,Classic 系列处理器在很大程度上已经逐步被 Cortex 系列所取代。
ARM Classic(传统)系列处理器。
ARM7 系列:基于 ARMv3 或 ARMv4 架构,包括 ARM7TDMI-S 和 ARM7EJ-S 处理器。
ARM9 系列:基于 ARMv5 架构,包括 ARM926EJ-S、ARM946E-S 和 ARM968E-S 处理器。
ARM11 系列:基于 ARMv6 架构,包括 ARM1136J(F)-S、ARM1156T2(F)-S、ARM1176JZ(F)-S 和 ARM11MPCore 处理器。
ARM Cortex-M系列处理器。
ARM Cortex-M 系列处理器常见的包括 Cortex-M0、Cortex-M0+、Cortex-M3、Cortex-M4、Cortex-M7。
Cortex-M0 是最小的 ARM 处理器,8/16 位应用,体积极小、能耗很低且编程所需要的代码占用量极少,常见的Cortex-M0 处理器有 NXP 的 LPC1100 系列、意法半导体的 STM32F0主流MCU系列。
Cortex-M0+ 是在 Cortex-M0 基础上开发的能效极高的处理器,其保留了 Cortex-M 的全部指令集和数据兼容性,以接近 8 位系统的成本开销获取 32 位系统的性能,常见的 Cortex-M0+ 处理器有 NXP 的 LPC1100 系列和意法半导体的STM32G0高性能系列、STM32L0低功耗系列。
Cortex-M3 处理器是行业领先的 32 位处理器,具有较高的性能和较低的动态功耗,支持硬件除法、单周期乘法和位字段操作在内的 Thumb-2 指令集,最多可以提供 240 个具有单独优先级、动态重设优先级功能和集成系统时钟的系统中断。常见的型号有NXP 的 LPC1300 系列和 LPC1700 系列;意法半导体的 STM32F1主流MCU、STM32F2高性能系列、STM32L1超低功耗系列。
Cortex-M4 是 Cortex-M3 的升级版,将 32 位控制与领先的数字信号处理技术集成来满足需要很高能效级别的市场,主要实际应用型号包括德州仪器(TI)的 TM4C 系列和意法半导体的 STM32F3主流系列、STM32F4、STM32G4高性能系列、STM32L4低功耗系列。
Cortex-M7是高性能的内核,其运算效能是Cortex-M4的二倍。其中包括六层的超纯量管线有分支预测,有可选的单精度浮点运算器或双精度.主要实际应用型号包括NXP的RT1050,意法半导体的STM32F7系列、STM32H7系列。
Cortex-A 处理器
ARM Cortex-A处理器包括 Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A12、Cortex-A15、Cortex-A50、Cortex-A72共8个子系列。
Cortex-A5 处理器是体积最小、功耗最低的应用型处理器,并且可以带来完整的网络体验,可为现有的 ARM926EJ-S 和 ARM1176JZ-S 处理器设计提供高价值的迁移途径。
Cortex-A7 处理器是一种高能效应用处理器,除了低功耗应用外,还支持低成本、全功能入门级智能手机,该处理器与其他 Cortex-A 系列处理器完全兼容并整合了高性能 Cortex-A15 处理器的所有功能,包括虚拟化、大物理地址扩展(LPAE)NEON 高级 SIMD 和 AMBA 4 ACE 一致性。单个 Cortex-A7 处理器的能效是 ARM Cortex-A8 处理器的 5 倍,性能提升了 50%,而尺寸仅为后者的五分之一,支持如今的许多主流智能手机。目前提供 Cortex-A7 的厂商包括德州仪器(TI)、三星(SAMSUNG)、飞思卡尔(Freescale)、博通(Broadcom)、海思半导体(HISILICON)和 LG。
Cortex-A8 处理器基于 ARMv7 架构,支持 1GHz 以上的工作频率,采用了高性能、超标量微架构及用于多媒体和 SIMD 处理的 NEOD 技术,可以满足 300mW 以下运行的移动设备的低功耗要求,目前提供 Cortex-A8 的厂商有德州仪器(TI)、三星(SAMSUNG)、飞思卡尔(Freescale)、博通(Broadcom)和 ST(意法半导体)。
Cortex-A9 处理器是低功耗或散热受限的成本敏感型设备的首选处理器,其支持多核,在用作单核心的时候性能比 Cortex-A8 提升了 50% 以上,其主要用于主流智能手机、平板电脑、多媒体播放器等。
Cortex-A12 是 Cortex-A9 的升级版,专注应用于智能手机和平板电脑,该芯片使用较少。
Cortex-A15 处理器是基于 ARMv7 架构是Cortex-A 系列处理器的最新产品,也是最高性能产品,和其他处理器系列兼容,通常应用于移动计算、高端数码家电、服务器和无线基础架构。
Cortex-A50 系列处理器基于 ARMv8 架构, 提供了 A53 和 A57 两种型号的处理器,目前在手机、平板等智能终端设备中得到广泛应用。
Cortex-A72处理器基于ARMv8-A架构,是ARM性能最出色、最先进的处理器。使用设备涵盖高阶的智能手机、中型平板电脑、大型平板电脑。
清单
STM32F103C8T6 1个,Jlink下载线 1根。
MG90S舵机 1个
12V电源 1个,12V转5V降压模块(给舵机供电) 1个。
杜邦线数根
MG90S舵机
如图所示,舵机有三根线,红色接5V正极,黑色接地;黄色为信号线,接收PWM信号。
实物图
输出PWM控制舵机
STM32控制舵机,总的来说是向舵机信号线发送周期为20ms的PWM(Pulse Width Modulation 脉冲宽度调制)信号来控制舵机转角,PWM脉冲的占空比决定了舵机的转角位置,对应关系如下图;
STM32靠定时器TIM实现PWM信号的输出,STM32有多个定时器,分为通用定时器和高级定时器,每个通用定时器都可以输出4路PWM,本文采用TM2_CH4,及定时器2的第4路PWM;对应STM32F103C8T6上的PB11引脚;
创建工程输出PWM
本文使用STM32CubeMX创建工程,更加简单高效,即便对单片机不熟悉也可操作成功;
一、打开STM32CubeMX,新建一个工程,搜索并选择STM32F103C8,然后start project;
二、进行基本设置,配置RCC、SYS、HCLK。
RCC -> 设置高速外部时钟HSE 选择外部时钟源。
SYS -> 选择Debug方式 serial wire。
HCLK -> 设置为72MHZ。
三、设置定时器
选择TIM2
选择内部时钟源
设置Channel4为PWM模式。
右侧对应管脚自动设置为复用模式。
设置定时器参数
控制舵机我们需要设置PWM输出一个周期时间为20ms的信号,定时器时钟为72Mhz。
预分频Prescaler设置为720-1,则单周期为72M/(Prescaler + 1) = 100Khz(0.01ms)
以20ms为周期,则Counter Period为20ms/0.01ms - 1 = 1999。
此处可设定默认脉冲宽度为0.5ms,及0.5/20*2000 = 50。
四、接下来设置输出格式
添加工程名PWM
修改IDE为MDK-ARM V5。
在Code Genetator中设置包含库与工程格式。
至此STM32CubeMX已设置完成,接下来GENERATE CODE,并打开文件;
在main函数中启动定时器,并输出一定的脉冲的PWM信号即可驱动舵机;
五、修改代码
在main.c文件相应位置处添加如下代码。
启动PWM输出
输出PWM信号
/* USER CODE BEGIN Includes */。
#include "stdio.h"。
/* USER CODE END Includes */。
/* USER CODE BEGIN 2 */。
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4); //启动定时器。
int compareValue = 150; //将compareValue设置为50、150、250分别对应0°、90°、180°。
/* USER CODE END 2 */。
/* Infinite loop */。
/* USER CODE BEGIN WHILE */。
while (1)
{
/* USER CODE END WHILE */。
/* USER CODE BEGIN 3 */。
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, compareValue); //输出PWM信号。
HAL_Delay(10);。
}
/* USER CODE END 3 */。
登录后复制

添加完以上代码之后,编译,然后通过JLink将程序LOAD到STM32F103C8T6,将舵机信号线连接PB11(TIM2_CHANNEL4)口,并接上电源,舵机即可转动到指定角度;由以上定时器设定可知,compareValue值50、150、250 对应 0.5ms、1.5ms、2.5ms 对应 0°、90°、180°;若想让舵机连续转动,在50~250内循环改变compareValue值即可;
六、接线
开始时用单片机的5V输出给舵机供电,舵机哒哒哒响,但是不转,怀疑是供电不给力,单独供电后驱动成功;
JIink连接电脑和单片机,下载程序到单片机并给单片机供电。
舵机黄色信号线接STM32F103C8T6引脚PB11,接收PWM信号。
舵机红色电源线接稳压板5V输出正极,舵机黑色地线需与单片机地相连。
调试
实操中可能会出现各种各样的问题,以下有几种调试方法。
一、舵机测试
调试模块一端接电,一段接舵机,手动模式下,舵机会跟着旋钮同步旋转,可以用来测试舵机是否健康;
二、串口调试助手
可下载串口调试助手,用ttl转USB模块连接电脑,在特定位置进行打印输出,检查程序是否按预设运行。
stm32