DSPTMSF28335 RS485通信例程
时间: 2023-09-12 10:03:16 浏览: 697
lab9-SCIC_RS485_PC_tidetfn_dsp28335rs485通信_dsp28335_DSP28335RS48
以下是基于DSPTMSF28335的RS485通信例程:
1. 首先,需要配置DSPTMSF28335的串口通信模块。在代码中,我们使用的是SCI模块,可以通过以下代码进行配置:
```c
// 串口配置
void sci_init()
{
// 关闭SCI模块
SciaRegs.SCICCR.all = 0x0000;
// 重置SCI模块
SciaRegs.SCICTL1.all = 0x0003;
// 设置波特率为9600
SciaRegs.SCIHBAUD.all = 0x0000;
SciaRegs.SCILBAUD.all = 0x0044;
// 使能SCI模块
SciaRegs.SCICTL1.all = 0x0023;
// 允许接收中断
SciaRegs.SCIFFRX.all = 0x0020;
// 允许发送中断
SciaRegs.SCIFFTX.all = 0x0020;
}
```
2. 配置RS485模块。在代码中,我们使用的是MAX485芯片控制RS485通信,可以通过以下代码进行配置:
```c
// RS485配置
void rs485_init()
{
// 设置GPIO
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO28 = 1;
GpioDataRegs.GPASET.bit.GPIO28 = 1;
EDIS;
// 配置SCI模块为RS485模式
SciaRegs.SCICTL2.bit.TXINTENA = 1;
SciaRegs.SCICTL2.bit.RXBKINTENA = 1;
SciaRegs.SCICTL2.bit.TXDIS = 1;
SciaRegs.SCICTL2.bit.RXBKINTMODE = 3;
SciaRegs.SCICTL2.bit.TXEMPTY = 1;
}
```
在配置中,我们使用GPIO28控制MAX485芯片的发送/接收控制引脚。
3. 实现数据发送和接收。在代码中,我们使用以下函数进行数据发送和接收:
```c
// 发送数据
void rs485_send_data(uint16_t *data, uint16_t len)
{
// 切换为发送模式
GpioDataRegs.GPACLEAR.bit.GPIO28 = 1;
DELAY_US(10);
// 发送数据
while (len--)
{
SciaRegs.SCITXBUF = *data++;
while (SciaRegs.SCICTL2.bit.TXEMPTY == 0)
;
}
// 切换为接收模式
DELAY_US(10);
GpioDataRegs.GPASET.bit.GPIO28 = 1;
}
// 接收数据
uint16_t rs485_recv_data(uint16_t *buf, uint16_t len)
{
uint16_t cnt = 0;
while (len--)
{
// 等待数据接收完成
while (SciaRegs.SCIRXST.bit.RXRDY == 0)
;
// 读取数据
*buf++ = SciaRegs.SCIRXBUF.all;
cnt++;
}
return cnt;
}
```
在发送数据时,我们需要将MAX485芯片的发送/接收控制引脚切换为发送模式,发送数据完成后再切换为接收模式。在接收数据时,我们只需要等待数据接收完成后读取数据即可。
以上就是基于DSPTMSF28335的RS485通信例程,希望能对您有所帮助。
阅读全文