智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2263|回复: 6
打印 上一主题 下一主题

求大神指教串口发送问题

[复制链接]

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
跳转到指定楼层
1#
发表于 2013-3-28 11:20:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
零K60基础,准备飞思卡尔才1周多,问题是天天多;如今遇到槛了,求大神赐教...
我用简单的串口发送代码,测试串口功能,发现:直接调用一个串口发送函数,不加delay,结果串口助手接受到的数据是有问题的,在串口发送函数之后加个delay之后神奇般没问题了,接收全部正确。请问这是怎么一回事啊?怎样才能去掉delay呢???有什么问题会引起这样的状况啊?
(备注:系统频率211M,起初怀疑频率太高,降到100M还是不行...
            波特率设置:sbr = (unsigned short)((211538462)/(9600*16));//211538462是系统频率Hz
                              UART0_BDH = (unsigned char)((sbr & 0x1F00) >> 8);
                              UART0_BDL = (unsigned char)( sbr & 0x00FF);)
望懂的尽快帮下,纠结3天了,我都快哭了;个个车都在跑了,我还在研究图像的采集问题.....提供个思路也好!
鞠躬了..........

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
2#
 楼主| 发表于 2013-3-28 11:22:32 | 只看该作者
:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
3#
 楼主| 发表于 2013-3-28 11:38:01 | 只看该作者
有delay:(00 09是放在一个数组中的数据)正确接收了

无delay:有规律的错误接收了....

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

80

主题

1045

帖子

0

精华

跨届大侠

北京龙邱智能科技有限公司

Rank: 10Rank: 10Rank: 10

积分
10332

论坛元老奖章

QQ
威望
2905
贡献
6151
兑换币
4515
注册时间
2008-6-7
在线时间
638 小时
4#
发表于 2013-3-28 15:12:07 | 只看该作者
只是发的快慢的问题,你的这个串口设置好像很简单,没有波特率矫正的部分,所以,可能会出问题的。下面是K60F系列的初始化过程,参考下(程序里面锁相环用的是400M,总线是200M,UART0/1的波特率是由总线决定的)
/* Calculate baud settings */
    uint32 sbr=0, brfa=0,baud=115200,busclk_k=200000;
   
    // 超频
    pllinit400M();   
    /* Enable the clock to the selected UART */
    SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;       
       
    /* Enable the UART0_TXD function on PTD6 */
    PORTD_PCR6 = PORT_PCR_MUX(0x3); // UART is alt3 function for this pin

    /* Enable the UART0_RXD function on PTD7 */
    PORTD_PCR7 = PORT_PCR_MUX(0x3); // UART is alt3 function for this pin
   
    //共两步骤:超频第2步,设置串口波特率,系统主频跟上面的必须一致才行
    //UART baud rate = UART module clock / (16 × (SBR[SBR] +BRFD))
    //UART0 and UART1 modules operate from the core/system clock
    sbr = (unsigned short)((busclk_k*1000)/(baud*16));
    //参考龙邱核心板\01_芯片数据表\K60P144M150SF3RM.pdf--P.1773,占13bit
    UART0_BDH = (unsigned char)((sbr & 0x1F00) >> 8);
    UART0_BDL = (unsigned char)( sbr & 0x00FF);

    /* Determine if a fractional divider is needed to get closer to the baud rate */
    brfa = (((busclk_k*2000)/baud) - (sbr * 32));
    //brfa =0;
    UART0_C4 = (unsigned char)(brfa & 0x001F);
     
    /* Configure the UART for 8-bit mode, no parity */
    UART0_C1 = 0;
   
    /* Enable receiver and transmitter */
    UART0_C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK );   
回复 支持 反对

使用道具 举报

80

主题

1045

帖子

0

精华

跨届大侠

北京龙邱智能科技有限公司

Rank: 10Rank: 10Rank: 10

积分
10332

论坛元老奖章

QQ
威望
2905
贡献
6151
兑换币
4515
注册时间
2008-6-7
在线时间
638 小时
5#
发表于 2013-3-28 15:15:33 | 只看该作者
发送函数如下:
void uart0_putchar (unsigned char data)
{
    /* Wait until space is available in the FIFO */
    while(!(UART0_S1 & UART_S1_TDRE_MASK));
   
    /* Send the character */
    UART0_D = data;
}
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
6#
 楼主| 发表于 2013-3-29 10:45:18 | 只看该作者
chiusir 发表于 2013-3-28 15:15
发送函数如下:
void uart0_putchar (unsigned char data)
{

先谢过...龙丘售后服务不错!
我仔细的看了你的每一个字,跟我的设置差不多,不过我少了波特率的微调,但是加上去之后问题还是一样,没变化。
这个不对吧,
这里说串口0/1用的是系统时钟,并不是总线时钟哦,改成总线时钟后,接收就完全不行了;

我现在觉得应该不是波特率的问题,既然delay的时候能正确的接收,就说明波特率是没问题的,如果有问题,不管有没有delay都不可能正确接收的。其次 共地 我也共、电平转换我也都试过了,结果还是一样,没了delay就会错。
这么分析下来,我觉得问题就在 数据发送缓冲区 这里了,可是我发送函数里明明有判断缓冲区为空后才发送当前的数据的,于是乎我就蒙了...想问下有什么操作(或是缺少什么操作)会让 判断缓冲区是否为空 出现错误吗?
另外...这里应该是笔误吧?
PTD6是RX,PTD7才是TX,我曾经在这里错过,这里提下,希望对 在这里纠结的 人能有点帮助....

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
7#
 楼主| 发表于 2013-3-29 10:54:03 | 只看该作者
实在是头疼了....搞串口这么久,无非也是想通过 上位机 观察摄像头采集回来的数据。走下捷径吧...不知有没有好心人可以施舍下这份代码,K60的...
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-4 09:09 , Processed in 0.095738 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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