智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 14396|回复: 21
打印 上一主题 下一主题

K60的串口问题

  [复制链接]

4

主题

140

帖子

0

精华

金牌会员

观星客

Rank: 6Rank: 6

积分
2235
QQ
威望
1054
贡献
679
兑换币
573
注册时间
2012-7-24
在线时间
251 小时
跳转到指定楼层
1#
发表于 2013-2-20 17:11:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我用的是龙丘的代码,PTD6接串口模块的RX,PTD7接串口模块的TX,芯片的地和串口模块接一起,串口模块外接5V和地,线是接好的,但试了很久上位机都没反应。串口驱动之类的是装好的,也选对COM口了。还可能有什么原因呢?求指导~

补充内容 (2013-2-20 17:52):
//全局变量声明
extern int periph_clk_khz;

//主函数
void main(void)
{
    //1 主程序使用的变量定义
    uint32 runcount;        //运行计数器
    uint8 ch;
   
    //2 关中断
    DisableInterrupts;     //禁止总中断
   
    //3 模块初始化
    light_init(Light_Run_PORT,Light_Run1,Light_OFF); //指示灯初始化
    uart_init (UART0,periph_clk_khz,9600);             //串口初始化


    //4 开中断

    uart_sendN(UART0,(uint8*)"Hello World!",12);
    //主循环
    while(1)
    {
        //1 主循环计数到一定的值,使小灯的亮、暗状态切换
        runcount++;
        if(runcount>=10)
        {
            light_change(Light_Run_PORT,Light_Run1);//指示灯的亮、暗状态切换
            runcount=0;
        }
        //2 串口接收一个字节的数据
        if(uart_reN(UART0,&ch,1))
        {
            uart_send1(UART0,ch);        //发送回去
        }
                    
    }
}


补充内容 (2013-2-20 17:53):
//-------------------------------------------------------------------------*
//函数名: uart_init                                                        *
//功  能: 初始化uartx模块。                                                *
//参  数: uartch:串口号                                                    *
//        sysclk:系统总线时钟,以MHz为单位                                 *
//        baud:波特率,如9600,38400等,一般来说,速度越慢,通信越稳       *
//返  回: 无                                                               *
//说  明:                                                                  *
//-------------------------------------------------------------------------*
void uart_init (UART_MemMapPtr uartch, uint32 sysclk, uint32 baud)
{
        register uint16 sbr, brfa;
        uint8 temp;

        //使能引脚
        if (uartch == UART0_BASE_PTR)
        {
                //在PTD6上使能UART0_TXD功能
                PORTD_PCR6 = PORT_PCR_MUX(0x3);
                //在PTD7上使能UART0_RXD
                PORTD_PCR7 = PORT_PCR_MUX(0x3);
        }else if (uartch == UART1_BASE_PTR)
        {
                //在PTC4上使能UART1_TXD功能
                PORTC_PCR4 = PORT_PCR_MUX(0x3);
               
                //在PTC3上使能UART1_RXD
                PORTC_PCR3 = PORT_PCR_MUX(0x3);
        }else if (uartch == UART2_BASE_PTR)
        {
                //在PTD3上使能UART2_TXD功能
                PORTD_PCR3 = PORT_PCR_MUX(0x3);
                //在PTD2上使能UART2_RXD
                PORTD_PCR2 = PORT_PCR_MUX(0x3);
        }else if (uartch == UART3_BASE_PTR)
        {
                //在PTC17上使能UART3_TXD功能
                PORTC_PCR17 = PORT_PCR_MUX(0x3);
                //在PTC16上使能UART3_RXD
                PORTC_PCR16 = PORT_PCR_MUX(0x3);
        }else if (uartch == UART4_BASE_PTR)
        {
                //在PTE24上使能UART4_TXD功能
                PORTE_PCR24 = PORT_PCR_MUX(0x3);
                //在PTE25上使能UART4_RXD
                PORTE_PCR25 = PORT_PCR_MUX(0x3);
        }else if (uartch == UART5_BASE_PTR)
        {
                //在PTE8上使能UART5_TXD功能
                PORTE_PCR8 = PORT_PCR_MUX(0x3);
                //在PTE9上使能UART5_RXD
                PORTE_PCR9 = PORT_PCR_MUX(0x3);
        }
         
        //使能串口时钟   
        if(uartch == UART0_BASE_PTR)
                SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;
        else
                if (uartch == UART1_BASE_PTR)
                        SIM_SCGC4 |= SIM_SCGC4_UART1_MASK;
                else
                        if (uartch == UART2_BASE_PTR)
                                SIM_SCGC4 |= SIM_SCGC4_UART2_MASK;
                        else
                                if(uartch == UART3_BASE_PTR)
                                        SIM_SCGC4 |= SIM_SCGC4_UART3_MASK;
                                else
                                        if(uartch == UART4_BASE_PTR)
                                                SIM_SCGC1 |= SIM_SCGC1_UART4_MASK;
                                        else
                                                SIM_SCGC1 |= SIM_SCGC1_UART5_MASK;
                                                               
        //禁止发送接受
        UART_C2_REG(uartch) &= ~(UART_C2_TE_MASK
                                | UART_C2_RE_MASK );
       
        //配置成8位无校验模式
        UART_C1_REG(uartch) = 0;
       
        //计算波特率,串口0、1使用内核时钟,其它串口使用外设时钟,系统时钟为
        //外设时钟的2倍
        if ((uartch == UART0_BASE_PTR) | (uartch == UART1_BASE_PTR))//
                sysclk+=sysclk;
       
        sbr = (uint16)((sysclk*1000)/(baud * 16));
        temp = UART_BDH_REG(uartch) & ~(UART_BDH_SBR(0x1F));
        UART_BDH_REG(uartch) = temp |  UART_BDH_SBR(((sbr & 0x1F00) >> 8));
        UART_BDL_REG(uartch) = (uint8)(sbr & UART_BDL_SBR_MASK);
        brfa = (((sysclk*32000)/(baud * 16)) - (sbr * 32));
        temp = UART_C4_REG(uartch) & ~(UART_C4_BRFA(0x1F));
        UART_C4_REG(uartch) = temp |  UART_C4_BRFA(brfa);   
       
        //使能发送接受
        UART_C2_REG(uartch) |= (UART_C2_TE_MASK
                                | UART_C2_RE_MASK );
}

0

主题

5

帖子

0

精华

注册会员

Rank: 2

积分
153
威望
89
贡献
44
兑换币
47
注册时间
2015-10-23
在线时间
10 小时
毕业学校
嘉兴学院
22#
发表于 2016-3-31 18:24:51 | 只看该作者
...我也遇到了同样的问题.....
回复 支持 反对

使用道具 举报

2

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
320
QQ
威望
156
贡献
100
兑换币
98
注册时间
2014-10-27
在线时间
32 小时
21#
发表于 2015-4-5 23:51:57 | 只看该作者
bill1430 发表于 2013-2-21 15:21
问题还没解决,有什么建议吗?{:soso_e154:}

你好,我也遇到这个问题,你是怎么解决的呢
回复 支持 反对

使用道具 举报

7

主题

29

帖子

0

精华

高级会员

Rank: 4

积分
669
QQ
威望
320
贡献
183
兑换币
190
注册时间
2014-5-11
在线时间
83 小时
毕业学校
河北科技大学
20#
发表于 2014-11-22 20:20:24 | 只看该作者
我也碰到这情况了,卡在这里了。
我装好了驱动。用的串口是左边那个红色的,用杜邦线连到K60上的。
也是用的你这个例程,但是串口助手没反应。求助。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
168
威望
93
贡献
53
兑换币
49
注册时间
2013-12-3
在线时间
11 小时
毕业学校
在校
19#
发表于 2014-3-30 20:33:38 | 只看该作者
bill1430 发表于 2013-2-21 23:51
问题已解决,好像还是驱动的问题

请问你用的是带有max232电平转换的usb接口,而不是usb ttl的接口吗
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
威望
131
贡献
60
兑换币
66
注册时间
2012-11-28
在线时间
21 小时
毕业学校
固安一中
18#
发表于 2014-3-18 16:43:43 | 只看该作者
bill1430 发表于 2013-3-8 16:25
打开设备管理器,确保驱动装好,上位机选对COM口就好,当然TXD和RXD也要接对

txd和rxd需要自己接线么?
回复 支持 反对

使用道具 举报

5

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
QQ
威望
215
贡献
108
兑换币
139
注册时间
2013-3-17
在线时间
53 小时
17#
发表于 2013-6-20 16:57:45 | 只看该作者
亲,现在我也有同样的问题啊!求助啊
回复 支持 反对

使用道具 举报

1

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
威望
209
贡献
96
兑换币
31
注册时间
2012-3-12
在线时间
20 小时
毕业学校
华科
16#
发表于 2013-4-24 01:02:40 | 只看该作者
不要用龙丘的代码,自己写吧。我刚来始也用他的代码,发现不能用就自己写一个。
回复 支持 反对

使用道具 举报

1

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
威望
209
贡献
96
兑换币
31
注册时间
2012-3-12
在线时间
20 小时
毕业学校
华科
15#
发表于 2013-4-24 01:01:50 | 只看该作者
不要用龙丘的代码,自己写吧。我刚来始也用他的代码,发现不能用就自己写一个。
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
14#
发表于 2013-3-29 19:46:12 | 只看该作者
bill1430 发表于 2013-2-21 23:51
问题已解决,好像还是驱动的问题

亲....交流下咧!
我在这里都卡死4天了,到现在还是没解决呢...!
那个 看你的硬件连接 好像不对吧....
K60的PTD7是TX,PTD6才是RX吧...
我之前也接错过,都怪注释弄反了...
可是我接对后还是有问题...虽然收到东西了,可是接收却是错误的!
调到现在 还没解决,都想哭了...求加Q探讨下咧...584852734

目前我的情况是:不能连续的发送数据,一连续的发送就会出问题!如果在连续发送之间加一个延时就能正确接受了。可去了延时就不行了....求楼主行行好,指导下咧

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 20:34 , Processed in 0.126063 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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