实现两个cc2541的串口通信

为了实现多个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上实验成功后,在单片机上也实验成功了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • SPI通信实验 SPI简介 串行外设接口(Serial Peripheral Interface Bus,SPI)...
    btskyrmb阅读 13,263评论 1 12
  • 串口操作 串口操作需要的头文件 #include /*标准输入输出定义*/ #include /*标准函数库定...
    旅行家John阅读 5,237评论 0 3
  • 姓名:周崇杰 学号:16040120059 专业:机械设计制造及其自动化 转载自:http://blog.csd...
    CJbaby阅读 5,374评论 0 6
  • 1 嵌入式操作系统 为什么要用嵌入式操作系统 普通的单片机编程:程序(软件)——单片机硬件; 嵌入式操作系统开发:...
    安安zoe阅读 4,237评论 0 1
  • 好几天前就想整理整理最近拍的照片了,今天趁着在宿舍一个人无聊把这半个月来拍的照给整出来。以前爱拍照,但不刻意,现在...
    江慌慌啊呀阅读 4,697评论 26 20

友情链接更多精彩内容