美文网首页我爱编程
实现两个cc2541的串口通信

实现两个cc2541的串口通信

作者: MrRed | 来源:发表于2017-10-25 13:06 被阅读0次

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

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

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

    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
    

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

    image.png

    计算公式为:


    image.png

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

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

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

    相关文章

      网友评论

        本文标题:实现两个cc2541的串口通信

        本文链接:https://www.haomeiwen.com/subject/mowauxtx.html