S3C2440在MDK4.22下使用printf向串口打印调试

本文介绍了如何在MDK4.22环境下利用printf函数通过串口进行调试。内容涉及串口基础知识,以及在MDK中使用标准C库或微库实现printf的两种方法,包括需要定义的结构和函数。文中还提到,无论是标准库还是微库,只需正确配置和定义相关函数,无需关闭半主机模式也能实现调试信息的打印。
摘要由CSDN通过智能技术生成

背景知识:

串口的基本知识已经在上一篇讲过了。这里重点讲解如何在MDK4.22下使用printf函数,这样的话就可以很方便的打印调试信息,追踪。

这个知识来源于MDK自带的帮助手册。有现成的代码提供。

实现方式有2种,使用标准C库下裁剪合适的函数,使用微库C下裁剪合适的函数。

微库下的情况,在魔术棒那里要勾选上使用微库。然后需要定义如下结构和改写如下函数--FILE stdout fputc ferror。

标准库的情况,也是需要关注FILE stdout fputc ferror。注意网上很多文章说,在标准库下,需要关掉半主机模式,我尝试过,关掉后,需要定义_sys_exit函数,可以达到效果,但是如果不关掉半主机模式,和微库一样也只定义该定义的,也可以达到效果。不知道,是不是MDK版本升级后,已经统一了两种模式。


具体代码:

uart.c

#include "S3C2440.h"
#include "uart.h"


void init_uart0(void)
 {
	rULCON0 = 0x03;  
	
	rUCON0 = (0x05);
	//15---12   	11-10		9		8		7				6						5		 4			3-2				1-0
	//not pclk/n	pclk		Tpulse	Rpulse	timeout disable	rx error int disable   loop dis  break dis	int or poll		int or poll
 
 	rUFCON0 = 0x00;	  			
	rUMCON0 = 0x0; 				
	rUBRDIV0 = UART_BRDIV;
}

 

struct __FILE  
{  
int handle;  
/* Whatever you require here. If the only file you are using is */  
/* standard output using printf() for debugging, no file handling */  
/* is required. */  
};  
/* FILE is typedef’ d in stdio.h. */  
FILE __stdout;  

int fputc(int ch, FILE *f) 
{ 
     
    WrUTXH0_L(ch); 
     
    /* Loop until the end of transmission */ 
    while(!(rUTRSTAT0 & TXD0READY)) ;

    return ch; 
} 

int ferror(FILE *f) {
  /* Your implementation of ferror */
  return EOF;
}

main.c

#include "S3C2440.h"
#include "uart.h"
#include <stdio.h>


int main(void)
{	


	init_uart0();
	
	printf("hello world\r\n");
}

最终可以在UART0上打印hello world,这样以后程序就可以拿来复用了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值