智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 14472|回复: 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 );
}

4

主题

140

帖子

0

精华

金牌会员

观星客

Rank: 6Rank: 6

积分
2235
QQ
威望
1054
贡献
679
兑换币
573
注册时间
2012-7-24
在线时间
251 小时
2#
 楼主| 发表于 2013-2-20 22:02:55 | 只看该作者
自己顶一个,啥没人说话呢?是我表述不清还是……
回复 支持 反对

使用道具 举报

2

主题

88

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3047
威望
1439
贡献
836
兑换币
479
注册时间
2012-10-16
在线时间
386 小时
3#
发表于 2013-2-20 23:08:11 | 只看该作者
我也刚看这里,也还不是很清楚
你那个串口模块是什么?
还有你不用上位机,用串口调试工具或sscom42什么的看能不能发送接收
回复 支持 反对

使用道具 举报

4

主题

140

帖子

0

精华

金牌会员

观星客

Rank: 6Rank: 6

积分
2235
QQ
威望
1054
贡献
679
兑换币
573
注册时间
2012-7-24
在线时间
251 小时
4#
 楼主| 发表于 2013-2-20 23:19:17 | 只看该作者
shaojianbuguai 发表于 2013-2-20 23:08
我也刚看这里,也还不是很清楚
你那个串口模块是什么?
还有你不用上位机,用串口调试工具或sscom42什么的 ...

串口模块是MAX232电平转换电路,串口工具也有试过,都不行...
回复 支持 反对

使用道具 举报

53

主题

2469

帖子

0

精华

跨届大侠

狙击手

Rank: 10Rank: 10Rank: 10

积分
11290

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章论坛骨干奖章资源大师奖章

威望
4701
贡献
3671
兑换币
2368
注册时间
2012-3-12
在线时间
1459 小时
5#
发表于 2013-2-21 13:53:07 | 只看该作者
:):)
回复 支持 反对

使用道具 举报

4

主题

140

帖子

0

精华

金牌会员

观星客

Rank: 6Rank: 6

积分
2235
QQ
威望
1054
贡献
679
兑换币
573
注册时间
2012-7-24
在线时间
251 小时
6#
 楼主| 发表于 2013-2-21 15:21:10 | 只看该作者
sdlibin007@qq.c 发表于 2013-2-21 13:53

问题还没解决,有什么建议吗?
回复 支持 反对

使用道具 举报

53

主题

2469

帖子

0

精华

跨届大侠

狙击手

Rank: 10Rank: 10Rank: 10

积分
11290

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章论坛骨干奖章资源大师奖章

威望
4701
贡献
3671
兑换币
2368
注册时间
2012-3-12
在线时间
1459 小时
7#
发表于 2013-2-21 15:24:30 | 只看该作者
bill1430 发表于 2013-2-21 15:21
问题还没解决,有什么建议吗?

呵呵,暂时没有
回复 支持 反对

使用道具 举报

4

主题

140

帖子

0

精华

金牌会员

观星客

Rank: 6Rank: 6

积分
2235
QQ
威望
1054
贡献
679
兑换币
573
注册时间
2012-7-24
在线时间
251 小时
8#
 楼主| 发表于 2013-2-21 23:51:07 | 只看该作者
问题已解决,好像还是驱动的问题
回复 支持 反对

使用道具 举报

6

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1003

优秀会员奖章活跃会员奖章

威望
468
贡献
343
兑换币
318
注册时间
2013-2-25
在线时间
96 小时
9#
发表于 2013-3-8 11:33:55 | 只看该作者
怎么解决的?
回复 支持 反对

使用道具 举报

4

主题

140

帖子

0

精华

金牌会员

观星客

Rank: 6Rank: 6

积分
2235
QQ
威望
1054
贡献
679
兑换币
573
注册时间
2012-7-24
在线时间
251 小时
10#
 楼主| 发表于 2013-3-8 16:25:08 | 只看该作者
fish007 发表于 2013-3-8 11:33
怎么解决的?

打开设备管理器,确保驱动装好,上位机选对COM口就好,当然TXD和RXD也要接对
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 16:55 , Processed in 0.097890 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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