CC2530串口实验resume.docx
- 文档编号:29371180
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:10
- 大小:19.89KB
CC2530串口实验resume.docx
《CC2530串口实验resume.docx》由会员分享,可在线阅读,更多相关《CC2530串口实验resume.docx(10页珍藏版)》请在冰豆网上搜索。
CC2530串口实验resume
CC2530串口
串口通信(SerialCommunication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
工作方式
由于CPU与接口之间按并行方式传输,接口与外设之间按串行方式传输,因此,在串行接口中,必须要有"接收移位寄存器"(串→并)和"发送移位寄存器"(并→串).在数据输入过程中,数据1位1位地从外设进入接口的"接收移位寄存器",当"接收移位寄存器"中已接收完1个字符的各位后,数据就从"接收移位寄存器"进入"数据输入寄存器".CPU从"数据输入寄存器"中读取接收到的字符.(并行读取,即D7~D0同时被读至累加器中)."接收移位寄存器"的移位速度由"接收时钟"确定.
在数据输出过程中,CPU把要输出的字符(并行地)送入"数据输出寄存器","数据输出寄存器"的内容传输到"发送移位寄存器",然后由"发送移位寄存器"移位,把数据1位1位地送到外设."发送移位寄存器"的移位速度由"发送时钟"确定.
接口中的"控制寄存器"用来容纳CPU送给此接口的各种控制信息,这些控制信息决定接口的工作方式.
"状态寄存器"的各位称为"状态位",每一个状态位都可以用来指示数据传输过程中的状态或某种错误.例如,用状态寄存器的D5位为"1"表示"数据输出寄存器"空,用D0位表示"数据输入寄存器满",用D2位表示"奇偶检验错"等.
能够完成上述"串<-->并"转换功能的电路,通常称为"通用异步收发器"(UART:
UniversalAsynchronousReceiverandTransmitter),典型的芯片有:
Intel8250/8251,16550
USB转串口即实现计算机USB接口到通用串口之间的转换。
为没有串口的计算机提供快速的通道,而且,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。
对于大多数工程师来说,开发USB2.0接口产品主要障碍在于:
要面对复杂的USB2.0协议、自己编写USB设备的驱动程序、熟悉单片机的编程。
这不仅要求有相当的VC编程经验、还能够编写USB接口的硬件(固件)程序。
所以大多数人放弃了自己开发USB产品。
为了将复杂的问题简单化,可以使用USB转串口模块。
这个模块可以被看作是一个USB2.0协议的转换器,将电脑的USB2.0接口转换为一个透明的并行总线,就象单片机总线一样。
从而几天之内就可以完成USB2.0产品的设计。
如何知道串口号COM?
在首次安装USB转串口驱动时,其串口号由WINDOWS自动分配(通常从COM2开始分配),安装完成后可在设备管理中点击属性修改串口号。
修改方法:
右键点击“我的电脑”,,点击“设备管理器”。
在弹出的设备管理器对话框中点击“端口COM和LPT”前面的“+号”,然后右键点击“USB-SERIALCH340”,选择“属性”,然后再弹出的对话框里选择“端口设置”标签,点击“高级”按钮,然后在弹出的对话框中将会看到在“COM端口号”右边有个下拉选择组合框,点击选择想要设置的COM端口号,最后依次点击“确定”。
(好像不行,查看了一下电脑上的该端口波特率9600都能通讯就是说电脑上设置没用或者说自己修改端口号后就不能用了,而且换回来后原先能用的后来又不行了!
!
!
重启后又好了。
后来又试了一下,串口号是可以改变的,要先把串口调试软件关掉,后在按上述修改)。
串口实验总结:
初始化串口需要的工作
(1)系统时钟设为高速晶振(CLKCONCMD寄存器,系统时钟设置方法:
1.第七位16MRC和32M晶振各有特点,
2.第六位适用于用于驱动休眠时钟,为看门狗产生滴答时钟,并可以用作定时器TIM2的闸门(strobe)用来计算休眠定时器的休眠时间,自己看情况选择。
3.第5-3位设置定时器。
4.第2-0位决定真正的系统主时钟,是在第七位的基础上进一步划分成更小的频率)
(2)等时钟设置稳定(CC2530该位在数据手册上没有标注但是CC2430上有备注可以用在CC2530上,也可以采用在初始化函数后面有足够的延时程序,否则就会出现刚开始打印时有乱码之后就好了的情况,两种方法等待时钟稳定)
(3)分频设置,
(4)关闭不用的振荡器,
(5)对于使用的P口设置备用1是P0口,备用2是P1口,
(6)UART0相关参数的设置,关于校验位奇偶位停止位高低电平等都在相关寄存器中设置,
(7)波特率的设置(参考手册上的数值填写)(注意波特率选择是收发双方达成的共识,双方波特率不同会造成无法通讯或乱码,波特率的设置与系统的主时钟有关所以在设置波特率寄存器时要查主时钟频率想对应的表,手册上是32M的数值,修改了系统主时钟频率后要相应的修改波特率对应下的值)
(8)清UART0相关中断。
上述步骤不可省
在经典的8051单片机中,通常要设置波特率,其中有两种方式波特率可变,具体数值由定时器来控制。
在cc2530中,设置波特率不需要定时器参与,这一点和avr单片机一样。
因此在进行初始化的过程中利用U0CSR和U0GCR两个寄存器来设置波特率。
并设置串口具体位置,用p0做串口还是用p1,以及具体到每个位。
这部分具体设置还没弄清楚。
另外还要设置通信方式为UART方式
最后要设置允许接受,开总中断允许和接收中断允许。
和adc不同的是,adc要选择触发源。
TICC2530基础实验(串口编程——USART0收发测试总结)
无论学习哪款MUC串口对于我们进行实验调试都是非常方便实用的,可以把程序中涉及的某些中间量或者其他程序状态信息打印出来显示在电脑上进行调试,许多MUC和PC机通信都是通过串口来进行的。
CC2530有两个USB转串口,分别是USART0和USART1。
USART0和USART1是串行通信接口,它们能够分别运行于异步UART模式或者同步SPI模式。
两个USART具体同样的功能,可以设置在单独的I/O引脚。
查看CC2530datasheet的I/O外设引脚映射——72页
根据上面的外设I/O引脚映射可知:
UART0对应的外部设置IO引脚关系为:
位置1:
P0_2----RXP0_3----TX位置2:
P1_4----RXP1_5----TX
UART1对应的外部设置IO引脚关系为:
位置1:
P0_5----RXP0_4----TX位置2:
P1_7----RXP1_6----TX
USART模式的操作具体下列特点:
1、8位或者9位负载数据
2、奇校验、偶校验或者无奇偶校验
3、配置其实位和停止位电平
4、配置LSB(最低有效位)或MSB(最高有效位)首先传输
5、独立接收中断
6、独立收发DMA触发
注:
在本次实验中,使用的是UART0
电路原理图:
CC2530寄存器:
∙PERCFG:
外设控制寄存器
∙P2DIR:
端口2方向和端口0外设优先级控制
∙IEN0:
中断使能0寄存器
∙IRCON2:
中断标志控制寄存器
∙UxCSR:
USARTx控制和状态寄存器
∙UxUCR:
USARTx串口控制寄存器
∙UxGCR:
USARTx通用控制寄存器
∙UxBUF:
USARTx接收/发送数据缓冲寄存器
∙UxBAUD:
USARTx波特率控制寄存器
CC2530配置串口的一般步骤:
1、配置串口的备用位置,是备用位置1,还是备用位置2。
配置寄存器PERCFG外设控制寄存器
2、配置IO,使用外部设备功能。
此处配置P0_2和P0_3用作串口UART0
3、配置端口的外设优先级。
此处配置P0外设优先作为UART0
4、配置相应串口的控制和状态寄存器。
此处配置UART0的工作寄存器
5、配置串口工作的波特率。
此处配置为波特率115200
6、将对应的串口接收/发送中断标志位清0,接收/发送一个字节都将产生一个中断,在接收时需要开总中断和使能接收中断,以及运行接收。
程序:
/******************************************
*基础实验只需要添加以下头文件
******************************************/
#include
#defineuint8unsignedchar//或typedefunsignedcharuint;
#defineuint16unsignedint
charRxdata[50];
uint8RXTXflag=1;
chartemp;
uint8datanumber=0;
/******************************************
*函数描述:
串口0初始化
*115200,8位数据位,无校验,1位停止位
******************************************/
/******************************************
*CC253O32M系统时钟波特率参数表*
*----------------------------------------*
*波特率UxBAUD.BAUD_MUxBAUD.BAUD_M*
*2400596*
*4800597*
*9600598*
*144002168*
*19200599*
*288002169*
*384005910*
*5760021610*
*768005911*
*11520021611*
*2304021612*
*****************************************/
voidUartInit(void)
{
PERCFG=0x00;//设置UART0的备用位置为P0口,即UART0的RX-P0_2,TX-P0_3
P0SEL=0x3c;//设置P0_2,P0_3为外设功能
P2DIR&=~0xc0;//配置P0端口优先作为UART0
/*设置USART0的方式*/
U0CSR|=0x80;//SPI同步模式
/*设置USART0的波特率,115200*/
U0GCR|=11;
U0BAUD|=216;
/*将UART0中断标志位清0*/
UTX0IF=0;//清除UART0发送中断标志位
URX0IF=0;//清除UART0接收中断标志位
/*开总中断,以及使能串口0接收中断*/
IEN0|=0x80;//开总中断
IEN0|=0x04;//使能串口0接收中断
/*运行串口0接收*/
U0CSR|=0x40;
}
/******************************************
*函数描述:
串口0发送字符串函数
******************************************/
voidUartSendString(char*Data,uint16len)
{
uint16j;
for(j=0;j { U0DBUF=*Data++; for(;0==UTX0IF;); UTX0IF=0; } } /****************************************** *函数描述: 32M系统时钟下的毫秒延时函数 ******************************************/ voidDelay_ms(uint16ms) { uint16i,j; for(i=0;i { for(j=0;j<1774;j++); } } /****************************************** *函数描述: 串口0接收中断服务程序 ******************************************/ #pragmavector=URX0_VECTOR __interruptvoidUART0_ISR(void) { URX0IF=0;//清中断标志 temp=U0DBUF;//将串口接收缓冲的数据存放到temp中,temp是char类型,即8位数据位 } voidmain() { CLKCONCMD&=~0x40;//设置系统时钟源为32MHz晶振 for(;CLKCONSTA&0x40;);//等待晶振稳定 CLKCONCMD&=~0X47;//设置系统主时钟频率为32MHz UartInit(); UartSendString("sendtest.",sizeof("sendtest.")); for(;;) { if(1==RXTXflag)//串口接收状态 { if(temp! =0) { if((temp! ='#')&&(datanumber<50))//'#'被定义为结束字符,最多能接收50个字符 Rxdata[datanumber++]=temp;//接收一个字节,产生一次中断,只有接收到'#'或长度大于50 else { RXTXflag=2;//进入发送状态 } temp=0; } } if(2==RXTXflag) { U0CSR&=~0x40;//禁止接收 UartSendString(Rxdata,datanumber); U0CSR|=0x40;//允许接收 RXTXflag=1;//恢复到接收状态 datanumber=0; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CC2530 串口 实验 resume