串口是工程师在调试的时候经常使用的一个用具,可以实现人和单片机的交流~
所以一般串口UART都会首先被初始化好,在调试的时候方便打印信息。
飞思卡尔的串口UART很容易配置(我这里使用的是HCS08的内核,MC13211的片子,都是实际测试过滴):
1.首先,涉及到波特率寄存器SCI1 Baud Rate Registers (SCIxBDH, SCIxBDL)。
计算公式为:BR(BR = SCIxBDH+SCIxBDL) = 1 to 8191, the SCI baud rate = BUSCLK/(16×BR)。
2.其次,就是串口的控制寄存器了,设置一些相关参数,例如数据位,停止位,校验位,中断否等。
涉及到:SCI1 Control Register 1 (SCIxC1)和SCI1 Control Register 2 (SCIxC2),具体相关的位的定义看参考手册吧:-)
3.就是写代码了。如下:
初始化函数和宏定义:
#define UART_BAUD 9600
#define F_CPU 16000000
#define BAUD_RATE_WORD F_CPU/32/UART_BAUD
void uart_init(void)
{
SCI1BDH = (unsigned char)(BAUD_RATE_WORD>>8);
SCI1BDL = (unsigned char)(BAUD_RATE_WORD&0xFF);
SCI1C2 = 0b00101100;
}
发送一个字节:
void uart_putch(char dat)
{
while (!(SCI1S1 & (1<<7))) //等待BUFFER空
{
asm("sta 0x1800");
//__RESET_WATCHDOG();
}
SCI1D = dat;
asm("sta 0x1800");
while (!(SCI1S1 & (1<<6)))
{
asm("sta 0x1800"); //等待传输结束
//__RESET_WATCHDOG();
}
}
发送字符串:
void uart_puts(char *str)
{
while(*str)
{
uart_putch(*str++);
__RESET_WATCHDOG();
}
}
到此,串口就可以玩了~当然一般不会喜欢使用那个字符串打印函数的,printf还是深受高级工程师(例如:CZZ)的欢迎的~!!!
这里简单说下,飞思卡尔的串口UART的printf功能的实现方法:
1.人工编写一个TERMIO_PutChar为名称的串口字节发送函数!
2.在里面写上发送字节的代码:
void TERMIO_PutChar(char dat) //为了使用printf 别忘记加入stdio.h
{
uart_putch(dat); //偷懒直接使用上面写好的那个
}
3.包含<stdio.h>,就可以开始使用printf喽~简单吧!
好了,串口玩到此,结束(MC1321x系列最好别用内部晶振,超级不准,串口基本是乱码)。