28335串口通信的三种方式

本文详细解释了SCI、UART与RS232的区别,介绍了9针RS232信号线的功能,探讨了28335串口通信的不同方式,并对比了同步与异步通信的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.sci,uart和rs232的区别
通常,大部分人把SCI、UART与RS232混为一谈,其实他们有本质上的差别:
SCI(Serial Communication Interface)意为“串行通信接口”,是相对于并行通信的,是串行通信技术的一种总称,最早由Motolora公司提出的。
UART(Universal Asynchronous Receiver & Transmitter)即通用异步收发器,是串行通信的一种协议,它规定串行通信的波特率、起始/停止位、数据位、校验位等格式,以及各种异步握手信号。
RS232是串行通信的一种物理接口电气标准,规定传输介质(电缆)、收发电平等。其实,RS232、RS422、RS485等都是SCI,其中两线制(仅RXD和TXD)的RS232与RS422和RS485的通信协议是相同的(只有波特率、起始/停止位、数据位、校验位等参数),仅传输介质和收发电平不同。
2.9针RS232信号线介绍。
  (1)数据装置准备好(DSR),有效状态(ON)表示数据通信设备处于可以使用状态。
  (2)数据终端准备好(DTR),有效状态(ON)表示数据终端设备处于可以使用状态。
  这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的一些控制信号决定。
  (3)请求发送(RTS),用来表示数据终端设备(DTE)请求数据通信设备(DCE)发送数据。
  (4)允许发送(CTS),用来表示数据通信设备(DCE)已经准备好了数据,可以向数据终端设备(DTE)发送数据,是对请求发送信号RTS的响应。
  请求发送(RTS)和允许发送(CTS)用于半双工的通信系统中,在全双工的系统中,不需要使用请求发送(RTS)和允许发送(CTS)信号,直接将其置为ON即可。
  (5)数据载波检出(DCD),用于表示数据通信设备(DCE)已接通通信链路,告知数据终端设备(DTE)准备接收数据。
  (6)振铃指示(RI),当数据通信设备收到交换台送来的振铃呼叫信号时,使该信号有效(ON),通知终端,已被呼叫。
  (7)发送数据(TXD),数据终端设备(DTE)通过该信号线将串行数据发送到数据通信设备(DCE)。
  (8)接收信号(RXD),数据终端设备(DTE)通过该信号线接收从数据通信设备(DCE)发来的串行数据。
  (9)地线(SG、PG),分别表示信号地和保护地信号线。


3.28335串口通信的三种方式
查询:
中断:
FIFO:其中FIFO接受的数据从SCIRXBUF中读取,并且每读取一次,接收FIFO的指针会向后移动一个单元。当读取操作完成后,指针指向的是存放最后一个字符的单元。为了能在下一次进入接受中断时能继续正确读取数据,最后还需要复位FIFO的指针,使其指向RX FIFO_0。
4.同步通信和异步通信
串口可以实现同步和异步通信,同步通信需要发送和接收端的时钟严格同步,一般情况下会使用相同的时钟,但是优点是一次传输的数据量大。
而异步通信则不需要严格同步的时钟,但是在收发数据的格式上有规定,一般以一个低电平开始作为开始位,后面为8位数据位(先数据地位,后高位),1位奇偶校验位,1位高电平作为停止位。空闲时间段信号线处于高电平状态。

dsp的使用之SCI串口通信


在使用STM32的28335芯片进行UART接收字符串的时候,可以使用以下步骤: 1. 配置UART端口,设置波特率、数据位、校验位、停止位等参数。 2. 开启UART接收中断,使得每当有数据到达时,芯片会触发中断并执行相应的中断服务程序。 3. 在中断服务程序中,使用一个缓存区来存储接收到的数据,直到接收到了一个完整的字符串。 4. 对于接收到的数据,可以使用串口调试助手等工具进行验证和调试。 以下是一个简单的示例代码,可以实现UART接收字符串的功能: ```c #include "stm32f28335.h" #define BUFFER_SIZE 100 char buffer[BUFFER_SIZE]; int buffer_index = 0; void USART2_IRQHandler(void) { if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { char data = USART_ReceiveData(USART2); if(data == '\r' || buffer_index >= BUFFER_SIZE - 1) { buffer[buffer_index] = '\0'; buffer_index = 0; // 处理接收到的字符串,例如打印到串口调试助手 } else { buffer[buffer_index++] = data; } } } int main(void) { // 配置GPIO、USART等 USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &USART_InitStructure); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_Cmd(USART2, ENABLE); while(1) { // 程序主循环 } } ``` 在上述代码中,我们使用了一个缓存区来存储接收到的数据,并在接收到回车符或者缓存区满时将缓存区中的数据视为一个完整的字符串。在实际项目中,需要根据具体的需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值