MDK+硬件仿真器实现debugprintf()-stm32

1MDK工程设置如下

2其中stm32debug.ini文件内容为

/******************************************************************************/

/* STM32DBG.INI: STM32 Debugger Initialization File */

/******************************************************************************/

// <<< Use Configuration Wizard in Context Menu >>> //

/******************************************************************************/

/* This file is part of the uVision/ARM development tools. */

/* Copyright (c) 2005-2007 Keil Software. All rights reserved. */

/* This software may only be used under the terms of a valid, current, */

/* end user licence from KEIL for a compatible version of KEIL software */

/* development tools. Nothing else gives you the right to use this software. */

/******************************************************************************/

FUNC void DebugSetup (void) {

// <h> Debug MCU Configuration

// <o1.0> DBG_SLEEP <i> Debug Sleep Mode

// <o1.1> DBG_STOP <i> Debug Stop Mode

// <o1.2> DBG_STANDBY <i> Debug Standby Mode

// <o1.5> TRACE_IOEN <i> Trace I/O Enable

// <o1.6..7> TRACE_MODE <i> Trace Mode

// <0=> Asynchronous

// <1=> Synchronous: TRACEDATA Size 1

// <2=> Synchronous: TRACEDATA Size 2

// <3=> Synchronous: TRACEDATA Size 4

// <o1.8> DBG_IWDG_STOP <i> Independant Watchdog Stopped when Core is halted

// <o1.9> DBG_WWDG_STOP <i> Window Watchdog Stopped when Core is halted

// <o1.10> DBG_TIM1_STOP <i> Timer 1 Stopped when Core is halted

// <o1.11> DBG_TIM2_STOP <i> Timer 2 Stopped when Core is halted

// <o1.12> DBG_TIM3_STOP <i> Timer 3 Stopped when Core is halted

// <o1.13> DBG_TIM4_STOP <i> Timer 4 Stopped when Core is halted

// <o1.14> DBG_CAN_STOP <i> CAN Stopped when Core is halted

// </h>

_WDWORD(0xE0042004, 0x00000027); // DBGMCU_CR

_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register

}

DebugSetup(); // Debugger Setup

3项目工程加载retarget.c或者debugprint.c,其中retarget.c内容如下

#include <stdio.h>

#include "stm32f10x.h"

#pragma import(__use_no_semihosting_swi)

struct __FILE { int handle; /* Add whatever you need here */ };

FILE __stdout;

FILE __stdin;

int fputc(int ch, FILE *f)

{

return ITM_SendChar(ch);

}

volatile int32_t ITM_RxBuffer;

int fgetc(FILE *f)

{

while (ITM_CheckChar() != 1) __NOP();

return (ITM_ReceiveChar());

}

int ferror(FILE *f)

{

/* Your implementation of ferror */

return EOF;

}

void _ttywrch(int c)

{

fputc(c, 0);

}

int __backspace()

{

return 0;

}

void _sys_exit(int return_code)

{

label:

goto label; /* endless loop */

}

debugprint.c内容如下:

#include <stdio.h>

#define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n)))

#define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))

#define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n)))

#define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))

#define TRCENA 0x01000000

struct __FILE { int handle; /* Add whatever you need here */ };

FILE __stdout;

FILE __stdin;

int fputc(int ch, FILE *f)

{

if (DEMCR & TRCENA)

{

while (ITM_Port32(0) == 0);

ITM_Port8(0) = ch;

}

return(ch);

}

4包含头文件#include <stdio.h>,并调用printf

5在debug中打开输出仿真:View-serial-debug(printf)

时间: 2024-10-24 01:31:03

MDK+硬件仿真器实现debugprintf()-stm32的相关文章

STM32硬件IIC驱动设计(转)

源: STM32硬件IIC驱动设计 参考: STM32—硬件IIC主机通信 STM32’s I2C 硬件BUG引发的血案(qzm) 解决STM32 I2C接口死锁在BUSY状态的方法讨论 原文地址:https://www.cnblogs.com/LittleTiger/p/10142844.html

STM32环境搭建/学习观点/自学方法 入门必看

文章转自armfly开发板V4软件开发手册,分享学习~ 今天有幸看到armfly的开发板软件开发手册,开头的基础知识,真的很有用,还好有看到,一切都不迟,感悟很多,摘抄部分,学习分享~ 关于开发环境的搭建 (个人认为,好用的工具,顺手的开发环境,对于编程是一种好的习惯,也是一种好的享受,所以,在环境搭建方面,我还是比较在意软件的互相联合使用,工程建立的规范化等等,这样可以尽量少的在后期更换不同的环境,变软会很浪费时间,一次到位,一路顺风顺水~) 个人偏好的环境搭建: 集成开发环境(IDE):Ke

STM32学习日志--使用DMA功能自动更新PWM的输出

/******************************************************************************* 编译环境: EWARM V5.30 硬件环境: DZY2.PCB STM32 FW: V3.0.0 作者 : szlihongtao ****************************************************************************** REV : V1.00 DATE : 2011

STM32+NRF24L01无线(转)

源:STM32+NRF24L01无线 硬件SPI和模拟SPI源码: nrf24发送(模拟SPI)BHS-STM32.rar nrf24接收(模拟SPI)BHS-STM32.rar nrf24发送(硬件SPI)BHS-STM32.rar nrf24接收(硬件SPI)BHS-STM32.rar NRF24L01资料 NRF24.rar 部分代码: #define TX_PLOAD_WIDTH 20 // 20 uints TX payload u8 TxBuf[32]={0}; #define CE

飞思卡尔单片机P&amp;E开发工具硬件及软件

原文链接: http://blog.sina.com.cn/s/blog_8ebff8d7010121tm.html 1.HC(S)08系列 开发机硬件:USB-ML-12 CYCLONE PRO USB-ML-UNIVERSAL USB-ML-UNIVERSAL FX 支持发软件:烧录软件 PROGHCS08 调试软件 ICDHCS08 软件包   PKGHCS08 2.HC(S)12(X)系列 开发机硬件:USB-ML-12 CYCLONE PRO USB-ML-UNIVERSAL USB-

STLINK V2安装使用详解

1.      解压st-link_v2_usb driver.zip文件. 2.       运行解压后的st-link_v2_usbdriver.exe文件,安装STLINK V2驱动程序.安装路径尽量保持默认路径. 3.       安装完成后,可以在“开始”菜单中查看到STLINK V2相关选项.如图所示: 2013-7-2 10:15 上传 下载附件 (43.27 KB) 4.       将STLINK通过USB接口连入电脑. 5.       右击“我的电脑”选择“属性”打开“系统

mbaaa222

此文章已于 8:00:38 2014/6/18 重新发布到 至博通信 开始mbed设计1 帐户 至博通信 类别 无 1 开始mbed设计 应用mbed开始设计,最简单方式莫过于选择一套硬件,学习mbed HDK API函数.开始设计分为以下几个部分 l 选择一套硬件平台 l 选择软件开发环境 l 学习mbed API函数 l 加入社区学习 1.1 mbed硬件介绍 mbed硬件主要由mbed官方联系各半导体厂家推出,国内美信凌科与我们团队推出相关的产品. 1.1.1 mbed硬件官方平台介绍 m

单片机脚本语言-移植lua到stm32-MDK

Lua简介 Lua[1]  是一个小巧的脚本语言.作者是巴西人.该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用.不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护. Lua的目标是成为一个很容易嵌入其它语言中使用的语言.大多数程序员也认为它的确做到了这一点. 很多应用程序使用LUA作为自己的嵌入式脚本

IAR Embedded Workbench for 8051 version 9.20 嵌入式系统+S.T.A. DATA 3Muri Pro v10.0.2.1结构分析软件

IAR Embedded Workbench for 8051 version 9.20 嵌入式系统软件IAR Embedded Workbench for 8051 version 9.20是一款嵌入式系统软件,主要用于单片机开发,拥有 是一套高度精密且使用方便的嵌入式应用编程开发工具.该集成开发环境中包含了IAR的C/C++编译器. 汇编工具.链接器.库管理器.文本编辑器.工程管理器和C-SPY调试器. 8051技术在低功耗.物联网传感器等方面已经变得非常流行.为了充分利用这些设备,开发人员