您现在的位置是:网站首页> 硬件

STM32开发相关信息收集

  • 硬件
  • 2025-04-17
  • 1231人已阅读
摘要

STM32开发相关信息收集

--FreeRTOS,uCos等一般是和用户程序一起编译成固件--

STM32编程的三种方式

STM32入门教程-2023版

STM32 开发板入门套件视频教程

STM32芯片型号的命名解读

ST-LINK的驱动位置

使用串口烧写stm32程序(串口ISP)

关于STM32的C库包下载和使用方法

STM32标准固件库的下载和工程模板的建立

用STM32代替arduino开发

带你了解怎么在arduino开发环境中使用STM32

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 固件库的主要特点

  1. 简化硬件操作
    • 封装了底层硬件寄存器的操作,提供了一套易于使用的函数接口。
    • 开发者可以通过调用这些函数来配置和控制 STM32 的外设(如 GPIO、定时器、串口、SPI、I2C 等)。

  2. 模块化设计
    • 按外设功能划分模块,每个模块对应一个外设(如 GPIO 模块、USART 模块等)。
    • 每个模块包含初始化函数、配置函数和操作函数。

  3. 跨平台兼容
    • 固件库支持多种 STM32 系列芯片(如 STM32F0、STM32F1、STM32F4 等)。
    • 代码可以在不同型号的 STM32 芯片上移植,只需少量修改。

  4. 代码效率高
    • 固件库的底层代码经过优化,可以直接调用硬件寄存器,执行效率较高。

  5. 学习曲线较陡峭
    • 虽然提供了 API,但开发者仍需要了解 STM32 的硬件架构和外设功能。
    • 需要熟悉寄存器的配置方式以及外设的工作原理。

STM32 固件库的结构

固件库的代码结构通常分为以下几个部分:
  1. 头文件(.h)
    • 定义了外设的寄存器地址、数据结构和宏定义。
    • 例如:stm32f10x_gpio.h 是 GPIO 模块的头文件。
  2. 源文件(.c)
    • 实现了外设的初始化和操作函数。
    • 例如:stm32f10x_gpio.c 是 GPIO 模块的源文件。
  3. 外设驱动函数
    • 每个外设模块(如 GPIO、USART、SPI 等)都有对应的驱动函数。
    • 例如:GPIO_Init() 用于初始化 GPIO 引脚,USART_Init() 用于初始化串口。
  4. 库函数
    • 提供了一些通用的库函数,如延时函数、中断处理函数等。

使用 STM32 固件库的步骤

  1. 配置外设参数
    • 使用 xxx_InitTypeDef 结构体定义外设的配置参数。
    • 例如:GPIO_InitTypeDef GPIO_InitStructure 用于定义 GPIO 的模式、输出速度等。

  2. 初始化外设
    • 调用初始化函数(如 GPIO_Init())来配置外设。
    • 通常需要先使能外设的时钟(如 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE))。

  3. 操作外设
    • 使用库提供的函数操作外设,如 GPIO_SetBits()GPIO_ResetBits() 用于设置或清除 GPIO 引脚的电平。

  4. 中断处理
    • 如果需要使用中断,可以配置中断优先级,并编写中断服务函数。

示例代码

以下是一个简单的 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 库的对比

STM32 的固件库(Standard Peripheral Library)和 HAL 库(Hardware Abstraction Layer)是两种不同的开发方式:
  • 固件库:更接近硬件,代码效率高,但学习曲线较陡峭。
  • HAL 库:抽象层次更高,代码更易读,适合初学者,但可能牺牲一些性能。
如果你是初学者,建议从 HAL 库入手;如果你对性能要求较高,或者熟悉 STM32 硬件架构,可以使用固件库。



STM32入门教程-2023版

查看原视频



stm32 开发板入门套件视频教程

查看原视频



STM32芯片型号的命名解读

Keil uVision5 STM32 pack安装包

FPGA 现场可编程门阵列,通过编程改变内部硬件结构,实现锁需功能的芯片

jtag接口下载程序 标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。

STM32芯片型号的命名解读

1.png

1.png



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,也即是串口下载功能:

1.png



要使用串口下载功能,需要先生成要烧写的*.hex文件,在keil如下设置,然后再编译,就能生成hex目标文件了:

2.png



在下载前,硬件上,需要在开发板上电前设置一下boot引脚的状态,以使得stm32芯片在启动运行时进入系统存储区,运行串口下载程序;按照下表,我们需要把boot0引脚拉低、boot1引脚拉高,才能在复位后进入系统存储器运行:


3.png


设置好芯片的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:


4.png


接下来就是等待下载完成了,下载时会有进度条,下载完成后也会有提示:

5.png



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开发板

  1. Arduino IDE中打开“文件 -> 首选项”,在“附加开发板管理器地址”中输入:https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
    开发板管理器网址
  1. Arduino IDE中打开“工具 -> 开发板 -> 开发板管理器”,滑倒最下面可以看到:
    开发板管理器
    安装最新的即可,我的版本是1.9.0
  1. 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的C库包,提高开发效率。



STM32标准固件库的下载和工程模板的建立

点击查看原文

一、先去ST官方下载固件库:st.com/content/st_com/en.html(站点账户可在加密区查找)


1、进入官网,按照图片的指示一步一步的来

1.png

2、选择STM32 Standard peripheral Libraries

2.png

3、先择自己对应开发板的型号,我这里用的是STM32f103系列的


4、下载固件包,这里选择3.5.0

3.png



5、点击下载后,会弹出许可协议,选择我接受ACCERT























Top