一、串口协议介绍 串口传输协议是嵌入式开发里比较常见的传输协议,开发阶段用的最多的方式就是将mcu的调试信息打印到pc机串口终端显示,方便调试错误。
一般传输协议分为两种: 并口和串口。
并口传输协议:指数据的各位同时发送或接收,每个数据位使用单独的一条导线。传输速度快、效率高,但需要的数据线较多,成本高。
串口传输协议:指数据一位接一位地顺 序发送或接收。需要的数据线少,成本低,但传输速度慢,效率低。
cc2530一共有两个串口通信接口,分别是usart0和usart1,它们能够配置成异步uart模式或者同步spi模式。
两个usart接口具有相同的功能,通过percfg寄存器可以设置两个usart接口对应外部i/o引脚的映射关系:
位置1:rx0 --- p0_2 tx0 --- p0_3 rx1 --- p0_5 tx1 --- p0_4 位置2:rx0 --- p1_4 tx0 --- p1_5 rx1 --- p1_7 tx1 --- p1_6复制代码 对每个usart串口通信编程,本质是设置相关的5个寄存器:
uxcsr: usartx的控制和状态寄存器。 uxucr: usartx的uart控制寄存器。 uxgcr: usartx的通用控制寄存器。 uxdbuf:usartx的接收/发送数据缓冲寄存器。 uxbaud:usartx的波特率控制寄存器。复制代码 在与pc机进行串口通信的时候是,通常需要借助usb转ttl芯片进行电压转换。 所以,在学习串口编程之前,先认识两种电平:ttl电平和rs232电平
ttl电平: 逻辑0----小于0.8v 逻辑1----大于2.4v。rs232电平: 逻辑0----5~15v 逻辑1---- -5~-15v。复制代码 串口通信过程中,速度的指标由波特率表示。
常见的波特率设置表如下:
计算波特率的方法: cc2530的波特率由baud_e和baud_m共同决定:
二、原理图数据手册分析 三、串口配置代码示例 3.1 编写串口初始化函数,实现串口字符串发送 (cpu频率在16mhz下,波特率的为9600)#include #include //定义led灯的端口#define led1 p1_2#define led2 p1_3//定义key按键的端口#define key1 p1_0 //定义按键为p1_0口控制#define key2 p1_1 //定义按键为p1_1口控制/*函数功能:led灯io口初始化硬件连接:led1-->p1_2 , led2-->p1_3*/void led_init(void){ p1dir |=0x3p1_1 */void key_init(void){ p1sel&=~(0x3<<0); //配置p1_0,p1_1处于通用gpio口模式 p1dir&=~(0x3<<0); //配置p1_0,p1_1为输入模式 p1inp|= 0x30;b--) for(a=2;a>0;a--);}/*函数功能:按键扫描返 回 值:按下的按键值*/unsigned char key_scan(void){ static unsigned char stat=1; if((key1==0||key2==0)&&stat) { stat=0; delay10ms(); if(key1==0)return 1; if(key2==0)return 2; } else { if(key1&&key2)stat=1; } return 0;}/*函数功能:串口0初始化*/void init_uart0(void){ percfg&=~(1<<0); //串口0的引脚映射到位置1,即p0_2和p0_3 p0sel|=0x3<<2; //将p0_2和p0_3端口设置成外设功能 u0baud = 59; //16mhz的系统时钟产生9600bps的波特率 u0gcr&=~(0x1f<<0);//清空波特率指数 u0gcr|=9<<0; //配置波特率的指数值 u0ucr |= 0x80; //禁止流控,8位数据,清除缓冲器 u0csr |= 0x3p1_2 , led2-->p1_3*/void led_init(void){ p1dir |=0x3p1_1 */void key_init(void){ p1sel&=~(0x3<<0); //配置p1_0,p1_1处于通用gpio口模式 p1dir&=~(0x3<<0); //配置p1_0,p1_1为输入模式 p1inp|= 0x30;b--) for(a=2;a>0;a--);}/*函数功能:按键扫描返 回 值:按下的按键值*/unsigned char key_scan(void){ static unsigned char stat=1; if((key1==0||key2==0)&&stat) { stat=0; delay10ms(); if(key1==0)return 1; if(key2==0)return 2; } else { if(key1&&key2)stat=1; } return 0;}/*函数功能:串口0初始化*/void init_uart0(void){ percfg&=~(1<<0); //串口0的引脚映射到位置1,即p0_2和p0_3 p0sel|=0x3<<2; //将p0_2和p0_3端口设置成外设功能 u0baud = 216; //16mhz的系统时钟产生115200bps的波特率 u0gcr&=~(0x1f<<0);//清空波特率指数 u0gcr|=12<<0; //16mhz的系统时钟产生115200bps的波特率 u0ucr |= 0x80; //禁止流控,8位数据,清除缓冲器 u0csr |= 0x3p1_2 , led2-->p1_3*/void led_init(void){ p1dir |=0x3p1_1 */void key_init(void){ p1sel&=~(0x3<<0); //配置p1_0,p1_1处于通用gpio口模式 p1dir&=~(0x3<<0); //配置p1_0,p1_1为输入模式 p1inp|= 0x30;b--) for(a=2;a>0;a--);}/*函数功能:按键扫描返 回 值:按下的按键值*/unsigned char key_scan(void){ static unsigned char stat=1; if((key1==0||key2==0)&&stat) { stat=0; delay10ms(); if(key1==0)return 1; if(key2==0)return 2; } else { if(key1&&key2)stat=1; } return 0;}/*函数功能:串口0初始化*/void init_uart0(void){ percfg&=~(1<<0); //串口0的引脚映射到位置1,即p0_2和p0_3 p0sel|=0x3<<2; //将p0_2和p0_3端口设置成外设功能 u0baud = 216; //16mhz的系统时钟产生115200bps的波特率 u0gcr&=~(0x1f<<0);//清空波特率指数 u0gcr|=12<<0; //16mhz的系统时钟产生115200bps的波特率 u0ucr |= 0x80; //禁止流控,8位数据,清除缓冲器 u0csr |= 0x3<
科学家发明一种新型传感器,可观察运行的行星
中消协总结四大问题:加强盲盒市场监管力度 严厉打击做市商行为
RPA公司正在致力于部署的新“杀手级应用”
奥迪向中国车企低头
网曝小米6与iPhone 7类似,双摄,骁龙835满血复活
CC2530(zigbee)入门开发: 串口收发配置
2018冷年空调市场“增长”成为主旋律,未来这种高位规模是否会是常态?
无线业资深人士王刚加入莱特波特 担任中国业务副总裁兼总经理
O-RAN到底是什么,它有什么特别之处
重磅!具备商用条件的 5G无人机全球首飞成功
隆利科技:公司为华为MatePad 2023款等提供背光产品
2020的手机还是4G为主吗
灯和保险丝测试仪电路图解说明
什么是解升斩波电路?看完全明白了
当“不确定性”成为新常态,云计算带来的远不止降本增效
干货|PCB电路板的组成、设计、工艺、流程及元器摆放和布线原则
物联网、M2M和蜂窝M2M之间的关系与前景
旗下颀邦12.7亿人民币并购飞信半导体
Mini LED PCB基板VS玻璃基板
配电房智能监控系统的架构及优势