楼主: ltm

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

[复制链接]

该用户从未签到

0

主题

32

帖子

0

注册会员

Rank: 2

积分
97
最后登录
2019-10-27
发表于 2014-10-29 15:41:00 | 显示全部楼层
如果示波器能够检测到数据的话,建议您还是看一下波特率的设置。
回复 支持 反对

使用道具 举报

该用户从未签到

23

主题

122

帖子

0

注册会员

Rank: 2

积分
177
最后登录
1970-1-1
 楼主| 发表于 2014-10-29 15:44:39 | 显示全部楼层
FSL_FAE_LiKe 发表于 2014-10-29 15:35
楼主您好,低功耗UART和普通UART的差别就是UART的时钟源有多个选择,可以在低功耗模式收发数据,使用起来没 ...

我仔细测了一下,发现如下问题:
单个发送00、01、02、03、FF这几个数都对,但发送01、02、03时后面都多出一个字节FF;发送其他数都不正确,如发送04变成0xC,发送0x33变成0x63等,而且大多情况下都要多出一个0xFF字节。请问这是什么缘故?能否帮忙分析一下?
ps:我用的是AS1_SendBlock函数,发送一个字节。AS1_SendChar也用了,效果完全一样。
回复 支持 反对

使用道具 举报

该用户从未签到

23

主题

122

帖子

0

注册会员

Rank: 2

积分
177
最后登录
1970-1-1
 楼主| 发表于 2014-10-29 15:59:51 | 显示全部楼层
FSL_FAE_LiKe 发表于 2014-10-29 15:41
如果示波器能够检测到数据的话,建议您还是看一下波特率的设置。

波特率的设置就在PE中明确显示着的,怎么会不对呢?是不是PE有bug呀?
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

32

帖子

0

注册会员

Rank: 2

积分
97
最后登录
2019-10-27
发表于 2014-10-29 16:06:51 | 显示全部楼层
如果都是多了0xFF这种字符的话,很像是在发送idle 数据,你先把ilde line关了,将C2寄存器的RWU位设成0试试
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

32

帖子

0

注册会员

Rank: 2

积分
97
最后登录
2019-10-27
发表于 2014-10-29 16:10:25 | 显示全部楼层
你单步执行到发送的那条语句,看一下波特率相关的几个寄存器,对比一下手册里面的那个公式,再看看波特率对不对
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-10-29 16:11:57 | 显示全部楼层
    你把设置波特率那个函数内容发出来,我这没有CW10,帮你测试不了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    23

    主题

    122

    帖子

    0

    注册会员

    Rank: 2

    积分
    177
    最后登录
    1970-1-1
     楼主| 发表于 2014-10-29 16:18:02 | 显示全部楼层
    安 发表于 2014-10-29 16:11
    你把设置波特率那个函数内容发出来,我这没有CW10,帮你测试不了。

    设置波特率的函数在5楼啊。CW10是什么?我用的是keil。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-10-29 16:20:08 | 显示全部楼层
    ltm 发表于 2014-10-29 16:18
    设置波特率的函数在5楼啊。CW10是什么?我用的是keil。

    UART0_PDD_SetBaudRate(UART0_BASE_PTR, 2500U); /* Set the baud rate register. */
    我说的是UART0_PDD_SetBaudRate这个函数代码。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    23

    主题

    122

    帖子

    0

    注册会员

    Rank: 2

    积分
    177
    最后登录
    1970-1-1
     楼主| 发表于 2014-10-29 16:37:36 | 显示全部楼层
    安 发表于 2014-10-29 16:20
    UART0_PDD_SetBaudRate(UART0_BASE_PTR, 2500U); /* Set the baud rate register. */
    我说的是UART0_PDD_ ...

    /* ----------------------------------------------------------------------------
       -- SetBaudRate
       ---------------------------------------------------------------------------- */

    /**
    * @brief Sets new baud rate value.
    * @param PeripheralBase Pointer to a peripheral registers structure (peripheral
    *        base address). You can use the constant defined in the registers
    *        definition header file (<peripheral>_BASE_PTR) or the constant defined in
    *        the peripheral initialization component header file
    *        (<component_name>_DEVICE).
    * @param BaudRate New baud rate value. This parameter is a 13-bit value.
    * @return Returns a value of void type.
    * @remarks The macro accesses the following registers: UART0_BDH, UART0_BDL
    *          (depending on the peripheral).
    * @par Example:
    *      @code
    *      UART0_PDD_SetBaudRate(<peripheral>_BASE_PTR, 1);
    *      @endcode
    */
    #define UART0_PDD_SetBaudRate(PeripheralBase, BaudRate) ( \
        (UART0_BDH_REG(PeripheralBase) = \
         (uint8_t)(( \
          (uint8_t)(UART0_BDH_REG(PeripheralBase) & (uint8_t)(~(uint8_t)UART0_BDH_SBR_MASK))) | ( \
          (uint8_t)((uint16_t)(BaudRate) >> 8U)))), \
        (UART0_BDL_REG(PeripheralBase) = \
         (uint8_t)(BaudRate)) \
      )

    这是在UART0_PDD.h文件中的,你看是不是。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    23

    主题

    122

    帖子

    0

    注册会员

    Rank: 2

    积分
    177
    最后登录
    1970-1-1
     楼主| 发表于 2014-10-29 17:12:09 | 显示全部楼层
    安 发表于 2014-10-29 16:20
    UART0_PDD_SetBaudRate(UART0_BASE_PTR, 2500U); /* Set the baud rate register. */
    我说的是UART0_PDD_ ...

    在示波器上测了一个脉冲周期,得到的频率是2k,不知对否。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 06:33 , Processed in 0.110272 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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