—— 使用STM32,个人认为 keil 还是首选
SWV 需要占用一个引脚 PB3/JTDO/TRACES WO 与 JTDO 复用,使用 SW 时,这一脚将被占用,作为 TRACES WO,一般常见仿真器直接支持
首先重写 fputc
#include
int fputc(int c, FILE *f)
{
ITM_SendChar(c);
return(c);
}
就可以使用 printf 输出调试信息,但实际上我这么做失败了,初始化的时候不知道卡在了哪里,也不弄了,反正 ITM_SendChar 一样可以输出。
打开工程选项:
- project -> options for target
- "Debug"标签
- Initialization File: Keil\ARM\Boards\Keil\MCBSTM32\STLIB_Blinky\STM32DBG.ini
因为 SWV 设置只能由调试器写入
仿真器选择:
如果使用 ULINK,则选择 SWJ/Port SW
如果是 JLINK,则选择 Port SW
Trace 选择:
- Trace enable
- Core Clock 填写你捕获时CPU的频率
- ITM 使用端口 0 ,这个改不改应该影响不大
进入调试后:
View -> Serial Windows -> Debug (printf) Viewer 就看到输出信息了
最后备注一下:我山寨版的 ULINK2 失败了……但同样是山寨版的 JLINK 成功了
//======================================================
备注::
1》这样试了一下还真的是可以打印出调试消息----用printf函数-----打印到了UART#1
2》配置工程使用的是仿真环境----Options/Debug/Use Simulator/++++指定STM32DBG.ini做为初始化文件
3》其它没有什么好设置的
关键字:STM32 KEIL SWV 输出调试信息
引用地址:
STM32 在 KEIL 下使用 SWV 输出调试信息
推荐阅读最新更新时间:2024-03-16 16:03
一文详解STM32输入捕获
输入捕获是处理器捕获外部输入信号的功能,基于定时器抓取输入信号指定触发方式之间的长度。具体有下面三种触发情况: 1、 上升沿触发 2、 下降沿触发 3、 上下都触发 当触发条件发生后,捕获比较寄存器锁定当前的计数值,如果开启了中断或者DMA,就可以通过中断或DMA及时获得数据进行处理。有时可能遇到上一次触发的标志还没清除,下次触发就发生了,此时会将over-capture标志置位,对于可能出现over-capture的情况,建议先读取数据再清除标志,避免在读取标志后及读取数据前这段时间错过over-capture。 配置输入捕获的步骤: 1. 打开定时器和对应输入引脚的时钟 2. 配置引脚为对应的复用功能 3. 配置基
[单片机]
Windows下stm32串口下载程序(DOS版本)
每次更新程序都需要用到stlink调试工具,感觉非常不方便,笔记本搬来搬去,帮客户更新程序也不方便使用别人的下载工具。 那么只能自己写一个下载工具了。 刚开始我是想研究一下stm32 BootLoader的官方协议,然后通过协议来写这个程序。 后面找到官方质料AN3155_USART protocol used in the STM32 bootloader_en.pdf(自行百度)。 全是英文,看了一天挺累的,进展也慢。 后面又了解到原来st公司自己写了一个BootLoader的库。根据网上找到的很多质料模仿大神们写了一个。 因为时间原因先完成一个DOS版本的,后面将继续完成MFC版本,方便使用。源码都会
[单片机]
基于STM32实现简单的CAN通讯过程
CAN通讯在车辆工程中用的非常广泛,本文将基于stm32实现简单的can通讯过程。 首先了解一下CAN通讯的主要特点: 1、 数据通信没有主从之分,任意一个节点可以向任何其他(一个或多个)节点发起数据通信,靠各个节点信息优先级先后顺序来决定通信次序。 2、 支持时间触发通信功能, 发送报文的优先级可软件配置。多个节点同时发起通信时,优先级低的避让优先级高的,不会对通信线路造成拥塞。 3、 CAN 是一种多主总线,通信介质可以是双绞线、同轴电缆或光导纤维。通信距离最远可达10KM(速率低于5Kbps),速率可达到1Mbps(通信距离小于40M)。 4、 CAN 总线采用了多主竞争式总线结构,具有多主站运行和分散仲
[单片机]
STM32学习:ADC/DMA/USART
学习STM32的ADC转换,在开发板上写程序调试。 四个任务: 1.AD以中断方式(单次)采集一路 2.AD以中断方式连续采集四路 3.AD以DMA方式采集一路,DMA深度为一级 4.AD以DMA方式采集四路,每路DMA深度为28级,并滤波,说明滤波原理。 总结: 第一个任务:ADC以中断方式采集一路ADC,通过配置ADC_InitStructure结构体中的ADC_ScanConvMode,它规定模数转换工作在扫描模式(多通道)还是单次模式(单通道), ADC_InitStructure.ADC_ScanConvMode=DISABLE,为单通道单次模式。 ADC_ContinuousCo
[单片机]
keil下C51启动代码详解
由于CPU和程序启动代码文件STARTUP.a51的重要性,一些8051派生的CPU产品要求初始化CPU来满足设计中的相应的硬件,因此,有时候用户需要对STARTUP.a51进行修改,所以进行注释一下: ;--------------------------------------------------- ;startup.A51: 用户上电初始化程序 ;---------------------------------------------------- ; ;使用以下EQU命令可定义在CPU复位时需要用0进行初始化的内存空间 ; ;IDATA存储器的空间的绝对起始地址总是零 IDATALEN EQU 80H ;
[单片机]
Keil C51精确延时程序设计
C语言具有较强的数据处理能力、语言功能齐全、使用灵活方便、开发效率高,被广泛应用于在单片机系统开发应用中。在单片机幕统开发的过程中,经常需要使用到延时程序,但C语言代码执行时间。的可预见性和实时性较差,在开发一些具有严格通信时序要求的系统时,往往需要反复调试延时代码,给开发者带来了较大困难。比如使用DS18B20进行温度测控时,必须按照其单总线通信协议,否则无法读取温度数据。针对上述问题,结合Keil C51开发工具和Proteus仿真软件,介绍在Keil C51开发系统中,利用C语言编写的延时程序设计及其运行的时间的计算方法。 1 常用延时程序的设计方法 1.1 利用定时器/计数器延时 利用C51单片机内部2个16位定时
[单片机]
STM32高级开发(12)-在GCC中使用printf打印串口数据
在大家使用keil或是iar开发stm32等arm芯片的时候,想来最不陌生的就是使用print通过串口输出一些数据,用来调试或是其他作用。但是要明确的是由于keil iar gcc 他们使用的标准C语言库虽然都遵循一个标准,但他们底层的函数实现方式都是不同的,那么在GCC中我们能否像在keil中一样重映射print的输出流到串口上呢?答案是肯定的。 keil中的重映射方式及原理 /* * libc_printf.c * * Created on: Dec 26, 2015 * Author: Yang * * 使用标准C库时,重映射printf等输出函数的文件 * 添加在工程内即可生效(切勿选择semi
[单片机]
STM32 端口复用&重映射(USART Remap)
下面跟大家说一下STM32单片机的端口重映射,这里是以USART1的重映射为例. STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的. 三个红框交汇处.STM32F103VCT6 这个CPU的USART1接的是PB6/PB7 但是上电初始化后默认功能并非是USART1.所以想要用串口功能 .必须用端口重映射.. 大家知道,STM32的单片机每个功能模块有自己
[单片机]