文章目录

  • STM32介绍
    • STM32命名
    • armV7的三个系列
    • STM32F103
      • STM32F103资源
      • STM32F103总线架构
      • STM32F103引脚
    • STM32F407
      • 芯片
      • STM32F407资源
      • F407总线架构
      • STM32F407系统框图
    • STM32F407地址分配
  • STM32名词解释
  • 英文缩写
    • 端口
    • 寄存器相关
    • 调试相关
    • 系统类
    • 总线
    • 杂类
    • 词汇/词组
  • STM32开发
    • 固件库概念
    • 容量
    • STM32启动模式
  • STM32软件
    • MDK介绍
    • MDK安装
    • 生成HEX文件
    • 支持包安装
    • 添加宏
    • 添加头文件路径
    • 库函数选择外设
    • 编译输出
    • 编译成功
    • flymcu使用
    • XCOM
  • 程序下载电路
  • STM32调试
    • JLink
    • JTAG/SWD
    • SWD与JTAG的端口映射
    • 默认的五个口不能作为IO口输出
    • JTAG/SWD硬件
    • 设置禁止JTAG
    • JLink配置
  • Debug介绍
    • 复位
    • 执行到断点处
    • 挂起
    • 执行进去
    • 执行过去
    • 执行出去
    • 执行到光标处
    • 汇编窗口
    • 观看变量/堆栈窗口
    • 串口打印窗口
    • 内存查看窗口
    • 性能分析窗口
    • 逻辑分析窗口

STM32介绍

STM32命名

armV7的三个系列

A:针对操作系统
R:针对实时系统
M:针对微控制器

STM32F103

STM32F103资源

  • 64KB SRAM
  • 512KB FLASH
  • 2 个基本定时器、4 个通用定时器、2 个高级定时器
  • 2 个 DMA 控制器(共 12 个通道)
  • 3 个 SPI
  • 2 个 IIC
  • 5 个串口
  • 1 个 USB
  • 1 个 CAN
  • 3 个 12 位 ADC、1 个 12 位 DAC
  • 1 个 SDIO 接口、1 个 FSMC 接口
  • 112 个通用 IO 口
  • 84个中断,16个可编程优先级,任意脚中断
  • 带有外部总线(FSMC)可以用来外扩 SRAM 和连接 LCD 等

STM32F103总线架构

四个驱动单元是:

  • 内核 DCode 总线;

    • 该总线将 M3 内核的 DCode 总线与闪存存储器的数据接口相连接,常量加载和调试访问在该总线上面完成。
  • 系统总线;
    • 系统总线:该总线连接 M3 内核的系统总线到总线矩阵,总线矩阵协调内核和 DMA 间访
  • 通用 DMA1;
  • 通用 DMA2;
    • DMA总线将 DMA 的 AHB 主控接口与总线矩阵相连,总线矩阵协调 CPU 的DCode 和 DMA 到 SRAM,闪存和外设的访问。

四被动单元是:

  • AHB 到 APB 的桥:连接所有的 APB 设备;

    • AHB/APB 桥:这两个桥在 AHB 和 2 个 APB 总线间提供同步连接,APB1 操作速度限于36MHz,APB2 操作速度全速。
  • 内部 FlASH 闪存;
  • 内部 SRAM;
  • FSMC;

总线矩阵

  • 总线矩阵协调内核系统总线和 DMA 主控总线之间的访问仲裁,仲裁利用轮换算法。

ICode总线

  • 该总线将 M3 内核指令总线和闪存指令接口相连,指令的预取在该总线上面完成。

STM32F103引脚

STM32F407

芯片

STM32F407资源

  • 内核

    • 32位 高性能ARM Cortex-M4处理器
    • 时钟: 高达168MHz,实际还可以超频一点点
      • stm32f407的主频通过PLL倍频后能够达到168MHz,而且芯片内置一个16MHz的晶振和一个32KHz的晶振,可以满足不同功耗的需求。
    • 支持FPU(浮点运算)和DSP指令
  • 144引脚 114个IO口
  • 存储器容量: 1024K FLASH, 192K SRAM
  • 4~26M的外部高速晶振
  • 内部16MHz的高速RC振荡器
  • 外部低速32.768K的晶振,主要做RTC时钟源
  • 3个12位精度AD[多达24个外部测试通道]
  • 2个12位DA
  • 16个DMA通道,带FIFO和突发支持
  • 定时器多达17个
    • 10个通用定时器(TIM2和TIM5是32位)
    • 2个基本定时器
    • 2个高级定时器
    • 1个系统定时器
    • 2个看门狗定时器-
  • 个I2C接口
  • 6个串口
  • 3个SPI接口
  • 2个CAN2.0
  • 2个USB OTG
  • 1个SDIO

F407总线架构

  • 主系统由 32 位多层 AHB 总线矩阵构成。
  • 总线矩阵用于主控总线之间的访问仲裁管理。
  • 仲裁采取循环调度算法。
  • 总线矩阵可实现以下部分互联:
    八条主控总线是:

    • Cortex-M4 内核 I 总线, D 总线和 S 总线;
    • DMA1 存储器总线, DMA2 存储器总线;
    • DMA2 外设总线;
    • 以太网 DMA 总线;
    • USB OTG HS DMA 总线;
      七条被控总线:
    • 内部 FLASH ICode 总线;
    • 内部 FLASH DCode 总线;
    • 主要内部 SRAM1(112KB)
    • 辅助内部 SRAM2(16KB);
    • 辅助内部 SRAM3(64KB) (仅适用 STM32F42xx 和 STM32F43xx 系列器件);
    • AHB1 外设 和 AHB2 外设;
    • FSMC

STM32F407系统框图

STM32F407地址分配


0x0800 0000开始的flash,从0x2000 0000开始的sram这两部分,其中flash是我们代码烧录的地方,sram是我们程序执行的内存地址。

STM32名词解释

英文缩写

ARM:Advanced RISC MachineAAPCS:ARM Architecture Process call standard ARM体系结构过程调用标准RISC: Reduced Instruction Set Computer 精简指令集计算机RTOS:Real Time Operating System 实时操作系统DMA:Direct Memory Access 存储器直接访问EXTI: External Interrupts 外部中断FSMC: Flexible static memory controller 可变静态存储控制器FPB:flash patch and breakpoint FLASH 转换及断电单元HSE:Hign speed external 高速内部时钟HSI: High speed internal 高速外部时钟LSE: Low Speed external 低速外部时钟LSI: Low Speed Internal 低速内部时钟LSU: load store unit 存取单元PFU: prefetch unit 预取单元ISR:Interrupt Service Routines 中断服务程序NMI: Nonmaskable Interrupt 不可屏蔽中断NVIC: Nested Vectored Interrupt ControllerMCU:Microcontroller Unit 微控制单元又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。诸如手机、PC外围、遥控器,至汽车电子、工业上的步进马达、机器手臂的控制等,都可见到MCU的身影。MPU: Memory Protection UnitMIPS:million instructions per second 每秒能执行的百万条指令的条数RCC:Reset and clock control 复位和时钟控制RTC: Real-Time Clock 实时时钟IWDG: independent watchdogWWDG:Window watchdogTIM:timer 定时器

端口

AFIO:alternate function IO 复用IO端口GPIO:general purpose input/output 通用IO端口IOP(A-G):IO port A - IO port G (例如:IOPA:IO port A)CAN:Controller area networkFLITF:The Flash memory interface 闪存存储器接口I2C: Inter-integrated circuit 内置集成电路IIS: integrate interface of sound 集成音频接口JTAG:joint test action group 联合测试行动小组SPI:Serial Peripheral InterfaceSDIO: SD I/OUART: Universal Synchr./Asynch. Receiver TransmitterUSB: Universal Serial Bus

寄存器相关

CPSP: Current Program Status Register 当前程序状态寄存器SPSP: saved program status register 程序状态备份寄存器CSR:clock control/status register 时钟控制状态寄存器LR: link register 链接寄存器SP: stack pointer 堆栈指针MSP: main stack pointer 主堆栈指针PSP:process stack pointer 进程堆栈指针PC: program counter 程序计数器

调试相关

ICE:in circuit emulator 在线仿真ICE Breaker 嵌入式在线仿真单元DBG:debug 调试IDE:integrated development environment 集成开发环境DWT: data watchpoint and trace 数据观测与跟踪单元ITM: instrumentation trace macrocell 测量跟踪单元ETM: embedded trace macrocell 嵌入式追踪宏单元TPIU:trace port interface unit 跟踪端口接口单元TAP: test access port 测试访问端口DAP: debug access prot 调试访问端口TP: trace port 跟踪端口DP:debug port 调试端口SWJ-DP: serial wire JTAG debug port 串行-JTAG 调试接口SW-DP: serial wire debug port 串行 调试接口JTAG-DP:JTAG debug port JTAG 调试接口

系统类

IRQ: interrupt request 中断请求FIQ: fast interrupt request 快速中断请求SW:software 软件SWI: software interrupt 软中断RO:read only 只读(部分)RW:read write 读写(部分)ZI:zero initial 零初始化(部分)BSS:Block Started by Symbol 以符号开始的块(未初始化数据段)

总线

Bus Matrix 总线矩阵Bus Splitter 总线分割AHB:advanced High-preformance Bus 高级高性能总线 AHB用于高性能、高时钟频率的系统结构,典型的应用如ARM核与系统内部的高速RAM、NAND FLASH、DMA、Bridge的连接。APB:advanced peripheral bus 外围总线 APB用于连接外部设备,对性能要求不高,而考虑低功耗问题。APB1: low speed APB 低速外围总线APB2: high speed APB 高速外围总线ASB :Advanced System Bus 系统总线 ASB是AHB的一种替代方案。PPB: Private Peripheral Bus 专用外设总线

杂类

ALU:Arithmetic Logical Unit 算术逻辑单元CLZ: count leading zero 前导零计数(指令)SIMD: single instruction stream multiple data stream 单指令流,多数据流VFP: vector floating point 矢量浮点运算

词汇/词组

Big Endian 大段存储模式Little Endian 小段存储模式context switch 任务切换(上下文切换)(CPU寄存器内容的切换)task switch 任务切换literal pool 数据缓冲池

STM32开发

固件库概念

FWlib叫固件库,FW的单词是Firmware.即固件的意思。STM32的固件库包含C文件和H文件,主要用于存放STM32的一些寄存器的定义及一些底层驱动函数

容量

对于 103 系列,主要是用其中 3 个启动文件
• startup_stm32f10x_ld.s: 适用于小容量 产品,小容量:FLASH≤32K
• startup_stm32f10x_md.s : 适用于中等容量产品,中容量:64K≤FLASH≤128K
• startup_stm32f10x_hd.s: 适用于大容量产品,大容量:256K≤FLASH

STM32启动模式

B0 B1 启动模式
0 X 主闪存存储器
1 0 系统存储器
1 1 内置SRAM

STM32软件

MDK介绍

• MDK是keil公司开发的,为基于Cortex、arm7、arm9等处理器设备提供的一个完整开发环境。
• MDK(Microcontroller Development Kit,字面的意思就是“微控制器开发套装”)。

MDK安装

o 在软件资料,1,软件,MDK5
o 无脑安装
• MDK5破解
o File license Mangement 复制CID
o 在keygen破解软件中运行CID 得到秘钥,记得选择32
o 用管理员身份打开MDK5,再次进入license Management 的New ID Code粘贴

生成HEX文件

点击魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。 其中 Create HEX file 是编译生成 hex 文件,Browser Information 是可以查看变量和函数定义。

支持包安装

包的下载地址是www.keil.com/dd2/pack 点击Install将会来此下载

可以下载软件,Keil.STM32F1xx_DFP.1.0.5.pack
双击安装

添加宏

因为 3.5 版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。

  • c/c++界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面
  • 如果你用的是中容量那么STM32F10X_HD 修改为 STM32F10X_MD,小容量修改为 STM32F10X_LD. 然后点击 OK。

添加头文件路径

对于任何一个工程,我们都需要把工程中引用到的所有头文件的路径都包含到进来 。
点击魔术棒 ,出来一个菜单,然后点击 c/c++选项.然后点击Include Paths 右边的按钮。
弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添加进去。
记住,keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path一定要定位到最后一级子目录。然后点击 OK.

库函数选择外设

3.5 版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。
c/c++界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面

如果你用的是中容量那么STM32F10X_HD 修改为 STM32F10X_MD,小容量修改为 STM32F10X_LD. 然后点击 OK。

编译输出


编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。
方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面新建的 OBJ 目录。
这里大家注意,如果我们不设置 Output 路径,那么默认的编译中间文件存放目录就是 MDK 自动生成的 Objects 目录和 Listings 目录

第二个图标是全部重新编译按钮(工程大的时候,编译耗时较久,建议少用)

编译成功

从编译信息可以看出,我们的代码占用 FLASH 大小为:
1892 字节(1556+336),所用的 SRAM 大小为:1864 个字节(32+1832)。
Code:表示程序所占用 FLASH 的大小(FLASH)。
RO-data:即 Read Only-data,表示程序定义的常量,如 const 类型(FLASH)。
RW-data:即 Read Write-data,表示已被初始化的全局变量(SRAM)
ZI-data:即 Zero Init-data,表示未被初始化的全局变量(SRAM)

flymcu使用

串口下载软件

  • flymcu,该软件是mcuisp的升级版本(flymcu新增对STM32F4的支持),由ALIENTEK提供部分赞助,mcuisp 作者开发,该软件可以在 www.mcuisp.com 免费下载
  • 特别提醒:不要选择使用 RamIsp,否则,可能没法正常下载。
  • DTR 的低电平复位,RTS 高电平进 BootLoader
    • 选中这个选择项选,flymcu就会通过 DTR 和 RTS 信号来控制板载的一键下载功能电路,以实现一键下载功能。这个是必要的选项(在 BOOT0 接 GND 的条件下)。

第 1 个圈,圈出了 flymcu 对一键下载电路的控制过程,其实就是控制 DTR和 RTS 电平的变化,控制 BOOT0 和 RESET,从而实现自动下载。

XCOM

串口调试助手,直接打开,设置串口即可(程序中要通过对应的usart发送内容)

程序下载电路


USB 转串口,CH340G,是国内芯片公司南京沁恒的产品,稳定性经测试还不错,所以还是多支持下国产。

  • 首先,mcuisp 控制 DTR 输出低电平,则 DTR_N 输出高,
  • 然后 RTS 置高,则 RTS_N 输出低,这样 Q4 导通了,BOOT0 被拉高,即实现设置 BOOT0 为 1
  • 同时 Q3 也会导通,STM32F4 的复位脚被拉低,实现复位。
  • 然后,延时 100ms 后,mcuisp 控制DTR为高电平,则DTR_N输出低电平,RTS维持高电平,则RTS_N继续为低电平
  • 此时STM32F4的复位引脚,由于 Q3 不再导通,变为高电平,STM32F4 结束复位
  • 但是 BOOT0 还是维持为1,从而进入 ISP 模式,接着 mcuisp 就可以开始连接 STM32F4,下载代码了,从而实现一键下载。

STM32调试

JLink

JTAG与SWD是个接口,JLink指的是仿真器
串口只能下载代码,并不能实时跟踪调试,而利用调试工具,比如 ST-LINK,JLINK 和ULINK 等就可以实时跟踪程序,从而找到你程序中的 bug,使你的开发事半功倍。

JTAG/SWD

调试原理

串行接口,就是SWD,通信数据线两根
JTAG,通信数据线五根,所以用SWD多

使用SWD的话,只需要SWDIO与SWCLK两个引脚。
使用JTAG的话,五个引脚都要用到。

SWD与JTAG的端口映射

默认的五个口不能作为IO口输出

认这五个引脚复位了之后都是用来仿真的,是不能正常使用的,只有禁止了相应的端口,才能释放IO引脚

JTAG/SWD硬件


STM32 的 SWD 接口与 JTAG 是共用的,只要接上 JTAG,你就可以使用 SWD模式了(其实并不需要 JTAG 这么多线),当然,你的调试器必须支持 SWD 模式,JLINK V7/V8、ULINK2 和 ST LINK 等都支持 SWD 调试。

设置禁止JTAG

(在文件stm32f10x_gpio.c中):调用该函数,有三个选项。407没有复用概念。

void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)

JLink配置

魔法棒-Debug-JLInk

上图中我们还勾选了 Run to main(),该选项选中后,只要点击仿真就会直接运行到 main 函数,如果没选择这个选项,则会先执行 startup_stm32f10x_hd.s 文件的 Reset_Handler,再跳到main 函数

setting JLink

选择Jlink的时候一般选择10M,JTAG5M就可以了

  • 在 Utilities 选项卡里面设置下载时的目标编程器

    进入 FLASH 算法设置Flash DownLoad,在setting的右边两个按钮

    设置完之后,点击 OK,然后再点击 OK,回到 IDE 界面,编译一下工程。接下来我们就可以通过 J-LINK 下载代码和调试代码。
    只需要点击 LOAD 按钮就可以进行程序下载。



Debug介绍

复位

其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。

执行到断点处

该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点。

挂起

此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。

执行进去

该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。

执行过去

在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。

执行出去

该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。

执行到光标处

该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。

汇编窗口

通过该按钮,就可以查看汇编代码,这对分析程序很有用。

观看变量/堆栈窗口

该按钮按下,会弹出一个显示变量的窗口,在里面可以查看各种你想要看的变量值,也是很常用的一个调试窗口。

串口打印窗口

该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。

内存查看窗口

该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口

性能分析窗口

按下该按钮,会弹出一个观看各个函数执行时间和所占百分比的窗口,用来分析函数的性能是比较有用的。

逻辑分析窗口

按下该按钮会弹出一个逻辑分析窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来,比较直观。
点击 Setup,新建两个信号 PORTB.5 和 PORTE.5

Display Type 选择 bit



注意 Gird 要调节到 0.2s 左右比较合适,可以通过 Zoom 里面的 In 按钮来放大波形,通过 Out 按钮来缩小波形,或者按 All 显示全部波形。

STM32的介绍及MDK相关推荐

  1. STM32学习笔记 第二章 STM32资源介绍

    第二章 STM32资源介绍 2.1 芯片选型 STM32-F1系列(如图2-1): 基础型,主频为72M(内核为cortex-M3),CPU位数=32. 我们所用的芯片是STM32F103vet6 S ...

  2. STM32 第5讲 MDK下载安装注册及配置

    目录 MDK下载安装注册 MDK简介 MDK下载 MDK安装 器件支持包安装 注册鸡 MDK配置 MDK下载安装注册 MDK简介 MDK不同版本对比 MDK下载 MDK安装使用 = MDK软件安装 + ...

  3. stm32.cube介绍

    stm32.cube(一)--系统架构及目录结构 stm32.cube(二)--HAL结构及初始化 stm32.cube(三)--HAL.GPIO stm32.cube(四)--HAL.ADC stm ...

  4. ​STM32家族介绍,覆盖STM32F、STM32H、STM32L全系列

    STM32是ARM Cortex-M内核单片机.目前提供10大产品线(F0, F1, F2, F3, F4, F7, H7, L0, L1,L4),超过700个型号.STM32产品广泛应用于工业控制. ...

  5. ARM® Cortex®-M内核单片机STM32家族介绍,覆盖STM32F、STM32H、STM32L全系列

     STM32是ARM®Cortex®-M内核单片机.目前提供10大产品线(F0, F1, F2, F3, F4, F7, H7, L0, L1, L4),超过700个型号.STM32产品广泛应用于 ...

  6. (转)安富莱stm32 pid介绍以例子

    第15章 ControllerFunctions的使用(PID控制) 本期教程主要讲解控制函数中PID部分,PID的应用十分广泛,希望初学的同学认真学习这部分知识. 15.1 PID介绍 15.2 P ...

  7. STM32 SPI介绍及CubeMX配置

    目录 一.SPI简介 二.SPI协议 物理层: 协议层: 1.SPI的基本通讯过程 2.通信模式 三.STM32中的SPI SPI框图: 1.通信引脚 2.时钟控制逻辑 3.数据控制逻辑 4.整体控制 ...

  8. STM32 Cube mx的MDK项目编译报错与debug

    1.error while deleting file 解决步骤:项目路径不能有中文.  2."No section matches selector - no section to be ...

  9. stm32开发之标准库的介绍

    1 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序.数据结构和宏组成,包括了微控制器所有外设的性能特征.该函数库还包括每一个外设的驱动描 ...

最新文章

  1. ROS2概述和实践入门
  2. MySQL数据库恢复(LOAD DATA)
  3. yum go linux,使用yum安装Go(Golang)
  4. SDNU 1011.盒子与球(斯特林函数)
  5. Openstack的nova-network的vlan模式扩展
  6. currenttimemillis 毫秒还是秒_亿级数据毫秒级查询!ElasticSearch是怎么做到的?
  7. DCASE2013挑战赛介绍
  8. html调整文字位在基线显示,html – 将标题对齐到相同的基线,无论后续文字是什么?...
  9. Linux下使用nohup部署java 后台程序
  10. plsql导出表结构和表数据的使用小结
  11. C++猜数字(文曲星游戏)
  12. 数据结构与算法分析(十七)--- 怎么用回溯剪枝高效穷举所有可行解?
  13. django集成Sphinx,为项目自动生成文档
  14. QT 管理win系统服务
  15. c语言创建临时文件,5.19 创建临时文件和文件夹
  16. C语言程序设计谭浩强版 九
  17. SqlServer2005 AMD8450 三核CPU安装Sql Server 2000 SP4 补丁的办法
  18. 什么是c/c++运行时库
  19. C语言实现FIR滤波
  20. 图形用户界面常用组件

热门文章

  1. 目标检测:Faster-RCNN与YOLO V3模型的对比分析
  2. 如来昔在然灯是和所时_TGB
  3. Web入门(1)——制作简单的网页
  4. 入门CG板绘须知:学插画需要学好素描吗?
  5. java华为_华为 Java
  6. 用C语言做一个计算两个数字相乘的程序。(第一个与用户交互的C语言程序!!!!)
  7. 知识图谱03:知识图谱的构建方法
  8. Java神奇代码奇葩代码
  9. ▶链路层第三弹◀ 两种信道下的数据链路层【下】广播通信CSMA/CD
  10. java语言输出当前日期时间的方法