查看: 2765|回复: 5

[已解决] K10在50MHz频率下UART不能校验?(已解决)

[复制链接]

该用户从未签到

27

主题

71

帖子

0

中级会员

Rank: 3Rank: 3

积分
262
最后登录
1970-1-1
发表于 2014-4-8 18:54:13 | 显示全部楼层 |阅读模式
 由于手头只有16M晶振,设置K10主频为50M. 结构UART在无奇偶校验时,能够正常通信;设置奇偶校验后,就发送乱码了。
请问有没可能是主频问题?K10默认是72M, 需要什么样的晶振?
我知道答案 目前已有4人回答
回复

使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-4-8 19:20:14 | 显示全部楼层

    RE:K10在50MHz频率下UART不能校验?

    你接收的是否也设置为奇偶效验?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27

    主题

    71

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    262
    最后登录
    1970-1-1
     楼主| 发表于 2014-4-8 21:50:31 | 显示全部楼层

    回复:K10在50MHz频率下UART不能校验?

    回复第 2 楼 于2014-04-08 19:20:14发表:
    你接收的是否也设置为奇偶效验?
     
    是的。并且在keil提示时,UART初始化之前,总是输出0x00.
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    459

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    303
    最后登录
    2024-10-24
    发表于 2014-4-9 10:12:19 | 显示全部楼层

    回复:K10在50MHz频率下UART不能校验?

    不知你用的是否是例程代码,考虑到baud clock / ((OSR+1) × BR)可能不是整数,在例程代码中对SBR寄存器的配置做了一个循环判断,得到过采样率OSR和BR,其中可能会有误差,建议你手动计算出直接合适的OSR(上面公式中得到的为整数)。无论如何还是要确认你代码端有没有设置使能奇偶校验位。
    for (i = 5; i  baud_rate)
                temp = calculated_baud - baud_rate;
            else
                temp = baud_rate - calculated_baud;
            
            if (temp
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27

    主题

    71

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    262
    最后登录
    1970-1-1
     楼主| 发表于 2014-4-9 21:12:31 | 显示全部楼层

    RE:K10在50MHz频率下UART不能校验?

    可以确定PC上设置了EVEN校验。UART设置EVEN校验却打印出乱码,无校验时正常。K10的具体型号 MX10DX256VLH7 1N36B CTAD1234Q.
    UART初始化应该没问题,72M CLK, 115200波特率,计算出SBR=39,BRFA=2,符合datasheet中的要求。主要代码如下,请问有什么问题?
        /* Calculate baud settings */
        sbr = (uint16_t)(sysclk / (baud * 16));
        brfa = (sysclk*2) / baud - (sbr * 32);         
        temp = uartch->BDH & ~(UART_BDH_SBR(0x1F));
        uartch->BDH = temp |  UART_BDH_SBR(((sbr & 0x1F00) >> 8));
        uartch->BDL = (uint8_t)(sbr & UART_BDL_SBR_MASK);
       
        /* Save off the current value of the UARTx_C4 register except for the BRFA field */
        temp = uartch->C4 & ~(UART_C4_BRFA(0x1F));  
        uartch->C4 = temp | UART_C4_BRFA(brfa);   
        /* Even parity */
        uartch->C1 |= UART_C1_PE_MASK;
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
    发表于 2014-4-10 10:51:56 | 显示全部楼层

    RE:K10在50MHz频率下UART不能校验?

    你好,楼主。
    但你贴出的代码来看,我目前没有找到错误的地方,建议用逻辑分析仪分析一下波形!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 09:07 , Processed in 0.096773 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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