繁体   English   中英

在ARM Cortex-M3微控制器中使用UART进行Printf输出

[英]Printf output using UART in ARM Cortex-M3 microcontroller

我有基于LPC1768的板-LandTiger (底部值得检查手册)。 要对其进行编程,我使用Segger的Keil uVision4 / 72 Lite和J-Link EDU。 我与操纵杆和二极管交互的简单程序可以正常工作,但是...

我正在尝试实现debug printf,因此我可以在Keil “ Debug(printf)Viewer”窗口中看到printf的输出。 问题是我看不到任何输出-我认为我走在正确的轨道上,因为当我运行调试器时,我可以在窗口底部看到Trace:Running (之前是Trace:No Synchronization )。 不幸的是,我在UART和调试输出窗口中看不到任何东西。

我花了很多时间尝试使其工作,感谢您的帮助,谢谢;)

我的Keil设置是:

目标/调试的项目/选项设置为J-Link / J-Trace Cortex

然后在它的设置中,我选择了SEGGERPort:SWMAX CLOCK:10 MHz

“跟踪”选项卡100Mhz 核心时钟SWO预分频器= 17的情况下启用(其结果为5.882352MHz SWO Clock )。

ITM刺激端口设置为Enable:0xFFFFFFFFPrivilege:0x0000000F

这是我的代码的一部分:

定义FOSC 12000000

定义FCCLK(FOSC * 8)

定义FCCO(FCCLK * 3)

定义FPCLK(FCCLK / 4)

定义UART0_BPS 115200

无效UART0_Init(无效)

{

uint16_t usFdiv;

/ * UART0 * /

LPC_PINCON-> PINSEL0 | =(1 << 4); / *引脚P0.2用作TXD0(Com0)* /

LPC_PINCON-> PINSEL0 | =(1 << 6); / *引脚P0.3用作RXD0(Com0)* /

LPC_UART0-> LCR = 0x83;

usFdiv =(FPCLK / 16)/ UART0_BPS;

LPC_UART0-> DLM = usFdiv / 256;

LPC_UART0-> DLL = usFdiv%256;

LPC_UART0-> LCR = 0x03;

LPC_UART0-> FCR = 0x06;
}

发送代码:

整数UART0_SendByte(int ucData)

{

while(!(LPC_UART0-> LSR&0x20)){};

返回(LPC_UART0-> THR = ucData);

}

而我的printf的fputc(称为-已选中)

int fputc(int c,文件* f)

{

如果(c =='\\ n'){

UART0_SendByte('\\ r');

}

返回(UART0_SendByte(c));

}

有任何想法吗?

问候!

您的fputc将字节直接发送到UART,该UART到达板上的RS232连接器。 如果要查看fputc的输出,则需要在开发板与PC之间连接电缆,并通过超级终端等客户端进行查看。

当谈到跟踪功能时,通常意味着适配器(在您的情况下为J-Link)在程序和调试器之间创建高吞吐量通信,并遵循程序的执行。 还有其他调试功能。 例如,如果使用半主机进行编译,则程序将执行系统调用( _write_open ,...),调试器会在主机上执行这些系统调用。

因此,以我的经验,您可以调用printf ,不要重写fputc并使用半主机进行编译,并希望在调试窗口中看到输出,或者发送到UART,将RS232连接到PC并在超级终端上查看它。

我看到您找到了使用跟踪功能的第三种方法。 我相信半主机选项是一种更通用的解决方案,因为它也可以应用于不具有跟踪功能而仅具有JTAG(或SWD)连接的设置。

如果希望输出通过JLINK进入SWD接口,则要使用printf命令写入ETM单元。

请遵循http://cdn.energymicro.com/dl/an/pdf/an0043_efm32_debug_trace_capabilities.pdf的 3.4节中的说明。

始终在“ printf”代码中检查最后一个字节是否已耗尽,否则输出将不正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM