用的是S3C2410,终端上出来的是乱码。串口应该能直接发字符,不需要什么转换吧!波特率应该不会有问题吧,我是直接套公式的! 串口通信方式为:波特率为115200,无奇偶校验,1位停止位,8位数据位
程序代码如下: #include <stdlib.h> #include <string.h> #include <stdarg.h> #include <ctype.h> #include "2410addr.h"
#define pclk 12000000
void Uart_Init( int baud) { int i; // I/O口设置 (GPH5,GPH4) UART1的(RXD1,TXD1) rGPHUP =0x00;// The pull up function is enable rGPHCON = (rGPHCON & (~0x00000F00)) | (0x00000A00); //GPH5为RXD1、GPH4为TXD1 rUFCON1 = 0x0;//UART channel 1 FIFO control register, FIFO disable rUMCON1 = 0x0;//UART chaneel 1 MODEM control register, AFC disable rULCON1 = 0x03;// 禁止IRDA,无奇偶校验,1位停止位,8位数据位 rUCON1 = 0x245;// 使用PCLK来生成波特率,发送中断为电平触发模 式,接收中断为边沿触发模式, // 禁止接收超时中断,使能接收错误中断,正常工作模式,中断或查询方式 (非DMA) //串口波特率设置 rUBRDIV1=( (int)(pclk/baud/16.0) -1 );// 未用PLL,则pclk=12M for(i=0;i<100;i++); }
//向串口发送字节数据,并等待发送完毕。输入为data是要发送的数据 // 对于'\n'字符,发送时会加入'\r'字符 void UARTPutch( int data) { int i; if(data=='\n') { while(!(rUTRSTAT1 & 0x2));// 等待发送器为空 for(i=0;i<10;i++); //because the slow response of hyper_terminal rUTXH1 = '\r'; } while(!(rUTRSTAT1 & 0x2)); //Wait until THR Buffer is empty for(i=0;i<10;i++); rUTXH1=data; }
//向串口发送一字符串,*str为要发送的字符串的指针 void UARTPuts (char const *str) { while(*str !='\0') UARTPutch(*str++); }
int Main(void) { int i; Uart_Init(115200); // 初始化UART1 while(1) {
for(i=0; i<10; i++) { UARTPuts("Hello World!\n"); } } return(0); }
|