1、CC2530串口实验resume资料CC2530串口实验resumeCC2530串口串口通信(Serial Communication), 是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。工作方式由于 CPU 与接口之间按并行方式传输,接口与外设之间按串行方式传输,因此,在串行接口中,必须要有 接收移位寄存器 (串并)和 发送移位寄存器 (并串). 在数据输入过程中,数据 1 位 1 位地从外设进入接口的 接收移位寄存器 ,当 接收移位寄存器 中已接收完 1 个字符的各位
2、后,数据就从 接收移位寄存器 进入 数据输入寄存器 . CPU 从 数据输入寄存器 中读取接收到的字符.(并行读取,即 D7D0 同时被读至累加器中). 接收移位寄存器 的移位速度由 接收时钟 确定.在数据输出过程中,CPU 把要输出的字符(并行地)送入 数据输出寄存器 , 数据输出寄存器 的内容传输到 发送移位寄存器 ,然后由 发送移位寄存器 移位,把数据 1 位 1 位地送到外设. 发送移位寄存器 的移位速度由 发送时钟 确定.接口中的 控制寄存器 用来容纳 CPU 送给此接口的各种控制信息,这些控制信息决定接口的工作方式. 状态寄存器 的各位称为 状态位 ,每一个状态位都可以用来指示数据
3、传输过程中的状态或某种错误.例如,用状态寄存器的 D5 位为 1 表示 数据输出寄存器 空,用 D0 位表示 数据输入寄存器满 ,用 D2 位表示 奇偶检验错 等.能够完成上述 串 并 转换功能的电路,通常称为 通用异步收发器 (UART :Universal Asynchronous Receiver and Transmitter),典型的芯片有:Intel 8250/8251,16550USB转串口即实现计算机USB接口到通用串口之间的转换。为没有串口的计算机提供快速的通道,而且,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。对于大多数工程师来说,开发USB2.0
4、接口产品主要障碍在于:要面对复杂的USB2.0协议、自己编写USB设备的驱动程序、熟悉单片机的编程。这不仅要求有相当的VC编程经验、还能够编写USB接口的硬件(固件)程序。所以大多数人放弃了自己开发USB产品。为了将复杂的问题简单化,可以使用USB转串口模块。这个模块可以被看作是一个USB2.0协议的转换器,将电脑的USB2.0接口转换为一个透明的并行总线,就象单片机总线一样。从而几天之内就可以完成USB2.0产品的设计。如何知道串口号COM ?在首次安装USB转串口驱动时,其串口号由WINDOWS自动分配(通常从COM2开始分配),安装完成后可在设备管理中点击属性修改串口号。修改方法:右键点
5、击“我的电脑”,点击“设备管理器”。在弹出的设备管理器对话框中点击“端口COM和LPT”前面的“+号”,然后右键点击“USB-SERIAL CH340”,选择“属性”,然后再弹出的对话框里选择“端口设置”标签,点击“高级”按钮,然后在弹出的对话框中将会看到在“COM端口号”右边有个下拉选择组合框,点击选择想要设置的COM端口号,最后依次点击“确定”。(好像不行,查看了一下电脑上的该端口波特率9600都能通讯就是说电脑上设置没用或者说自己修改端口号后就不能用了,而且换回来后原先能用的后来又不行了!重启后又好了。后来又试了一下,串口号是可以改变的,要先把串口调试软件关掉,后在按上述修改)。串口实验
6、总结:初始化串口需要的工作(1)系统时钟设为高速晶振(CLKCONCMD寄存器,系统时钟设置方法:1.第七位16MRC和32M晶振各有特点,2.第六位适用于用于驱动休眠时钟,为看门狗产生滴答时钟,并可以用作定时器TIM2的闸门(strobe)用来计算休眠定时器的休眠时间,自己看情况选择。3.第5-3位设置定时器 。4.第2-0位决定真正的系统主时钟,是在第七位的基础上进一步划分成更小的频率)(2)等时钟设置稳定(CC2530该位在数据手册上没有标注但是CC2430上有备注可以用在CC2530上,也可以采用在初始化函数后面有足够的延时程序,否则就会出现刚开始打印时有乱码之后就好了的情况,两种方法
7、等待时钟稳定)(3)分频设置,(4)关闭不用的振荡器,(5)对于使用的P口设置备用1是P0口,备用2是P1口,(6)UART0相关参数的设置,关于校验位奇偶位停止位高低电平等都在相关寄存器中设置,(7)波特率的设置(参考手册上的数值填写)(注意波特率选择是收发双方达成的共识,双方波特率不同会造成无法通讯或乱码,波特率的设置与系统的主时钟有关所以在设置波特率寄存器时要查主时钟频率想对应的表,手册上是32M的数值,修改了系统主时钟频率后要相应的修改波特率对应下的值)(8)清UART0相关中断。上述步骤不可省在经典的8051单片机中,通常要设置波特率,其中有两种方式波特率可变,具体数值由定时器来控制
8、。在cc2530中,设置波特率不需要定时器参与,这一点和avr单片机一样。因此在进行初始化的过程中利用U0CSR和U0GCR两个寄存器来设置波特率。并设置串口具体位置,用p0做串口还是用p1,以及具体到每个位。这部分具体设置还没弄清楚。另外还要设置通信方式为UART方式最后要设置允许接受,开总中断允许和接收中断允许。和adc不同的是,adc要选择触发源。TI CC2530基础实验(串口编程USART0收发测试总结) 无论学习哪款MUC串口对于我们进行实验调试都是非常方便实用的,可以把程序中涉及的某些中间量或者其他程序状态信息打印出来显示在电脑上进行调试,许多MUC和PC机通信都是通过串口来进行
9、的。CC2530有两个USB转串口,分别是USART0和USART1。USART0和USART1是串行通信接口,它们能够分别运行于异步UART模式或者同步SPI模式。两个USART具体同样的功能,可以设置在单独的I/O引脚。查看CC2530 datasheet的I/O外设引脚映射72页根据上面的外设I/O引脚映射可知:UART0对应的外部设置IO引脚关系为:位置1:P0_2-RX P0_3-TX 位置2:P1_4-RX P1_5-TXUART1对应的外部设置IO引脚关系为:位置1:P0_5-RX P0_4-TX 位置2:P1_7-RX P1_6-TXUSART模式的操作具体下列特点:1、8位或
10、者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 波特率控
11、制寄存器CC2530配置串口的一般步骤:1、配置串口的备用位置,是备用位置1,还是备用位置2。配置寄存器PERCFG外设控制寄存器2、配置IO,使用外部设备功能。此处配置P0_2和P0_3用作串口UART03、配置端口的外设优先级。此处配置P0外设优先作为UART04、配置相应串口的控制和状态寄存器。此处配置UART0的工作寄存器5、配置串口工作的波特率。此处配置为波特率1152006、将对应的串口接收/发送中断标志位清0,接收/发送一个字节都将产生一个中断,在接收时需要开总中断和使能接收中断,以及运行接收。程序:/* * 基础实验只需要添加以下头文件 */#include #define u
12、int8 unsigned char /或typedef unsigned char uint;#define uint16 unsigned int char Rxdata50;uint8 RXTXflag = 1;char temp;uint8 datanumber = 0;/* * 函数描述:串口0初始化 * 115200,8位数据位,无校验,1位停止位 */* * CC253O 32M系统时钟波特率参数表 * *-* * 波特率 UxBAUD.BAUD_M UxBAUD.BAUD_M * * 2400 59 6 * * 4800 59 7 * * 9600 59 8 * * 14400
13、 216 8 * * 19200 59 9 * * 28800 216 9 * * 38400 59 10 * * 57600 216 10 * * 76800 59 11 * * 115200 216 11 * * 23040 216 12 * */void UartInit(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; /S
14、PI同步模式 /*设置USART0的波特率,115200*/ U0GCR |= 11; U0BAUD |= 216; /*将UART0中断标志位清0*/ UTX0IF = 0; /清除UART0发送中断标志位 URX0IF = 0; /清除UART0接收中断标志位 /*开总中断,以及使能串口0接收中断*/ IEN0 |= 0x80; /开总中断 IEN0 |= 0x04; /使能串口0接收中断 /*运行串口0接收*/ U0CSR |= 0x40;/* * 函数描述:串口0发送字符串函数 */void UartSendString(char *Data, uint16 len) uint16 j
15、; for (j = 0; j len; j+) U0DBUF = *Data+; for (; 0 = UTX0IF ;); UTX0IF = 0; /* * 函数描述:32M系统时钟下的毫秒延时函数 */void Delay_ms(uint16 ms) uint16 i,j; for(i = 0; i ms; i+) for(j = 0;j 1774; j+); /* * 函数描述:串口0接收中断服务程序 */#pragma vector = URX0_VECTOR_interrupt void UART0_ISR(void) URX0IF = 0; /清中断标志 temp = U0DBU
16、F; /将串口接收缓冲的数据存放到temp中,temp是char类型,即8位数据位void main() CLKCONCMD &= 0x40; /设置系统时钟源为32MHz晶振 for(; CLKCONSTA & 0x40;); /等待晶振稳定 CLKCONCMD &= 0X47; /设置系统主时钟频率为32MHz UartInit(); UartSendString(send test.,sizeof(send test.); for (;) if (1 = RXTXflag) /串口接收状态 if (temp != 0) if (temp != #)&(datanumber50) /#被定义为结束字符,最多能接收50个字符 Rxdatadatanumber+ = temp; /接收一个字节,产生一次中断,只有接收到#或长度大于50 else RXTXflag = 2; /进入发送状态 temp = 0; if (2 = RXTXflag) U0CSR &= 0x40; /禁止接收 UartSendString(Rxdata,datanumber); U0CSR |= 0x40; /允许接收 RXTXflag = 1; /恢复到接收状态 datanumber = 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1