| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 关于STM32的ITM 方式输出走了一些弯路 -> 正文阅读 |
|
[嵌入式]关于STM32的ITM 方式输出走了一些弯路 |
最简单直接且有效的方式就是这篇文章:使用SWO代替UART,实现printf打印功能。 实现STM32的printf输出的四种方式??四种实现方式,我认为第二种最简单可行。 方式一二三通用配置方式一:Keil官网说明 :https://www.keil.com/support/man/docs/jlink/jlink_trace_itm_viewer.htm 方式二 和 方式三:需添加两个头文件stm32f10x.h 和 stdio.h,方式三为串口方式,非ITM方式,还需进行硬件资源配置,看文章了解了就顺便记录下来了。 方式四:添加源文件以及初始化文件需添加两个头文件stm32f10x.h 和 stdio.h,这点儿是后来弄懂其它方式后才了解到的。 为什么要用ITM??有一个模块的例程代码就用到了printf,然后就想到了之前鱼鹰写的ITM方式调试,就顺势了解了一下怎么实现的,调试方式的进步可能带来工作效率大的提升。 ITM的SWO输出优势
目标??仿真器连接单片机 与 PC,在线调试,将“Hello World”输出到PC上,在开发工具(MDK) 的某个窗口显示。 原理??单片机借助PC的显示/输入设备 实现了自己的 输出和输入。 ??开发环境搭建:STM32 + MDK + 实现方式(ITM机制:使用硬件接口:五线SWD) ??printf -------ITM提供寄存器-------> 仿真器 -------数据-------->PC机 ??printf-------底层调用fputc函数-------> 重写fputc函数(实现输出设备重定向) 背景知识??printf函数属于C语言标准库函数stdio.h ,用户能定义自己的C语言库函数 fputc,连接器在连接是自动使用新的功能函数。这个过程叫做重定向C语言库函数。在这里,fputc()就似乎目标硬件与标准库函数之间的一个抽象层,可以指定目标硬件。 ??在Cortex-M3\M4\M7系列MCU中,内核的调试组件有一个仪器跟踪宏单元(ITM)。ITM的主要用途是调试信息的输出(例如printf格式输出)。 ??想在mdk中使用printf,需要同时重定义fputc函数 和 避免使用semihosting(半主机模式)。 ??勾选microlib后,编译的时候就不把开启semihosting的文件包进去了(一位博主的理解)。 最终效果源码:fputc实现方式一
方式二
方式三
反思自己的问题??SWD模式的trace settings 很关键,之前看的那篇文章由于最关键界面的排版位置不对,没有注意。 ??很长时间没用到Keil,导致将源文件添加到工程都一时间忘记了。 收获总结??认为没啥难度的事情,那就该先实现了再说,遇到问题了再了解情况,再找文章实验,再了解,几篇文章下来只要有一篇实现目标,其它的也就能理解不足在哪儿了,此时掌握了多种实现方法。有句话是这么说的:人生没有白走的路,每一步都算数。 ??其中最大的收获是随着了解的深入,问问题的方式不断发生转变,从多角度去探究,上网找答案,最后:山重水复疑无路,柳暗花明又一村。 这种真是,看着挺简单,不自己动手试试就不知道有多“简单”。在得到最终结果前,你不知道距离达到目标还有多远。曾经有好几次类似的经历,都无果而终,很可惜,就卡在那么一个地方,试了很多次(重复实验很多),最后不了了之,真是打击积极性,破坏成就感。不过这次我成功了,真是一种激励。 ??弯路如果达到目的地了就没有白走,那些弯路让你对如何达到这个结果有更深刻的认识。甚至一条路走通之后,你还能找到其它几条通往这个目的地的路。豁然贯通的舒畅。 ??弯路如果达到目的地了就没有白走,那些弯路让你对如何达到这个结果有更深刻的认识。甚至一条路走通之后,你还能找到其它几条通往这个目的地的路。豁然贯通的舒畅。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 8:51:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |