完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
M487JIDAE是一款Microchip的单片机,它提供了一组Instrumentation Trace Macrocell (ITM)调试助手,可以实现在程序运行时通过调试端口输出调试信息。
使用ITM功能实现printf打印,需要进行以下步骤: 1. 打开调试功能:在工程配置中,开启调试功能的选项。 2. 初始化ITM:在main函数中,添加初始化ITM的代码。其中,要开启ITM功能,需要设置寄存器TPI->SPPR和TPI->ACPR。并将寄存器ITM->TER中的第0位设置为1。 3. 重定向printf输出:在stdio.h头文件中,重写fwrite函数,将输出数据通过ITM发送到调试端口。 以下为具体代码实现: 1. 开启调试功能 在Keil MDK中,可以在Options for Target -> Debug中勾选“Enable Debug (printf) Viewer”选项,开启调试功能。 2. 初始化ITM 在main函数中添加以下代码: ``` #include "core_cm4.h" // 导入CMSIS头文件 int main(void) { // 初始化ITM ITM->LAR = 0xC5ACCE55; // 开启ITM访问权限 TPI->SPPR = 2; // Trace数据分频器,分频系数为2 TPI->ACPR = 0x0F; // Trace时钟分频器,分频系数为16 ITM->TPR = 0x0F; // Trace控制寄存器,使用Cycle Count地址 ITM->TER = 0x01; // Trace使能寄存器,使能第0个口 SystemCoreClockUpdate(); // 更新系统时钟 // 程序代码 } ``` 3. 重定向printf输出 在stdio.h头文件中添加以下代码: ``` #include "core_cm4.h" // 导入CMSIS头文件 #ifdef __cplusplus extern "C" { #endif int32_t _write(int fd, const void *buf, size_t nbytes) { const uint8_t *p = (const uint8_t *)buf; for (size_t i = 0; i < nbytes; i++) { while (ITM->PORT[0].u32 == 0) { // 等待Trace空闲 } ITM->PORT[0].u8 = *p++; } return nbytes; } #ifdef __cplusplus } #endif ``` 通过以上三个步骤,就可以使用ITM功能实现printf打印了。在程序中调用printf函数时,输出的数据会通过ITM发送到调试端口,可以在Keil IDE的Debug(printf) Viewer面板中查看。 |
|
|
|
只有小组成员才能发言,加入小组>>
692 浏览 0 评论
1105 浏览 1 评论
2473 浏览 5 评论
2807 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2645 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
652浏览 9评论
648浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
780浏览 6评论
628浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 16:29 , Processed in 0.988856 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号