佚名通过本文主要向大家介绍了工程中的数学问题sci,sci论文时态问题,sci回答问题模板,sci通信,sci通信接口等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: MC9S12G96的SCI通信问题
描述:
硬件平台:MC9S12G96
软件平台:Codewarrior5.1
问题描述:
配置SCI0,使之进行正常通信
配置如下:
SCI发送函数:
调试现象:
使用波特率19200,数据位8,停止位1,无奇偶校验
从CPU飞线出来TX,接到DB9上,通过串口调试助手查看数据,板子发送0x55,串口助手接收正确;但是板子发送其他数据(除了0x55),串口助手均不能接收到正确数据,比如发送0xAA,接收到的是0x15
目前不知道是哪里出了问题,请做过的兄弟或者大神指点。。。
另外:
解决方案1:
描述:
本帖最后由 hao507 于 2016-11-04 11:02:32 编辑
MC9S12G96,SCI
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*/
解决方案1:
用示波器看一下。一看时序,二看电平,三看数据值。
一般来说,不做电平转移是不适合 PC 接收的。
好像数据变成反向的。
这款片子没用过,可以尝试发送00与FF,然后DUBUG看串口数据寄存器是否正确。
最好到官网下载例程好了
数据错误基本上都是波特率的问题 19200的精度不够 实际的波特率是多少