查看: 9858|回复: 35

[已解决] 串口通信的一大困惑(已解决)

[复制链接]

该用户从未签到

23

主题

122

帖子

0

注册会员

Rank: 2

积分
177
最后登录
1970-1-1
发表于 2014-10-28 11:17:36 | 显示全部楼层 |阅读模式
本帖最后由 ltm 于 2014-10-30 14:33 编辑

用MKL05Z32VLC4芯片的UART0串口发送数据,串口的相关设置如下:
                                         Data width:8 bits
                                         Parity:None
                                         Stop bits:1
                                         Loop mode:Normal
                                         Baud rate:4800
                                         Wake up condition:Idle line wakeup
                                          Idle line mode:Starts after stop(start) bit                       stop和start都试过,效果一样
                                         Transmitter output:Not inverted
                                          Break generation length:10/11 bits

如上设置后,有关发送代码如下:
void TI1_OnInterrupt(LDD_TUserData *UserDataPtr)                                                //60Hz中断频率
{
        if(LchTx&&HasInit)                                                                                           //HasInit表示初始化完毕
        {
                AS1_SendBlock(MyAS,TxBuf,5);                                                               //重复发送5个0x55
                LchTx=FALSE;
        }
}


void AS1_OnBlockSent(LDD_TUserData *UserDataPtr)
{
        LchTx=TRUE;                                                                                                 //表示一帧数据发送完,重复发送下一帧数据
}


但这么发出的数据根本不对,传入PC机的串口软件后发现根本不是原发出的数据,不知何故,难道设置上有什么问题?请帮忙看一下。
我知道答案 目前已有35人回答
回复

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-10-28 13:23:09 | 显示全部楼层
你好,楼主!
请问你的例程来自官方例程呢,还是自己编的?
回复 支持 反对

使用道具 举报

该用户从未签到

23

主题

122

帖子

0

注册会员

Rank: 2

积分
177
最后登录
1970-1-1
 楼主| 发表于 2014-10-28 13:28:13 | 显示全部楼层
FSL_TICS_ZP 发表于 2014-10-28 13:23
你好,楼主!
请问你的例程来自官方例程呢,还是自己编的?

用PE生成后自己填的代码
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-10-28 13:34:11 | 显示全部楼层
ltm 发表于 2014-10-28 13:28
用PE生成后自己填的代码

你好,楼主!
你可以查看生成的代码中,对UART0寄存器的配置是不是与你预想的符合。
回复 支持 反对

使用道具 举报

该用户从未签到

23

主题

122

帖子

0

注册会员

Rank: 2

积分
177
最后登录
1970-1-1
 楼主| 发表于 2014-10-28 13:49:23 | 显示全部楼层
FSL_TICS_ZP 发表于 2014-10-28 13:34
你好,楼主!
你可以查看生成的代码中,对UART0寄存器的配置是不是与你预想的符合。 ...

这个配置是用PE自动生成的,应该不会错吧?我把串口初始化代码贴出来吧,你看看有无错误:

LDD_TDeviceData* AS1_Init(LDD_TUserData *UserDataPtr)
{
  /* Allocate device structure */
  AS1_TDeviceDataPtr DeviceDataPrv;
  /* {Default RTOS Adapter} Driver memory allocation: Dynamic allocation is simulated by a pointer to the static object */
  DeviceDataPrv = &DeviceDataPrv__DEFAULT_RTOS_ALLOC;

  /* Clear the transmit counters and pointer */
  DeviceDataPrv->OutSentDataNum = 0x00U; /* Clear the counter of sent characters */
  DeviceDataPrv->OutDataNumReq = 0x00U; /* Clear the counter of characters to be send by SendBlock() */
  DeviceDataPrv->OutDataPtr = NULL;    /* Clear the buffer pointer for data to be transmitted */
  DeviceDataPrv->UserDataPtr = UserDataPtr; /* Store the RTOS device structure */
  /* Allocate interrupt vectors */
  /* {Default RTOS Adapter} Set interrupt vector: IVT is static, ISR parameter is passed by the global variable */
  INT_UART0__DEFAULT_RTOS_ISRPARAM = DeviceDataPrv;
  /* SIM_SCGC4: UART0=1 */
  SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;
  /* PORTB_PCR3: ISF=0,MUX=3 */
  PORTB_PCR3 = (uint32_t)((PORTB_PCR3 & (uint32_t)~(uint32_t)(
                PORT_PCR_ISF_MASK |
                PORT_PCR_MUX(0x04)
               )) | (uint32_t)(
                PORT_PCR_MUX(0x03)
               ));
  /* NVIC_IPR3: PRI_12=0x80 */
  NVIC_IPR3 = (uint32_t)((NVIC_IPR3 & (uint32_t)~(uint32_t)(
               NVIC_IP_PRI_12(0x7F)
              )) | (uint32_t)(
               NVIC_IP_PRI_12(0x80)
              ));
  /* NVIC_ISER: SETENA|=0x1000 */
  NVIC_ISER |= NVIC_ISER_SETENA(0x1000);
  UART0_PDD_EnableTransmitter(UART0_BASE_PTR, PDD_DISABLE); /* Disable transmitter. */
  DeviceDataPrv->SerFlag = 0x00U;      /* Reset flags */
  /* UART0_C1: LOOPS=0,DOZEEN=0,RSRC=0,M=0,WAKE=0,ILT=1,PE=0,PT=0 */
  UART0_C1 = UART0_C1_ILT_MASK;        /*  Set the C1 register */
  /* UART0_C3: R8T9=0,R9T8=0,TXDIR=0,TXINV=0,ORIE=0,NEIE=0,FEIE=0,PEIE=0 */
  UART0_C3 = 0x00U;                    /*  Set the C3 register */
  /* UART0_C4: MAEN1=0,MAEN2=0,M10=0,OSR=0 */
  UART0_C4 = UART0_C4_OSR(0x00);       /*  Set the C4 register */
  /* UART0_S2: LBKDIF=0,RXEDGIF=0,MSBF=0,RXINV=0,RWUID=0,BRK13=0,LBKDE=0,RAF=0 */
  UART0_S2 = 0x00U;                    /*  Set the S2 register */
  SIM_PDD_SetClockSourceUART0(SIM_BASE_PTR, SIM_PDD_UART0_FLL_CLOCK);
  UART0_PDD_SetBaudRate(UART0_BASE_PTR, 2500U); /* Set the baud rate register. */
  UART0_PDD_SetOversamplingRatio(UART0_BASE_PTR, 3U);
  UART0_PDD_EnableSamplingOnBothEdges(UART0_BASE_PTR, PDD_ENABLE);
  UART0_PDD_EnableTransmitter(UART0_BASE_PTR, PDD_ENABLE); /* Enable transmitter */
  /* Registration of the device structure */
  PE_LDD_RegisterDeviceStructure(PE_LDD_COMPONENT_AS1_ID,DeviceDataPrv);
  return ((LDD_TDeviceData *)DeviceDataPrv);
}
回复 支持 反对

使用道具 举报

该用户从未签到

23

主题

122

帖子

0

注册会员

Rank: 2

积分
177
最后登录
1970-1-1
 楼主| 发表于 2014-10-28 15:43:33 | 显示全部楼层
FSL_TICS_ZP 发表于 2014-10-28 13:34
你好,楼主!
你可以查看生成的代码中,对UART0寄存器的配置是不是与你预想的符合。 ...

你好,有答案了吗?着急
回复 支持 反对

使用道具 举报

该用户从未签到

23

主题

122

帖子

0

注册会员

Rank: 2

积分
177
最后登录
1970-1-1
 楼主| 发表于 2014-10-28 16:15:13 | 显示全部楼层
FSL_TICS_ZP 发表于 2014-10-28 13:34
你好,楼主!
你可以查看生成的代码中,对UART0寄存器的配置是不是与你预想的符合。 ...

是不是PE生成的程序达不到指定的波特率?若是,差多少?
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-10-28 17:20:19 | 显示全部楼层
ltm 发表于 2014-10-28 16:15
是不是PE生成的程序达不到指定的波特率?若是,差多少?

你好,楼主!请参考附件中的UART例程。
KE02_UART.rar (454.86 KB, 下载次数: 23)
回复 支持 反对

使用道具 举报

该用户从未签到

23

主题

122

帖子

0

注册会员

Rank: 2

积分
177
最后登录
1970-1-1
 楼主| 发表于 2014-10-28 18:00:45 | 显示全部楼层
FSL_TICS_ZP 发表于 2014-10-28 17:20
你好,楼主!请参考附件中的UART例程。

这个看了,一是芯片型号与我的不同;再就是没看出什么问题来。
ps:我用的是LDD组件,有什么特殊之处没有?
回复 支持 反对

使用道具 举报

该用户从未签到

23

主题

122

帖子

0

注册会员

Rank: 2

积分
177
最后登录
1970-1-1
 楼主| 发表于 2014-10-28 18:11:13 | 显示全部楼层
FSL_TICS_ZP 发表于 2014-10-28 17:20
你好,楼主!请参考附件中的UART例程。

你能不能做一个MKL05Z32VLC4的串口通信例程给我?也用LDD组件,用中断方式发送。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-8 03:25 , Processed in 0.116816 second(s), 31 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表