Loading

STM32学习记录(一):STM32概述

STM32F10x系统结构图

STM32F10x的系统结构图如下[1]

image

框图中名词解释,按A~Z的顺序排列:

  • AHB(Advanced High performance Bus):先进高性能总线
  • APB(Advanced Peripheral Bus):先进外设总线
  • ADC(Analog-to-Digital Converter):模拟/数字转换器
  • BKP(Backup registers):备份寄存器
  • CAN(Controller Area Network):控制器局域网
  • DAC(Digital-to-Analog Converter):数字/模拟转换器
  • DCode (Data Code):数据总线
  • DMA(Direct Memory Access):存储器直接访问
  • Flash(Flash Memory):闪存
  • FSMC(Flexible Static Memory Controller):可变静态存储控制器
  • GPIO(General-purpose input/output):通用输入输出
  • ICode (Insurtcution Code):指令总线
  • I2C(Inter-Integrated Circuit):集成电路总线
  • IWDG(Independent watchdog):独立看门狗
  • NVIC(Nested Vectored Interrupt Controller):嵌套向量中断控制器
  • RCC(Reset Clock Controller):复位时钟控制器
  • RTC(Real-time clock):实时时钟
  • System:系统总线
  • SRAM(Static Random-Access Memory):静态随机存取存储器
  • SDIO(Secure Digital Input and Output):安全数字输入和输出接口
  • SPI(Serial Peripheral Interface):串行外围设备接口
  • TIM(Timer):定时器
  • USART(Universal Synchronous Asynchronous Receiver/Transmitter):通用同步异步收发器
  • USB(Universal Serial Bus):通用串行总线
  • WWDG(Window watchdog):窗口看门狗

Cortex-M3处理器内部有3个外设:[2]

  1. Nested vectored interrupt controller(NVIC),嵌套向量中断控制器(NVIC)是一种支持低延迟中断处理的嵌入式中断控制器。
  2. System control block(SCB),系统控制块(SCB)是处理器的程序员模型接口。它提供系统实现信息和系统控制,包括系统异常的配置、控制和报告。
  3. System timer(SysTick),系统定时器SysTick是一个24位向下计数的定时器。可以用作实时操作系统(RTOS)的滴答计时器或简单的计数器。

STM32F10x时钟树

参考另一篇博客:https://www.cnblogs.com/qianxiaohan/p/18278597

配置STM32编程环境

单片机型号: STM32F103C8T6

编程环境:

​ Keil μVision V5.24.2

​ VS Code 1.92

调试器Debugger: ST-Link V2

程序下载工具:STM32 ST-LINK Utility或Keil集成的程序下载工具

配置Keil环境

  1. 安装Keil MDK
  2. 安装芯片支持包,例如STM32F10x系列,双击Keil.STM32F1xx_DFP.2.2.0.pack即可安装
  3. 使用注册机pojie软件

安装Keil MDK过程可参考:https://www.cnblogs.com/tb-chen/p/18079328

标准库

Keil 与 VS Code搭配使用

有两种方式:

  • 安装插件Keil Assistant,这个插件很方便,实际上就是把VS Code当做一个编辑器来用,VS Code的插件会调用Keil,将Keil的输出结果显示到VS Code的控制台。
  • Arm官方提供了VS Code插件,安装Arm官方提供的插件Arm Keil Studio Pack (MDK v6),我没有测试过。

Keil Assistant插件的安装以及使用教程:GitHub - github0null/keil-assistant

需要注意的是,比如要在项目的某文件夹下添加文件,需要在Keil中使用Manage Project Items选项将文件添加进项目中再编译项目,才不会出错。

创建项目

两种创建项目的方式:

创建工程模板

STM32F103C8T6为例。

下载标准库外设:https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html

模板将按照以下文件夹结构创建:

├─CMSIS								//CMSIS:Cortex MicroController Software Interface Standard
├─Startup							//stm32f10x启动文件,根据单片机配置选择不同的启动文件     
├─StdPeriph_Driver					//存放标准库外设的驱动文件
├─UserLib							//存放用户自定义的库文件
└─User								//主函数所在目录

将上述下载好的标准库文件stsw-stm32054_v3-6-0中的

CMSIS

1.将stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport路径下的以下文件:

  • core_cm3.c
  • core_cm3.h

​ 复制到工程模板的CMSIS文件夹下。

2.将stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x路径下的以下文件:

  • stm32f10x.h
  • system_stm32f10x.c
  • system_stm32f10x.h

​ 复制到工程模板的CMSIS文件夹下。

启动文件目录

stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下的.s文件复制到Startup文件夹下

外设的驱动文件

stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver下的incsrc文件夹复制到StdPre_Driver

用户文件夹

这里存放的是用户需要自行修改的文件。

stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template下的:

  • stm32f10x_conf.h
  • stm32f10x_it.c
  • stm32f10x_it.h

复制到User文件下。

在User文件夹下创建main.c

#include "stm32f10x.h"                  // Device header

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOC, GPIO_Pin_13);
	while (1)
	{
		
	}
}

在项目中创建和上述文件夹同名的分组,并将上面的文件添加到其中。注意:启动文件只需要添加一个.s文件

标准库工程模板结构

创建后的STM32F103C8T6标准库的工程模板,文件结构如下:

│  keilkill.bat						//批处理文件,用于删除Objects文件夹下的文件
│  Project.uvoptx					//保存keil μVision中的一些配置信息
│  Project.uvprojx					//keil μVision工程文件
│  
├─CMSIS								//CMSIS:Cortex MicroController Software Interface Standard
│      core_cm3.c					//这个C文件没有使用,可以移除
│      core_cm3.h					//CMSIS Cortex-M3核心外设访问层头文件,包含了核心外设的寄存器地址定义如NVIC、SCB、SysTick
│      stm32f10x.h					//CMSIS Cortex-M3 Device Peripheral Access Layer Header File. 
│      system_stm32f10x.c			//在其中定义了SystemInit、SystemCoreClock等等
│      system_stm32f10x.h			//CMSIS Cortex-M3 Device Peripheral Access Layer System Header File.
│      
├─DebugConfig							//Keil μVision自动生成的文件夹,存放调试信息   
├─Listings								//Keil μVision自动生成的文件夹
├─Objects								//Keil μVision自动生成的文件夹,存放编译后的文件
├─Startup								//stm32f10x启动文件,根据单片机配置选择不同的启动文件
│      startup_stm32f10x_cl.s
│      startup_stm32f10x_hd.s
│      startup_stm32f10x_hd_vl.s
│      startup_stm32f10x_ld.s
│      startup_stm32f10x_ld_vl.s
│      startup_stm32f10x_md.s
│      startup_stm32f10x_md_vl.s
│      startup_stm32f10x_xl.s
│      
├─StdPeriph_Driver					//存放标准库外设的驱动文件
│      misc.c						//此文件其余固件库函数
│      misc.h
│      stm32f10x_xxx.c				//stm32f10x系列的外设标准库文件
│      stm32f10x_xxx.h
│
├─UserLib							//存放用户自定义的库文件
└─User								//这个文件夹的文件需要自行修改
        main.c						
        stm32f10x_conf.h			//配置文件,包含了所有标准库文件,如需使用标准库,需添加宏USE_STDPERIPH_DRIVER
        stm32f10x_it.c				//stm32f10x系列处理中断的文件
        stm32f10x_it.h

标准库各个文件之间的关系:https://www.cnblogs.com/stm32-c/p/13874308.html

Keil中进行如下设置:

  • 添加宏定义STM32F10X_MDUSE_STDPERIPH_DRIVER

    • 添加STM32F10X_MD才能使用某些常量,比如中断枚举常量IRQn

    • 添加USE_STDPERIPH_DRIVER,才能使用头文件stm32f10x_conf.h,而stm32f10x_conf.h中包含了所有的标准外设库文件

  • 添加CMSISStartupStdPeriph_DriverUserLibUser这几个文件夹的路径,这样编译器在编译时就能找到对应的文件。路径要包含到文件的上一级目录。

keil设置

编译器AC5和ADC6的选择

AC5编译器:

如果使用的是固件库STM32F10x_StdPeriph_Lib_V3.5.0中的core_cm3.h,固件库中的core_cm3.h版本太老,在keil中只能使用V5版本的编译器。

AC6编译器:

对于STM32F10x系列的单片机安装支持包Keil.STM32F1xx_DFP.2.2.0.pack后,core_cm3.hKeil安装目录\ARM\PACK\ARM\CMSIS\5.0.1\CMSIS\Include。总共需要3个文件:core_cm3.hcmsis_compiler.hcmsis_armclang.h,这样在Keil中就可以选择AC6进行编译,但是就不能使用AC5进行编译了。

程序下载

在STM32F10xxx中,有3中引导模式:

image

BOOT1和BOOT0都接低电平,配置为从Flash Memory启动,网上买的最小系统板默认是从STM32中的Flash Memory中启动。

将编译后的程序下载到flash memory中,常见的Debugger有ST-Link,J-Link,CMSIS-DAP等等。ST-Link调试器参考:https://blog.csdn.net/qq_52102933/article/details/126830904,ST-Link也可使用STM32 ST-LINK Utility软件烧录HEX文件到单片机中。

HAL库

等待后续更新。。。

资料下载

标准库官网下载:https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html

STM32F103系列文档下载:https://www.st.com.cn/zh/microcontrollers-microprocessors/stm32f103/documentation.html

Keil MDK(含注册机、支持包)下载:https://pan.baidu.com/s/1l0RHFE2BJziakhdwaNUeUA?pwd=1234 提取码:1234

keil官网支持包下载:https://www.keil.arm.com/packs/stm32f1xx_dfp-keil/boards/


  1. 《STM32F10x参考手册》:3.1 System architecture ↩︎

  2. 《Coterx-M3编程手册》:1.3.4 Cortex®-M3 core peripherals ↩︎

posted @ 2024-08-05 14:00  记录学习的Lyx  阅读(134)  评论(0)    收藏  举报