MC9S12G96的SCI通信问题

九个太阳2023 2016-11-04 11:00:34
RT
硬件平台:MC9S12G96
软件平台:Codewarrior5.1

问题描述:
配置SCI0,使之进行正常通信

配置如下:

/* SCI0CR1: LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */
setReg8(SCI0CR1, 0x00U);
/* SCI0SR2: AMAP=1,??=0,??=0,TXPOL=0,RXPOL=0,BRK13=0,TXDIR=0,RAF=0 */
setReg8(SCI0SR2, 0x80U); /* Switch to the alternative register set */
/* SCI0ASR1: RXEDGIF=1,??=0,??=0,??=0,??=0,BERRV=0,BERRIF=1,BKDIF=1 */
setReg8(SCI0ASR1, 0x83U); /* Clear alternative status flags */
/* SCI0ACR1: RXEDGIE=0,??=0,??=0,??=0,??=0,??=0,BERRIE=0,BKDIE=0 */
setReg8(SCI0ACR1, 0x00U);
/* SCI0ACR2: ??=0,??=0,??=0,??=0,??=0,BERRM1=0,BERRM0=0,BKDFE=0 */
setReg8(SCI0ACR2, 0x00U);
SCI0CR2 |= (SCI0CR2_TE_MASK | SCI0CR2_RE_MASK); /* Enable transmitter, Enable receiver */
/* SCI0SR2: AMAP=0,??=0,??=0,TXPOL=0,RXPOL=0,BRK13=0,TXDIR=0,RAF=0 */
setReg8(SCI0SR2, 0x00U); /* Switch to the normal register set */
(void) SCI0SR1; /* Reset interrupt request flags */
/* SCI0CR2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 */
SCI0CR2 = 0U; /* Disable error interrupts */
SCI0BD = 0x41u; /* Set prescaler bits */ /*BUSCLK/16/19200 BUSCLK=20M*/
SCI0CR2 |= (SCI0CR2_TE_MASK | SCI0CR2_RE_MASK); /* Enable transmitter, Enable receiver */


SCI发送函数:

byte bl_uart0_write(byte dat) {
if(SCI0SR1_TDRE == 0U) { /* Is the transmitter empty? */
return ERR_TXFULL; /* If no then error */
}
SCI0DRL = (byte)dat;
return ERR_OK; /* OK */
}


调试现象:
使用波特率19200,数据位8,停止位1,无奇偶校验

从CPU飞线出来TX,接到DB9上,通过串口调试助手查看数据,板子发送0x55,串口助手接收正确;但是板子发送其他数据(除了0x55),串口助手均不能接收到正确数据,比如发送0xAA,接收到的是0x15

目前不知道是哪里出了问题,请做过的兄弟或者大神指点。。。

另外:

#define SYS_OSC_CLOCK_FREQ (8000)
#define SYS_MCU_CLOCK_FREQ (40000)
#define SYS_BUS_CLOCK_FREQ (20000) /*KHz*/
...全文
350 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
九个太阳2023 2016-11-10
  • 打赏
  • 举报
回复
引用 5 楼 of123 的回复:
用示波器看一下。一看时序,二看电平,三看数据值。 一般来说,不做电平转移是不适合 PC 接收的。
恩,是的,如果不做电平转换的话,接收到的数据是错误的,我用了另外一块板子用来接收,发送和接收都是正确的,看来就是因为没有电平转换,所以不能用PC的串口助手测试, 谢谢
of123 2016-11-09
  • 打赏
  • 举报
回复
用示波器看一下。一看时序,二看电平,三看数据值。 一般来说,不做电平转移是不适合 PC 接收的。
九个太阳2023 2016-11-08
  • 打赏
  • 举报
回复
引用 2 楼 libin55 的回复:
好像数据变成反向的。 这款片子没用过,可以尝试发送00与FF,然后DUBUG看串口数据寄存器是否正确。 最好到官网下载例程好了
从CPU出来的TX,没有经过电平转换芯片,测试出来的波形难道不对?
woshi_ziyu 2016-11-08
  • 打赏
  • 举报
回复
数据错误基本上都是波特率的问题 19200的精度不够 实际的波特率是多少
侦探蜡笔小新 2016-11-07
  • 打赏
  • 举报
回复
额,是不是要使能RTS
玉怀一捧雪 2016-11-07
  • 打赏
  • 举报
回复
好像数据变成反向的。 这款片子没用过,可以尝试发送00与FF,然后DUBUG看串口数据寄存器是否正确。 最好到官网下载例程好了

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧