您现在的位置是:网站首页> 硬件
STM32开发相关信息收集
- 硬件
- 2025-04-17
- 1232人已阅读
STM32开发相关信息收集
--FreeRTOS,uCos等一般是和用户程序一起编译成固件--
Window7下搭建Keil(MDK)开发环境(ST-LINK下载器)可由STM32CubeMX生成基础代码(win7最高支持CubeMX 5.1.0版本)
如何用 STM32CubeMX 创建项目并导入 Keil5,查看
STM32编程的三种方式
STM32编程主要有三种方式:基于寄存器编程、基于标准库编程和基于HAL库编程。每种方式都有其优缺点,适合不同的开发需求。
🔧 基于寄存器编程
这种方式类似于51单片机,用户需要直接操作寄存器来实现功能。它是最底层、最直接的编程方式,效率也很高。但由于STM32的寄存器非常多且结构复杂,直接操作寄存器难度较大,因此这种方式不太推荐。
📚 基于标准库编程
使用ST官方提供的标准外设库(也称为固件库),通过调用这些函数来间接操作寄存器。这种方式既满足了配置寄存器的需求,又提高了开发效率。标准库函数封装得比较好,适合有一定经验的开发者使用。
🖥️ 基于HAL库编程
采用图形化界面快速配置STM32,非常适合初学者快速上手。这种方式隐藏了底层逻辑,适合对STM32不熟悉的开发者。使用HAL库可以像使用Arduino一样方便,但可能无法深入了解底层细节。
选择哪种编程方式取决于你的开发需求和个人经验。如果你追求最高效率和底层控制,可以选择基于寄存器编程;如果你希望快速上手且不深入底层细节,可以选择基于HAL库编程。
STM32 固件库的主要特点
- 简化硬件操作:
- 封装了底层硬件寄存器的操作,提供了一套易于使用的函数接口。
- 开发者可以通过调用这些函数来配置和控制 STM32 的外设(如 GPIO、定时器、串口、SPI、I2C 等)。
- 模块化设计:
- 按外设功能划分模块,每个模块对应一个外设(如 GPIO 模块、USART 模块等)。
- 每个模块包含初始化函数、配置函数和操作函数。
- 跨平台兼容:
- 固件库支持多种 STM32 系列芯片(如 STM32F0、STM32F1、STM32F4 等)。
- 代码可以在不同型号的 STM32 芯片上移植,只需少量修改。
- 代码效率高:
- 固件库的底层代码经过优化,可以直接调用硬件寄存器,执行效率较高。
- 学习曲线较陡峭:
- 虽然提供了 API,但开发者仍需要了解 STM32 的硬件架构和外设功能。
- 需要熟悉寄存器的配置方式以及外设的工作原理。
STM32 固件库的结构
- 头文件(.h):
- 定义了外设的寄存器地址、数据结构和宏定义。
- 例如:
stm32f10x_gpio.h
是 GPIO 模块的头文件。 - 源文件(.c):
- 实现了外设的初始化和操作函数。
- 例如:
stm32f10x_gpio.c
是 GPIO 模块的源文件。 - 外设驱动函数:
- 每个外设模块(如 GPIO、USART、SPI 等)都有对应的驱动函数。
- 例如:
GPIO_Init()
用于初始化 GPIO 引脚,USART_Init()
用于初始化串口。 - 库函数:
- 提供了一些通用的库函数,如延时函数、中断处理函数等。
使用 STM32 固件库的步骤
- 配置外设参数:
- 使用
xxx_InitTypeDef
结构体定义外设的配置参数。 - 例如:
GPIO_InitTypeDef GPIO_InitStructure
用于定义 GPIO 的模式、输出速度等。 - 初始化外设:
- 调用初始化函数(如
GPIO_Init()
)来配置外设。 - 通常需要先使能外设的时钟(如
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE)
)。 - 操作外设:
- 使用库提供的函数操作外设,如
GPIO_SetBits()
和GPIO_ResetBits()
用于设置或清除 GPIO 引脚的电平。 - 中断处理:
- 如果需要使用中断,可以配置中断优先级,并编写中断服务函数。
示例代码
以下是一个简单的 GPIO 配置和操作示例:
#include "stm32f10x.h"
int main(void){
GPIO_InitTypeDef GPIO_InitStructure;
// 使能 GPIOA 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 配置 GPIOA 的第 5 引脚为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1)
{
// 设置 GPIOA 的第 5 引脚为高电平
GPIO_SetBits(GPIOA, GPIO_Pin_5);
// 延时
for (int i = 0; i < 1000000; i++);
// 设置 GPIOA 的第 5 引脚为低电平
GPIO_ResetBits(GPIOA, GPIO_Pin_5);
// 延时
for (int i = 0; i < 1000000; i++);
}
}
STM32 固件库的优缺点
- 优点:
- 提供了丰富的外设驱动函数,简化了硬件开发。
- 代码效率较高,适合对性能要求较高的应用。
- 跨平台兼容性好,便于代码移植。
- 缺点:
- 学习曲线较陡峭,需要熟悉 STM32 的硬件架构。
- 文档和示例代码可能不够丰富,不如 HAL 库友好。
- 代码可读性较差,不如 HAL 库直观。
与 HAL 库的对比
- 固件库:更接近硬件,代码效率高,但学习曲线较陡峭。
- HAL 库:抽象层次更高,代码更易读,适合初学者,但可能牺牲一些性能。
STM32入门教程-2023版
stm32 开发板入门套件视频教程
STM32芯片型号的命名解读
FPGA 现场可编程门阵列,通过编程改变内部硬件结构,实现锁需功能的芯片
jtag接口下载程序 标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
STM32芯片型号的命名解读
STM32是ARM Cortex内核单片机和微处理器市场和技术方面的领先者,目前提供16大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1, L4, L4+,L5, WB,WL),超过1000个型号。
高性能MCU:STM32F2、STM32F4、STM32H7、STM32F7
主流MCU:STM32G0、STM32F0、S TM32F1、STM32G4、STM32F3
超低功耗MCU:STM32L0、STM32L1、S TM32L4+、STM32L4、STM32U5、STM32L5
无线系列MCU:STM32WB、STM32WL
如此多的型号,怎么区分呢?我们以STM32F407ZET6为例详细解读一下
(1)STM32:STM32代表ARM Cortex-M4内核的32位微控制器。
(2)F:F代表芯片子系列。
(3)407:407代表高性能基础系列。
(4)R:代表引脚数,其中T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚。
(5)B:代表内嵌Flash容量,其中6代表32K字节Flash,8代表64K字节Flash,B代表128K字节Flash,C代表256K字节Flash,D代表384K字节Flash,E代表512K字节Flash。
(6)T:代表封装,其中H代表BGA封装,T代表LQFP封装,U代表VFQFPN封装。
(7)6:代表工作温度范围,其中6代表-40——85℃,7代表-40——105℃。
擅长领域:STM32系列嵌入硬件架构设计,逻辑电路的编程,PCB设计
STM32主要产品型号:STM32F407工控板 - EMB8628I、STM32F407工控板 - EMB8626I、STM32F107工控板 - EMB8616I、STM32F107工控板 - EMB8600I、STM32工控模块、工业DTU模块、工业RTU模块
使用串口烧写stm32程序(串口ISP)
stm32的芯片,出厂时都自带了串口烧写功能,可以在不使用特殊的下载器、只用串口的条件下将程序烧写进去。
串口烧写需要的上位机软件,网上有很多免费的软件可用,我们使用sscom这个串口软件,可以从小工具里找到它带的stm32 ISP,也即是串口下载功能:
要使用串口下载功能,需要先生成要烧写的*.hex文件,在keil如下设置,然后再编译,就能生成hex目标文件了:
在下载前,硬件上,需要在开发板上电前设置一下boot引脚的状态,以使得stm32芯片在启动运行时进入系统存储区,运行串口下载程序;按照下表,我们需要把boot0引脚拉低、boot1引脚拉高,才能在复位后进入系统存储器运行:
设置好芯片的boot0和boot1引脚后,连接计算机的串口到开发板的串口(stm32能支持串口下载的是串口1)。
如果是M3内核非互联网型的板子这里的串口必须是串口1,对应为GPIO9和GPIO10。如果是M4内核,可以是下述端口。
● USART1(PA9/PA10)
● USART3(PB10/11 和 PC10/11)
● CAN2(PB5/13)
● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)
在sscom软件中,打开要下载的hex目标文件;然后将stm32芯片上电或者复位一下,再点击开始下载stm:
接下来就是等待下载完成了,下载时会有进度条,下载完成后也会有提示:
Stm32串口下载的功能,在想要节省一些IO口资源时特别有用,如果印制板的面积特别小则可以省去SWD或JTAG口的空间;在IO口不够用时,省下来的SWD/JTAG口引脚可以配置为GPIO;在没有下载器的情况下也可以通过串口下载来应应急。
用STM32代替arduino开发
arduino一直以来深受广大极客的喜爱,丰富的库以及外围扩展,但是Atmega328已经比较老旧了,STM32相比而言,性能要比arduino强大了太多,因此我们选择用STM32F103C系列来代替arduino开发
下面跟随我们一起在arduino IDE中搭建stm32开发环境吧
1
硬件准备:
STM32F103C8T6 蓝色开发板 x 1(如图)
软件准备:
Arduino开发环境
操作步骤:
运行Arduino。选择文件->首选项,在附加开发板管理器中填入以下网址:
http://dan.drown.org/stm32duino/package_STM32duino_index.json
选择‘好’,保存设置。退出该界面
打开工具->开发板->开发板管理器
如上图所示。点击后会需要一段时间从网络上加载开发板信息,请耐心等待。
加载完成后,选择‘贡献’项,搜索stm32,选择STM32F1XX 开发包。
下载与安装将花费一段(大约十几分钟)时间。。
安装完之后,工具--开发板管理器里面找到 "Genneric STM32F103C series"选中即可
下载和烧写Bootloder
首先我们要下载Bootloader,进入一个开源项目,地址如下:
https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binaries
选择你的STM32最小系统板的除电源指示灯外的另一个LED所对应的接口名字的文件下载(一定要选择对应的),我的板子为PC13,所以下载这个:
然后使用USB转串口线连接开发板和电脑USB,其中串口线的TX RX分布连接开发板PA10 PA9,然后将BOOT0短接3.3V BOOT1短接GND进入烧写状态,串口线的VCC GND分布连接开发板的5V 即可无需另外供电。
所需工具:flash_loader_demo_v2.8.0
ST官方下载地址:http://www.st.com/en/development-tools/flasher-stm32.html
选择USB串口线的串口号,注意需要boot0 为1,boot1 为0(默认全是0)
在下列红色框内添加下载的bin文件,next,即可完成下载(bootloder的烧写)
bootloader下载完成后,即可进行用电脑通过MicroUSB连接板子进行开发了,不过得先装一下驱动。
驱动安装
去github上下载代码
Arduino_STM32:https://github.com/rogerclarkmelbourne/Arduino_STM32
下载压缩文件并解压,以管理员身份运行install_drivers.bat和install_STM_COM_drivers.bat
然后将开发板的串口线断开,将开发板BOOT0接GND后,使用手机数据线连接开发板MicroUSB和电脑USB开始安装驱动,会发现一个新的USB串行设备,下面为COM11
下载例程测试
将Arduino IDE的上传方式设置为STM32duino bootloader
端口号改成新的串口号
打开一个例程,LED闪烁的,例程里引脚为PB1,修改PC13(和板子对应,也可以不修改接一个LED即可)
例程如下,然后编译上传:
出现Done就代表上传成功了,
然后就可以看到LED闪烁了,大功告成,喝杯水休息下吧。
带你了解怎么在arduino开发环境中使用STM32
如果只是想做点东西玩玩,不想深入的学可以考虑用arduino开发方式来学习STM32,当然用的最多的还是Keil,然后这两年大家都在往vscode上转,主题界面和代码补齐功能确实非常赞
在Arduino中安装STM32开发板
- Arduino IDE中打开“文件 -> 首选项”,在“附加开发板管理器地址”中输入:https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
- Arduino IDE中打开“工具 -> 开发板 -> 开发板管理器”,滑倒最下面可以看到:
安装最新的即可,我的版本是1.9.0
- Arduino IDE中打开“工具 -> 开发板”,选择合适的开发板类型,例如最简单的STM32板子。我选择的是RUMBA32板子
3. 安装STM32CubeProgrammer
4. 添加STM32CubeProgrammer中的bin文件夹的路径到系统路径中
5. 配合好BOOT0,使用串口/DFU进行烧录
在这里只需要STM32CubeProgrammer初次设置好了是串口方式/DFU方式,之后就不需要用STM32CubeProgrammer了
在DFU模式中,如果需要重新下载程序,需要BOOT0为1,按reset复位,之后才可以烧录程序
其原理应该是BOOT0为1时,按reset后运行DFU程序,系统进行DFU模式,之后就可以用Arduino进行烧录
配置USB支持串口,则可以直接使用USB进行串口读取与发送
ST-LINK的驱动位置
安装目录如:c:\Keil_v5\ARM\STLink\USBDriver
关于STM32的C库包下载和使用方法
1. 芯片支持包(DFP)的下载
- 通过Keil官方页面下载:
- 访问Keil的官方页面:https://www.keil.arm.com/devices/
- 搜索结果中提到可以直接搜索芯片型号(如STM32F0)并选择厂商为Keil,找到对应的芯片包进行下载。
- 通过STM32CubeMX管理工具下载:
- 登录ST账号后,打开STM32CubeMX的固件包管理工具。
- 使用“Check for Update”功能,可以更新固件包并管理库包。
2. 固件包(Firmware Package)的下载
- 通过ST官网下载:
- 搜索固件包路径,下载对应系列芯片的固件包。
- 通过STM32CubeMX导入:
- 在STM32CubeMX中,固件包会自动下载并存储在路径
xxx\STM32CubeMX\Repository\
中,方便后续使用。
3. 库包的使用方法
- 芯片支持包(DFP)的使用:
- DFP为IDE提供芯片识别支持,包含基础设备配置文件、启动代码和最小化驱动。
- 在Keil中安装后,可以直接识别芯片并进行配置。
- 固件包的使用:
- 固件包包含函数库、数据结构和宏定义,用于封装寄存器操作,简化开发流程。
- 在STM32CubeMX中导入固件包后,可以生成初始化代码,方便直接调用。
4. 开发环境的配置
- Keil环境:
- 在Keil中安装芯片支持包后,可以创建新的STM32工程。
- 配置芯片型号和外设,使用库函数进行开发。
- STM32CubeMX:
- 使用STM32CubeMX生成初始化代码,导入到Keil或其他IDE中进行开发。
STM32标准固件库的下载和工程模板的建立
一、先去ST官方下载固件库:st.com/content/st_com/en.html(站点账户可在加密区查找)
1、进入官网,按照图片的指示一步一步的来
2、选择STM32 Standard peripheral Libraries
3、先择自己对应开发板的型号,我这里用的是STM32f103系列的
4、下载固件包,这里选择3.5.0
5、点击下载后,会弹出许可协议,选择我接受ACCERT
上一篇:Arduino通用研发信息收集
下一篇:器件使用常识