资讯详情

CC2530学习(四)CC2530串行接口

并行通信和串行通信

根据连接结构和传输方式的不同,微控制器与外设之间的数据通信可分为两种:并行通信和串行通信。 :各位指数据发送或接收,每个数据位置使用单独的导线。传输速度快,效率高,但数据线多,成本高。 :指数接一个地指数据 顺序发送或接收。数据线少,成本低,但传输速度慢,效率低。

由此可见,两种通信方式各有优缺点,在实际应用中根据不同的情况而定。

CC串口通信模块2530

CC2530有两个串行通信接口,它们可以分别运行或者。通过设置这种模式,具体用于该模式来选择。 两个USART接口具有相同的功能,并具有相应的外部I/O引脚映射关系 设置。 映射关系: — P0_2 — P0_3 — P0_5 — P0_4 — P1_4 — P1_5 — P1_7 — P1_6

对每个USART串口通信编程的本质是设置五个相关寄存器: <1> UxCSR: USARTx控制和状态寄存器。 <2> UxUCR: USARTx的UART控制寄存器。 <3> UxGCR: USARTx通用控制寄存器。 <4> UxDBUF:USARTx接收/发送数据缓冲寄存器。 <5> UxBAUD:USARTx波特率控制寄存器。

相关寄存器介绍

下一个代码部分将涉及一些寄存器的各个位置

:时钟频率控制寄存器。 在这里插入图片描述 D7位为32KHZ选择时间振荡器,0为32KRC震荡,1为32K晶振。默认为1。 D6位是系统时钟的选择。0为32M晶振,1为16M RC震荡。当D7位为0时D6必须为1。 D5~D三是定时器输出标记。000是32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为 1MHZ,110为500KHZ,111为250KHZ。默认为001。需要注意的是:当D定时器的最高频率为16MHZ。 D2~D0:系统主时钟选择:000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。当D6为1时,系统主时钟的最高频率为16MHZ。

:时频状态寄存器。 D7位为当前32KHZ时间振荡器的频率KRC震荡,1为32K晶振。 D六位是当前系统时钟的选择。0为32M晶振,1为16M RC震荡。 D5~D三是当前定时器输出标记。000是32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为 1MHZ,110为500KHZ,111为250KHZ。 D2~D0是当前系统的主时钟。000是32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。

:设置部分外设I/O位置0为默认I位置1,1为默认位置2 :USART0控制和状态; D7为工作模式选择,0为SPI模式,1为USART模式 D6为UART接收器使能,0为禁用接收器,1为接收器使能。 D5为SPI主/从模式选择,0为SPI主模式,1为SPI从模式。 D4为帧错误检测状态,0为无误,1为出错。 D三是奇偶错误检测,0为无错误,1为奇偶校验错误。 D2为字节接收状态,0为未接收字节,1为准备接收字节。 D1为字节传输状态,0为字节未传输,1为字节已发送到数据缓冲区。 D0为USART接收/传送主动状态,0为USART空闲,1为USART忙碌。

:USART0通用控制寄存器; D7为SPI时钟极性:0为负时钟极性,1为正时钟极性; D6为SPI时钟相位: D5为传送为顺序:0为最低有效位先传送,1为最高有效位先传送。 D4~D0波特率设置: 我们还介绍了波特率的设置: CC2530的波特率由BAUD_E和BAUD_M共同决定: F系统时钟频率为微控制器:16MHz或32MHz。 在TI32MHz由计算公式不难得出系统时钟下常用波特率的参数值MHz在系统时钟下对应的参数值。

UART口与计算机COM口连接

先了解两个电平:TTL电平和RS232电平。 ----小于0.8V ----大于2.4V。 ----5~15V ---- -5~-15V。

计算机串行通信接口是RS-232标准接口,CC2530单片机的UART接口则是TTL电平,两者,因此,要完成两者之间的数据通信,需要使用接口芯片在两者之间进行,常用的有MAX232芯片。

串口小实验

这个小实验是做的CC2530串口0与串口助手连接,在32HMz的内部系统时钟下产生19200的波特率。从串口助手发送一个字符或者一个字符串到开发板开发板又将收到的字符或者字符串回送到串口助手上。 设计思路: <1> 初始化USART每个寄存器0口 <2> 设计字节发送函数 <3> 中断服务函数设计接收完成 <4> 分析接收到的数据并执行相应的操作

串口0初始化函数

选择外设的引脚映射位置,并将相应的引脚设置为外设功能 ,然后设置波特率、控制寄存器和中断的相关控制位。

void initUART(void) { 
           CLKCONCMD &= ~0x40;  ///设置系统时钟源为32MHz晶振   while(CLKCONSTA & 0x40);//等待晶振稳定 CLKCONCMD &= ~0x47;//设置系统主时钟频率为32MHz PERCFG=0x00; //选择位置1即P0_2,P0_3 P0SEL=0x0c; //将P0_2,P0_3口设置为外设功能 U0CSR |= 0xc0; //串口设置为UART异步通信模式并使能接收器 U0GCR |=9; U0BAUD |=59; //设置波特率为19200 UTX0IF = 0; //UART0 TX中断标志初始置位1 URX0IF = 0; //UART0 RX中断标志初始置位1 //U0CSR |=0x40; //允许接收 //IEN0 |=0x84;//开总中断,接收中断 URX0IE = 1;//使能URAT0接收中断 EA = 1; //使能总中断 } 

数据接收中断服务函数

#pragma vector =URX0_VECTOR
__interrupt void UART0_ISR(void)
{ 
        
  URX0IF = 0;  //清中断标志
  temp = U0DBUF;
  RxFlag=1;//接收标志置为1
}

发送字节函数

void UartTX_Send_char(uchar Data)
{ 
        
  U0DBUF = Data;
  while(UTX0IF==0);   //当发送成功标志位置为1后退出等待
  UTX0IF=0; //软件清除发送标志
}

实验源代码

#include "iocc2530.h"
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
//函数申明
void initUART(void);//初始化串口
void UartTX_Send_char(uchar Data);//发送字符

uchar temp;
uchar RxFlag=0;
//串口初始化
void initUART(void)
{ 
        
  CLKCONCMD &= ~0x40;  //设置系统时钟源为32MHz晶振
  while(CLKCONSTA & 0x40);//等待晶振稳定
  CLKCONCMD &= ~0x47;//设置系统主时钟频率为32MHz
  
  PERCFG=0x00;  //选择位置1即P0_2,P0_3
  P0SEL=0x3c; //将P0_2,P0_3口设置为外设功能
  U0CSR |= 0xc0; //串口设置为UART异步通信模式并使能接收器
  U0GCR |=9;
  U0BAUD |=59;  //设置波特率为19200
  UTX0IF = 0; //UART0 TX中断标志初始置位1
  URX0IF = 0; //UART0 RX中断标志初始置位1
  //U0CSR |=0x40; //允许接收
  //IEN0 |=0x84;//开总中断,接收中断
  URX0IE = 1;//使能URAT0接收中断
  EA = 1; //使能总中断
}
void UartTX_Send_char(uchar Data)
{ 
        
  U0DBUF = Data;
  while(UTX0IF==0);   //当发送成功标志位置为1后退出等待
  UTX0IF=0; //软件清除发送标志
}
//串口中断函数
#pragma vector =URX0_VECTOR
__interrupt void UART0_ISR(void)
{ 
        
  URX0IF = 0;  //清中断标志
  temp = U0DBUF;
  RxFlag=1;//接收标志置为1
}  
void main(void)
{ 
        
  initUART();
  while(1)
  { 
        
    if(RxFlag==1)
    { 
        
      UartTX_Send_char(temp);
      RxFlag=0;
    }
  }
}

本次介绍就到这了,谢谢大家的观看!

标签: 公头母头25针串口并口连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台