查看: 3468|回复: 2

PSoC3 FirstTouch Starter Kit 之简单串口通信

[复制链接]
  • TA的每日心情
    奋斗
    2018-8-29 20:40
  • 签到天数: 1341 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-10-13 01:09:45 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 wangku001wei 于 2012-10-13 01:11 编辑

    尝试了下Com串口
    PSoC3的串口中 TX RX 引脚可以自由分配
    首先看原理图
    串口通信部分 放置了两个数字IO端口,一个终端,一个UART组件
    QQ截图20121009095703.jpg
    为了判断接收成功 又放了个控制LED灯的寄存器及数字IO
    QQ截图20121013005758.jpg

    我对串口接收设置了中断,串口组件的设置如下
    采用19200的波特率
    QQ截图20121009014317.jpg
    设置了RX中断
    QQ截图20121009014328.jpg
    注意TX及RX的引脚设置
    Tx引脚设置
    QQ截图20121009014303.jpg
    注意其引脚模式一定要写成CMOS_Out,否则TX引脚无法输出串口数据,我就纠结了好长时间
    QQ截图20121009024411.jpg

    Rx引脚设置
    QQ截图20121009095715.jpg
    RX则要设置成高阻
    QQ截图20121009095709.jpg

    TX 及 RX 及 led 的引脚分配
    QQ截图20121013010538.jpg

    在测试串口接收的工程中 下位机把接收到的字符重新发送出去 同时LED灯发生一次闪烁
    串口调试助手如下图所示
    QQ截图20121009095629.jpg

    rx接收中段代码

    *******************************************************************************/
    CY_ISR(isr_1_Interrupt)
    {
        /*  Place your Interrupt code here. */
        /* `#START isr_1_Interrupt` */
            UART_1_GetRxInterruptSource();  // clear the Status register
            revFlag = 1;
        /* `#END` */
    }

    主函数代码

    extern uint8 revFlag;
    void main()
    {
        /* Place your initialization/startup code here (e.g. MyInst_Start()) */
            
            uint8 i = 0;
            uint8 revData = 0;
            uint8 flag = 1;
            CYGlobalIntEnable;
            isr_1_Start();        
            UART_1_Start();
            //UART_1_LoadTxConfig();
        while(1)
        {
                    // Test Tx Mode
    //      UART_1_PutChar(i);
    //                if(i==255)        
    //                        i = 0;
    //                else
    //                        i += 1;
    //                UART_1_PutString("Test");
    //                CyDelay(500);  // 500msCyDelay

                    // Test Rx Mode
                    if(revFlag)
                    {
                            revFlag = 0;
                            // get revData;
                            revData = UART_1_ReadRxData(); //ok
                            // sent back
                            
                            UART_1_PutChar(revData);
                            CyDelay(100);
                            
                            // Test RX INIT OK
                            if(flag)
                            {        
                                    Control_Reg_1_Write(1);        //??
                                    flag = 0;
                            }
                            else
                            {
                                    Control_Reg_1_Write(0);        //??
                                    flag = 1;
                            }
                    }
        }
    }


    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-4 19:13
  • 签到天数: 281 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-10-14 00:46:05 | 显示全部楼层
    顶,RX最好也接个LED
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-8-29 20:40
  • 签到天数: 1341 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-10-14 01:51:06 | 显示全部楼层
    小鸟愤怒 发表于 2012-10-14 00:46
    顶,RX最好也接个LED

    恩 不错不错   
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 17:06 , Processed in 0.133670 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.