实现两个cc2541的串口通信

为了实现多个cc2541的串口通信,先从两个做开始。

2017-10-23
实现了两个cc2541的单工通信。一个单片机周期性的从串口发送数据,另一个单片机接收数据,如果数据符合要求,则做一次led的闪烁。

参考:http://www.cnblogs.com/chenzhao207/p/4531941.html

实现两个cc2541的串口通信_第1张图片
image.png

可以知道cc2541要两个uart,这里我们用uart0。

void InitUart(void)
{ 
    PERCFG = 0x00;           //外设控制寄存器 USART 0的IO位置:0为P0口位置1 
    P0SEL = 0x0c;            //P0_2,P0_3用作串口(外设功能)
    P2DIR &= ~0xC0;          //P0优先作为UART0
    
    U0CSR |= 0x80;           //设置为UART方式
    U0GCR |= 8;                    
    U0BAUD |= 59;           //波特率设为9600
    UTX0IF = 0;              //UART0 TX中断标志初始置位0
    U0CSR |= 0x40;           //允许接收 
    IEN0 |= 0x84;            //开总中断允许接收中断  
}

以上为对uart0进行初始化的程序。
PERCFG为外设io引脚映射控制的寄存器。
P0SEL表示的是IO口的功能选择,可以选择为普通IO口,或者作为外设的口。0表示普通IO
P2DIR为PORT2的方向和PORT0外设优先级的控制IO。其中7,6位表示的是PORT0外设的优先级设置(这个要注意,因为名称比较奇怪)。P2DIR & = ~0xC0;将7,6位置零,也就是将uart0设为第一优先级。
U0CSR,U0GCR,U0BAUD等为UART0的设置寄存器。
U0CSR |= 0x80表示将io口设置为串口模式,因为这个两个io口还兼有spi的模式。需要注意的是,U0CSR还和串口的发送使能有关。但是这里不能进行设置,需要在UART0都配置完后才行。

U0GCR |= 8;                    
U0BAUD |= 59;           //波特率设为9600

这两句设置了波特率,设计值参考表格。

实现两个cc2541的串口通信_第2张图片
image.png

计算公式为:


image.png

串口传送数据的函数,就是直接把数据送到U0DBUF寄存器中,会自动传送出去。

发送和接收的程序差不多,只有main函数部分有一些区别。

在实验的过程中,遇到了一个问题使得实验一直没有成功。那就是波特率似乎调的太高了。原来用的是115200一直传输不了,改成9600以后,在arduino上实验成功后,在单片机上也实验成功了。

你可能感兴趣的:(实现两个cc2541的串口通信)