请帮我完整的编程一个基于f28335中sci模块中的查询方式进行通信,实现上位机发送数据,单片机接收数据并返回接受到的数据给上位机
时间: 2024-02-05 11:13:36 浏览: 37
好的,以下是一个基于f28335中sci模块的通信示例代码:
上位机发送数据:
```python
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600) # 串口号和波特率需要根据实际情况进行修改
data = b'hello' # 发送的数据
ser.write(data) # 发送数据
```
单片机接收数据并返回接受到的数据给上位机:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define SCI_RX_BUFFER_SIZE 16
Uint16 SCI_rxBuffer[SCI_RX_BUFFER_SIZE];
Uint16 SCI_rxHead = 0;
Uint16 SCI_rxTail = 0;
void SCI_init(void)
{
EALLOW;
// Step 1. 初始化SCI引脚
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;
// Step 2. 使能SCI时钟
SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;
// Step 3. 复位SCI
SciaRegs.SCICTL1.bit.SWRESET = 1;
SciaRegs.SCICTL1.bit.SWRESET = 0;
// Step 4. 配置SCI波特率
SciaRegs.SCICCR.bit.SCICHAR = 7; // 数据位为8
SciaRegs.SCICCR.bit.STOPBITS = 0; // 停止位为1
SciaRegs.SCICCR.bit.PARITYENA = 0; // 不启用奇偶校验
SciaRegs.SCICCR.bit.LOOPBKENA = 0; // 不启用环回测试
SciaRegs.SCIHBAUD = 0; // 波特率为9600
SciaRegs.SCILBAUD = 104;
// Step 5. 配置SCI控制寄存器
SciaRegs.SCICTL1.bit.TXENA = 1; // 使能发送
SciaRegs.SCICTL1.bit.RXENA = 1; // 使能接收
SciaRegs.SCICTL1.bit.SLEEP = 0; // 关闭睡眠模式
SciaRegs.SCICTL1.bit.TXWAKE = 0; // 关闭发送唤醒模式
SciaRegs.SCICTL1.bit.RXERRINTENA = 0; // 关闭接收错误中断
SciaRegs.SCICTL2.bit.TXINTENA = 0; // 关闭发送中断
SciaRegs.SCICTL2.bit.RXBKINTENA = 1; // 使能接收中断
// Step 6. 配置SCI中断
PieCtrlRegs.PIEIER9.bit.INTx1 = 1; // 使能SCI中断
IER |= M_INT9; // 使能中断向量表9的中断
EDIS;
}
__interrupt void SCI_isr(void)
{
Uint16 data;
if (SciaRegs.SCIRXST.bit.RXERROR == 1)
{
// 接收错误
data = SciaRegs.SCIRXBUF.bit.RXDT;
}
else
{
// 接收正常
data = SciaRegs.SCIRXBUF.bit.RXDT;
SCI_rxBuffer[SCI_rxHead] = data;
SCI_rxHead = (SCI_rxHead + 1) % SCI_RX_BUFFER_SIZE;
}
PieCtrlRegs.PIEACK.all |= M_INT9;
}
Uint16 SCI_read(void)
{
Uint16 data;
while (SCI_rxHead == SCI_rxTail);
data = SCI_rxBuffer[SCI_rxTail];
SCI_rxTail = (SCI_rxTail + 1) % SCI_RX_BUFFER_SIZE;
return data;
}
void SCI_write(Uint16 data)
{
while (SciaRegs.SCICTL2.bit.TXRDY != 1);
SciaRegs.SCITXBUF = data;
}
void main(void)
{
Uint16 data;
InitSysCtrl();
SCI_init();
EINT; // 使能总中断
while (1)
{
data = SCI_read(); // 接收数据
SCI_write(data); // 发送数据
}
}
```
请注意,以上代码仅供参考,实际应用中需要根据具体情况进行修改和优化。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)