完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
通信
常用的有限无线的通信方式 有限(RS-232、RS-485、CAN) 无线(蓝牙、433M、Zigbee、Wifi、GSM) 这里简单的总结串口通信 串口通信基础原理 1. 串口通信定义 串口是计算机上一种非常通用设备通信的协议。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 2. 串口通信原理 串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。 3. 串口通行的分类 单工:数据传输只支持数据在一个方向上传输; 半双工:允许数据在两个方向上传输。半就意味着单,只允许数据在一个方向上传输数据。不需要独立的接收端和发送端,两者可以合并在一个端口,总的来说就是单工的重复使用; 全双工:允许数据在两个方向上传输。全双工需要独立的接收端和发送端。是单工的双方向同时使用; (按照数据传送方向分类) 同步通信:带时钟同步信号传输(SPI,IIC通信接口)要建立发送方的时钟对接收方的时钟直接控制,使双方达到完全的同步。 异步通信:不带时钟同步信号(UART,单总线)不要求收发时钟严格一致,要求每个字符要附加2-3位起止位,各个字符之间还有间隔,因此传输效率不高。 (按照通信方式分类) 4. 串口通信协议 分为物理层和协议层(我一直不太懂,这里百度解释一下) 物理层(或称物理层,Physical Layer)是计算机网络OSI模型中最低的一层。物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层。 物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础。物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”。 OSI采纳了各种现成的协议,其中有RS-232、RS-449、X.21、V.35、ISDN、以及FDDI、IEEE802.3、IEEE802.4、和IEEE802.5的物理层协议。 (我理解为其实就是机械、电子功能部分的特性,确保原始数据在物理媒介的传输。其实就是硬件部分。) 协议层(这个在百度上也没有找到,不过根据以上我理解为其实协议层就是通讯逻辑,统一收发双方的数据打包、解包标准。) 5. 有线通信 (1)RS-232 逻辑1:-15v——-3v;逻辑0:+3v——+15v(低电平为-15v,高电平为15v峰值差别不大,不以0为低电平),采用150PF/M的通信电缆(电汽化境)最大通信距离为15m;全双工,实行点对点通信。 (2)RS-485 逻辑1:2v——6v;逻辑0:-2v——-6v最大通信距离约为1200m;半双工,使用32台驱动器或32台接收器。 (3)CAN(车轴上) 逻辑1:0v;逻辑0:2.5v;通信距离最远可达10KM(速率低于5klops)半双工,最多可达110个设备。 6. 串口硬件 嵌入式中的串口,指的是UART口,UART,COM指的是物理接口形式(硬件)而TTL、RS232是指的是电平标准(电信号)。 UART有4个引脚(VCC、GND、RX、TX)用的TTL电平,低电平为0,高电平为1(3.3v或以上)。PL2303、CP2102芯片是USB转TTL串口的芯片,用USB来扩展串口(TTL电平)。 7. 串口的波特率设置 (数据手册中写的非常清楚,虽然可以通过串口小助手设置固定的波特率,但波特率是串口通信的关键) 一、方法0的波特率 方法0时,移位时钟脉冲由56给出,即每个机械周期产生一个移位时钟,发送或接收一位数据。所以,波特率为振荡频率的十二分之一;计算公式为波特率=fosc/12。 二、方式2的波特率 方式2时与方式0时不相同,即输入时钟源的频率不同,方式2的波特率取决于PCON中的SMOD位的值,当SMOD位的值为0时,波特率fosc的六十四分之一;若SMOD为1时波特率为fosc的三十二分之一;计算公式为波特率=2smod次方/64fosc。 三、方式1和方式3的波特率。 方式1和方式3的移位时钟脉冲由定时器T1的溢出率决定,故波特率由定时器T1的溢出率与SMOD值同时决定,;计算公式为波特率=2smod/32T1溢出率。 小熊派串口通信 1.查看端口号 步骤 <连接小熊派开发板 <选择“我的电脑 <右击 <选择管理 <选择设备管理器 如图查看端口如图 便可从串口助手中检索到相应串口 2. 查看开发板上的串口如图 图中3为串行接口 3. 配置引脚 4.设置系统时钟 5. 配置串口参数 6. 串口代码编写 (1)keil uVision4 #include sfr AUXR = 0x8e; void main() { SCON = 0x40; TMOD = 0x20; TH1 = 0xfd ; TL1 = 0xfd ; TR1 = 1; SBUF = 0x0a; while(TI == 0); TI = 0; while(1); } (2)keil uVision5 #ifdef UART1 //HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin); //HAL_Delay(300); if(HAL_UART_Receive(&huart1,&Rdata,1,0)==HAL_O K) {HAL_UART_Transmit(&huart1,&Rdata,1,0); } #endif #ifdef UART1_IRQ HAL_GPIO_TogglePin(LED_GPIO_Port,LED_P in); printf("UART1_IRQ Test!rn"); HAL_Delay(2000); #endif #ifdef UART1_DMA HAL_GPIO_TogglePin(LED_GPIO_Port,LED_P in); printf("UART1_DMA Test!rn"); HAL_Delay(2000); #endif 7、代码编写说明 (1)串口模式实现有: 普通模式,在主函数中接收函数。 中断模式,产生的不影响主程序运行。 DMA模式,与主函数互不影响,独立运行。 (2)在函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)回调的办法处理中断程 序和DMA程序。 (3)在主程序运行请,要先触发中断或DMA,即运行 HAL_UART_Receive_IT(&huart1,&Rdata,1); 或HAL_UART_Receive_DMA(&huart1,&Rdata,1); 在HAL_UART_RxCpltCallback函数里面再次运行以上中断接收函数,即可实现连续触发中断。 (4)实现通过printf打印串口信息,则需要添加stdio.h头文件。 |
|
|
|
只有小组成员才能发言,加入小组>>
4273个成员聚集在这个小组
加入小组3275 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4216 浏览 1 评论
4221 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 16:40 , Processed in 0.440646 second(s), Total 43, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号