请教高手:自己编的串口程序,终端收到乱码

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

确定你的pclk是12M?

  
 楼主| yangzx 发表于 2008-6-5 00:07 | 显示全部楼层

回复主题:请教高手:自己编的串口程序,终端收到乱码

我大概知道原因了,从模板启动后可能设置了默认系统FCLK为200M,那如果是按1:2:4则PCLK应是50M,不发乱码才怪呢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

13

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部