查看: 16191|回复: 12

【PSoC3心得】UART串口通信收发实验

[复制链接]
  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-1 00:00:19 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 ming1006 于 2013-1-1 00:07 编辑

        这应该是2013年PSoC版块的第一帖吧。在新的一年里用串口给大家拜个年吧!
        在PSoC上实现UART是非常容易的,我们需要的只是加入UART模块并进行简单的配置,这里我们使用中断来实现UART的接收,所以要在rx_interrupt引脚处添加一个中断模块,另外reset引脚记得拉低。
                 未命名.jpg
        下面让我们来配置UART,点击UART模块我们进入配置界面,配置UART的工作方式为全双工,波特率9600b/s,比特位为8位,停止位为1,其他默认。
           未命名1.jpg
        为了实现交互和观察效果,我们再加入按键和LED模块。按键模块由数字输入引脚和中断模块组成,将按键引脚配置为上升沿触发中断方式即可。
    未命名2.jpg 未命名6.jpg
        LED等模块我们采用控制寄存器进行控制,用控制寄存器来统一控制两个4位宽的LEDL和LEDH引脚。为了实现用控制寄存器控制摸个引脚,一定要将LEDL和LEDH的HW Connection勾选来表示与内部其他模块直接相连。
    未命名3.jpg
        关于总线的连接有基础注意事项,一是LEDL和LEDH要勾选Display as bus,二是靠近LEDL和LEDH的为四位总线,地址应该为[3:0]和[7:4],设置为[0:3]和[4:7]会得不到预期效果。双击总线即可配置。
        未命名7.jpg 未命名4.jpg
        接下来是引脚配置,其中RXD和TXD可以根据需要任意配置,其他的是按照PSoC3 First Touch Starter kit的情况配置的。
        未命名8.jpg
        配置好了之后就可以编译了,编译完会自动生成相应的API函数。我们首先在KeyISR.c中加入头文件包含和声明全局变量
    1. /*******************************************************************************
    2. * Place your includes, defines and code here
    3. ********************************************************************************/
    4. /* `#START KeyISR_intc` */
    5. #include <KEY.h>

    6. extern bit key;
    7. /* `#END` */
    复制代码
    在KeyISR.c可以找到中断函数,加入以下几句
    1. CY_ISR(KeyISR_Interrupt)
    2. {
    3. /* Place your Interrupt code here. */
    4. /* `#START KeyISR_Interrupt` */
    5. key = 1;                   //按键按下
    6. KEY_INTSTAT;         //清中断标志(在KEY.h中有定义)
    7. /* `#END` */

    8. /* PSoC3 ES1, ES2 RTC ISR PATCH */
    9. #if(CYDEV_CHIP_FAMILY_USED == CYDEV_CHIP_FAMILY_PSOC3)
    10. #if((CYDEV_CHIP_REVISION_USED <= CYDEV_CHIP_REVISION_3A_ES2) && (KeyISR__ES2_PATCH ))
    11. KeyISR_ISR_PATCH();
    12. #endif
    13. #endif
    14. }
    复制代码
    在UartISR.c中加入头文件包含
    1. /*******************************************************************************
    2. * Place your includes, defines and code here
    3. ********************************************************************************/
    4. /* `#START UartISR_intc` */
    5. #include <UART.h>
    6. #include <LEDCtlReg.h>
    7. /* `#END` */
    复制代码
    同样在UartISR.c中找到中断函数并加入如下代码
    1. CY_ISR(UartISR_Interrupt)
    2. {
    3. /* Place your Interrupt code here. */
    4. /* `#START UartISR_Interrupt` */
    5. char rx_data;
    6. rx_data = UART_GetChar(); //读uart
    7. switch(rx_data)
    8. {
    9. case '0': LEDCtlReg_Write(1); //熄灭第一个LED灯
    10. break;
    11. case '1': LEDCtlReg_Write(2); //熄灭第二个LED灯
    12. break;
    13. case '2': LEDCtlReg_Write(4);
    14. break;
    15. case '3': LEDCtlReg_Write(8);
    16. break;
    17. case '4': LEDCtlReg_Write(16);
    18. break;
    19. case '5': LEDCtlReg_Write(32);
    20. break;
    21. case '6': LEDCtlReg_Write(64);
    22. break;
    23. case '7': LEDCtlReg_Write(128);
    24. break;
    25. default :
    26. break;
    27. }
    28. /* `#END` */

    29. /* PSoC3 ES1, ES2 RTC ISR PATCH */
    30. #if(CYDEV_CHIP_FAMILY_USED == CYDEV_CHIP_FAMILY_PSOC3)
    31. #if((CYDEV_CHIP_REVISION_USED <= CYDEV_CHIP_REVISION_3A_ES2) && (UartISR__ES2_PATCH ))
    32. UartISR_ISR_PATCH();
    33. #endif
    34. #endif
    35. }
    复制代码
    最后在main.c文件里声明全局变量和编写主函数
    1. #include <device.h>

    2. bit key = 0;

    3. void main()
    4. {
    5. /* Place your initialization/startup code here (e.g. MyInst_Start()) */
    6. UART_Start(); //开启UART
    7. UartISR_Start(); //开启UART中断
    8. KeyISR_Start(); //开启按键中断

    9. CyGlobalIntEnable; /* Uncomment this line to enable global interrupts. */
    10. for(;;)
    11. {
    12. /* Place your application code here. */
    13. if(key)
    14. {
    15. UART_PutString("Happy new year!");
    16. key = 0;
    17. }
    18. }
    19. }
    复制代码
    至此我们的UART串口收发工程就完成了,编译并下载后,每按一下按键电脑串口就会收到一串"Happy new year!",而用电脑向PSoC发送‘0’——'7'可以熄灭对应的LED灯。
        未命名9.jpg 图像161_副本.jpg

    完整工程,欢迎下载
    Uart.zip (1.84 MB, 下载次数: 291)
    未命名5.jpg
    未命名9.jpg
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-6-12 21:59
  • 签到天数: 647 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-1 00:07:11 | 显示全部楼层
    沙发~good job~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-1 00:09:59 | 显示全部楼层
    QQ哥 发表于 2013-1-1 00:07
    沙发~good job~

    你这是新年第一沙发!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-6-12 21:59
  • 签到天数: 647 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-1 00:11:11 | 显示全部楼层
    ming1006 发表于 2013-1-1 00:09
    你这是新年第一沙发!

    对~我的首发~~~~~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-1 00:13:39 | 显示全部楼层
    QQ哥 发表于 2013-1-1 00:11
    对~我的首发~~~~~~~

    呵呵,我来抢个新年第一个5#吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-1 10:43:51 | 显示全部楼层
    ht868788 发表于 2013-1-1 00:24
    明哥现在对psoc3内部资源调用了如指掌啊,有空在想点例程

    哪里,只是因为PSoC是图形配置界面,比较容易上手,例程的话是必学写的,不过快期末了可能会忙点,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-8-7 21:35
  • 签到天数: 340 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-1-1 17:15:33 | 显示全部楼层
    支持支持……
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-1 18:01:50 | 显示全部楼层

    RE: 【PSoC3心得】UART串口通信收发实验

    kk5290122 发表于 2013-1-1 17:15
    支持支持……

    呵呵,谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-11-27 16:02
  • 签到天数: 66 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-3-10 22:29:36 | 显示全部楼层
    good 很多教程贴都是楼主发的啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-12-20 15:08
  • 签到天数: 510 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-3-10 22:32:03 | 显示全部楼层
    tao475824827 发表于 2013-3-10 22:29
    good 很多教程贴都是楼主发的啊

    作为版主,是应该的,最近好久没写了
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-5-2 05:30 , Processed in 0.204856 second(s), 33 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.