STM32学习(二)

2023-05-16

常用开发工具简介

在这里插入图片描述

安装仿真器驱动

  1. DAP仿真器免驱
  2. ST LINK仿真器驱动安装方法:(A盘)\6,软件资料\1,软件\5,其他软件\ST LINK驱动及教程

为什么要安装CH340 USB串口驱动?
在这里插入图片描述
串口需要共地,设备A的发送引脚和设备B的接收引脚互连。
RXD-PA9,TXD-PA10通过跳线帽连接到CH340(USB/串口转换电路)

USB虚拟串口作用

  1. USB口当串口来使用。
  2. 如果USB连接的是串口1,那么USB口还可以当做串口来下载程序。(STM32中,只有串口1可以下载程序)。(串口1是PA9和PA10)
  3. 当USB供电口。

STM32初体验

MDK5编译例程
在这里插入图片描述

  • 全局编译所需时间较长
  • 部分编译在第一次编译时与全局编译是一样的
  • 工程文件已经编译过,修改了一些文件,部分编译仅编译修改过的文件

编译结果看:Build Output窗口
在这里插入图片描述

  • linking:链接后才能生成可执行文件

  • Program Size:程序大小,也可通过查看.map文件得到

  • FromELF: creating hex file…:创建hex文件当且仅当工程为0错误才能创建

  • Build Time Elapsed: 00:00:05编译时间
    在这里插入图片描述

  • code:代码,占用Flash5062个字节

  • RO-data:只读数据,一般是指const修饰的数据,也是在Flash中

  • RW-data:初值为非0的可读可写数据,初值存放到Flash,修改后存放在SRAM

  • ZI-data:初值为0的可读可写数据,只占用SRAM

  • Flash:占用5620字节(前三个相加)

  • SRAM:占用1928字节(后两个相加)

串口下载程序

STM32的ISP(In System Programming在线系统编程)下载,常用串口1下载程序。
因为使用USB虚拟串口,所以事先安装CH340 USB虚拟串口驱动

在这里插入图片描述
在这里插入图片描述
STM32启动模式
在这里插入图片描述
ISP下载程序一般步骤:

  1. BOOT0接高电平,BOOT1接低电平
  2. 按复位键

程序执行一般步骤:

  1. BOOT0接低电平,BOOT1接任意
  2. 按复位键

在这里插入图片描述

一键下载电路,是利用串口的DTR和RTS信号,分别控制STM32的复位和BOOT0引脚,配合FlyMcu软件,设置:DTR的低电平复位,RTS高电平进BootLoader,这样, BOOT0和STM32的复位引脚,完全由下载软件自动控制,从而实现一键下载。

DAP下载程序

在这里插入图片描述
JLINK下载的时候,必须给板子先供电:USB或者外接电源都可

JTAG/SWD调试原理概述

Cortex-M内核含有硬件调试模块,该模块可在取指(指令断点)或访问数据(数据断点)时停止。内核停止时,可以查询内核的内部状态(内核)和系统的外部状态(外设)。完成查询后,可恢复程序执行。
在这里插入图片描述
在这里插入图片描述
F1系列可以通过AF10——MAPR寄存器的SWJ_CFG[2:0]位来释放部分或者全部SWJ-DP引脚。

要想设置SW模式,就把复用重映射和调试I/O配置寄存器(AFIO_MAPR)
复位值:0x0000 0000
在这里插入图片描述
所以默认情况下,位26:24为000,既支持JTAG接口也支持SW接口。
如果想仅支持SWD接口,就将位SWJ_CFG[2:0]配置为010。

基础执行控制按钮介绍

在这里插入图片描述

  • 插入/移除断点
  • 使能/失能断点
  • 在当前目标失能所有断点
  • 移除所有断点

在这里插入图片描述

内核寄存器
在这里插入图片描述
反汇编窗口
在这里插入图片描述
可以通过汇编语言的方式来看代码

命令行窗口
在这里插入图片描述
堆栈窗口
在这里插入图片描述
在这里插入图片描述
蓝色小三角显示当前鼠标所在行
在这里插入图片描述

黄色小三角显示即将要执行的程序的那一行

查看程序段/函数执行时间
在这里插入图片描述
工具栏常用窗口介绍
在这里插入图片描述
Call Stack窗口(调用栈窗口):查看函数调用关系&局部变量。
在这里插入图片描述
在这里插入图片描述
函数名|首地址|类型(范数是返回类型)
变量名|变量值

Watch窗口:查看函数首地址&变量值,Watch窗口:设置全局变量在被读或写后自动停止运行
在这里插入图片描述
在这里插入图片描述
Memory窗口:内存查看窗口

M3/M4/M7内核是小端模式,内存的值得倒着读。
在这里插入图片描述
所以需要先读00再读0F,值为0x000F

Peripheral窗口:查看寄存器的值——既可以是内核寄存器也可以是外设寄存器
在这里插入图片描述
调试时,使用该功能可以确定配置寄存器是否有问题

仿真时需要注意的点

1,仿真时,使用MDK的Level 0等级优化
在这里插入图片描述

调试停止在断点处时,只是内核停止,外设会继续运行
例如:DMA搬运数据,当断点停止时,DMA仍然在继续工作,数据仍然在传输。

断点的设置要有时间观念,考虑是否会打断正常通信
例如,主从机需要在有限时间响应,但断点打在响应之前,就可能会影响通信。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32学习(二) 的相关文章

  • STM32在Debug时程序运行时间不对,Debug时定时器中断每次进入断点时间不对,定时器一开启就进入中断的解决办法

    一 Debug时程序时间不对解决办法 1 点击魔术棒 2 点击Debug 点击Settings 3 点击Trace 在Core Clock里修改为你的系统时钟 二 Debug时定时器中断每次进入断点时间不对 在Debug时 程序停下来 定时
  • 51单片机 数码管中断操作

    实践目的 1 掌握中断的概念和思想 2 掌握51单片机中断系统和相关软硬件设计 实践内容 1 利用单片机的P0口接数码管的字段脚 P1 0脚接共阴极 P3 2 P3 3引脚接独立按键产生外部中断信号 编写程序 当程序正常运行时数码管显示H字
  • 处理器指令周期执行时间

    我的猜测是 no operation 内在 ARM 指令应花费 1 168 MHz 来执行 前提是每个NOP在一个时钟周期内执行 我想通过文档验证这一点 有关处理器指令周期执行时间的信息是否有标准位置 我试图确定 STM32f407IGh6
  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • 在地址“0xXXXXXX”处中断,没有可用的调试信息,或在程序代码之外

    配置 使用 Nucleo L476RG 使用 GNU ARM Eclipse 我从 STM32CubeMX 生成了一个极简代码 我已经在我的板载 ST Link 中刷新了 J link 驱动程序 一直在尝试为我的代码运行调试器 但我的程序计
  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • GCC - 如何停止链接 malloc?

    我正在努力将我的代码缩减到最小的骨架大小 我使用的是只有 32k 闪存的 STM32F0 需要很大一部分闪存用于数据存储 我的代码已经有大约 20k 闪存大小 其中一些是由于使用了 STM32 HAL 函数 我可以在以后需要时对其进行解释和
  • STM32 F072上的软件如何跳转到bootloader(DFU模式)?

    STM32应用笔记2606对此进行了讨论 但没有简单的代码示例 该答案已使用 IAR EWARM 在 STM32F072 Nucleo 板上进行了测试 这个答案使用 STM32标准外设库 仅此而已 请注意 验证您是否成功进入引导加载程序模式
  • 137-基于stm32单片机智能保温杯控制装置Proteus仿真+源程序

    资料编号 137 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DS18B20传感器 电机 制作一个基于stm32单片机智能保温杯控制装置Proteus仿真 2 通过DS18b20传感器检测当前保温杯水的温度 并且
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 硬件基础-电容

    电容 本质 电容两端电压不能激变 所以可以起到稳定电压作用 充放电 电容量的大小 想使电容容量大 使用介电常数高的介质 增大极板间的面积 减小极板间的距离 品牌 国外 村田 muRata 松下 PANASONIC 三星 SAMSUNG 太诱
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • 擦除后无法写入闪存

    所以我不能在擦除后直接写入内部闪存 如果写操作之前没有擦除操作 那么我可以 有什么想法吗 编程函数返回 成功写入 值 但查看内存时 没有写入任何数据 这是代码 uint32 t pageAddress 0x08008000 uint16 t
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d

随机推荐