sky-Hawk where 发表于 2013-1-1 00:00:19

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

本帖最后由 ming1006 于 2013-1-1 00:07 编辑

    这应该是2013年PSoC版块的第一帖吧。在新的一年里用串口给大家拜个年吧!
    在PSoC上实现UART是非常容易的,我们需要的只是加入UART模块并进行简单的配置,这里我们使用中断来实现UART的接收,所以要在rx_interrupt引脚处添加一个中断模块,另外reset引脚记得拉低。
            
    下面让我们来配置UART,点击UART模块我们进入配置界面,配置UART的工作方式为全双工,波特率9600b/s,比特位为8位,停止位为1,其他默认。
      
    为了实现交互和观察效果,我们再加入按键和LED模块。按键模块由数字输入引脚和中断模块组成,将按键引脚配置为上升沿触发中断方式即可。

    LED等模块我们采用控制寄存器进行控制,用控制寄存器来统一控制两个4位宽的LEDL和LEDH引脚。为了实现用控制寄存器控制摸个引脚,一定要将LEDL和LEDH的HW Connection勾选来表示与内部其他模块直接相连。

    关于总线的连接有基础注意事项,一是LEDL和LEDH要勾选Display as bus,二是靠近LEDL和LEDH的为四位总线,地址应该为和,设置为和会得不到预期效果。双击总线即可配置。
   
    接下来是引脚配置,其中RXD和TXD可以根据需要任意配置,其他的是按照PSoC3 First Touch Starter kit的情况配置的。
   
    配置好了之后就可以编译了,编译完会自动生成相应的API函数。我们首先在KeyISR.c中加入头文件包含和声明全局变量/*******************************************************************************
* Place your includes, defines and code here
********************************************************************************/
/* `#START KeyISR_intc` */
#include <KEY.h>

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

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

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

bit key = 0;

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

CyGlobalIntEnable; /* Uncomment this line to enable global interrupts. */
for(;;)
{
/* Place your application code here. */
if(key)
{
UART_PutString("Happy new year!");
key = 0;
}
}
}至此我们的UART串口收发工程就完成了,编译并下载后,每按一下按键电脑串口就会收到一串"Happy new year!",而用电脑向PSoC发送‘0’——'7'可以熄灭对应的LED灯。
   

完整工程,欢迎下载





   

eefocus_4128795 发表于 2025-5-6 11:19:16

楼主好,接收字符串应该怎么做?

ni22ki 发表于 2017-11-14 16:29:12

这方面资料不是很多      很感谢,

ming1006 发表于 2013-8-23 21:24:48

一定要将LEDL和LEDH的HW Connection勾选来表示与内部其他模块直接相连
好吧,我就记得以前也遇到这个问题,竟然捣鼓了这么久,难怪加控制寄存器会报错,这次一定要记得了

sky-Hawk where 发表于 2013-3-11 19:18:06

ht868788 发表于 2013-3-11 18:21 static/image/common/back.gif
最近碰到一个问题,是把采集的数据通过串口实时的发送到PC的串口助手上,这个想了半天,没什么思路啊?我看 ...

我一般的做法是把数据的各位取出来,转为ascii码后发过去,当然如果你的数据要是1字节的话也可以当成16进制数来看

sky-Hawk where 发表于 2013-3-10 22:32:03

tao475824827 发表于 2013-3-10 22:29 static/image/common/back.gif
good 很多教程贴都是楼主发的啊

作为版主,是应该的,最近好久没写了

sky-Hawk where 发表于 2013-3-10 22:29:36

good 很多教程贴都是楼主发的啊

sky-Hawk where 发表于 2013-1-1 18:01:50

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

kk5290122 发表于 2013-1-1 17:15 static/image/common/back.gif
支持支持……

呵呵,谢谢

sky-Hawk where 发表于 2013-1-1 17:15:33

支持支持……

sky-Hawk where 发表于 2013-1-1 10:43:51

ht868788 发表于 2013-1-1 00:24 static/image/common/back.gif
明哥现在对psoc3内部资源调用了如指掌啊,有空在想点例程

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

sky-Hawk where 发表于 2013-1-1 00:13:39

QQ哥 发表于 2013-1-1 00:11 static/image/common/back.gif
对~我的首发~~~~~~~

呵呵,我来抢个新年第一个5#吧:lol
页: [1] 2
查看完整版本: 【PSoC3心得】UART串口通信收发实验

Baidu
map