嵌入式开发者社区
标题:
串口输出问题
[打印本页]
作者:
chendelta
时间:
2018-12-17 16:25
标题:
串口输出问题
本帖最后由 chendelta 于 2018-12-17 16:26 编辑
28377D 开发板,测试串口输出。main中反复输出 F0CA,通过RS-232转USB输入到PC。接收到的数据部分正确,部分错误。波特率从 1200 到 115200都是如此,用matlab和sscom接收都一样。请问可能的原因是什么?谢谢!
代码如下:
+++++++++
#include "F28x_Project.h"
#include "F2837xD_Ipc_drivers.h"
#include "SciStdio.h"
void SCIInit(void);
#define _STANDALONE
#define _FLASH
#ifdef _FLASH
// 这些定义在 .cmd 文件中
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadSize;
extern Uint16 RamfuncsRunStart;
#endif
void main(void)
{
Uint16 data_out = 0xF0CA, TX_LO, TX_HI;
// 把分配到 ramfuncs 段中的实时性要求高的关键代码从Flash中拷贝到RAM里执行
// 具体请查看 .cmd 文件
#ifdef _FLASH
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
#endif
// 系统初始化,配置PLL,关闭看门狗,使能外设时钟
InitSysCtrl();
#ifdef _STANDALONE
#ifdef _FLASH
// 发送 boot 命令,允许 CPU2 开始执行应用程序
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);
#else
// 发送 boot 命令,允许 CPU2 开始执行应用程序
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_RAM);
#endif
#endif
// 片上 Flash 初始化
#ifdef _FLASH
InitFlash();
#endif
// 初始化 GPIO
InitGpio();
EALLOW;
GpioCtrlRegs.GPDMUX2.bit.GPIO115 = 0; // 选择引脚功能为GPIO功能
GpioCtrlRegs.GPDDIR.bit.GPIO115 = 1; // 方向为输出
EDIS;
GpioDataRegs.GPDDAT.bit.GPIO115 = 1; // LED
// 关中断
DINT;
// 初始化Pie控制寄存器
InitPieCtrl();
// 不使能中断,清中断标志
IER = 0x0000;
IFR = 0x0000;
// 初始化中断向量表
InitPieVectTable();
// 全局中断和实时调试中断
// EINT;
ERTM;
// 初始化串口
SCIInit();
while(1)
{
TX_LO = data_out & 0x00FF;
TX_HI = data_out >> 8;
while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
SciaRegs.SCITXBUF.all = TX_LO;
while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
SciaRegs.SCITXBUF.all = TX_HI;
DELAY_US(100000);
GpioDataRegs.GPDDAT.bit.GPIO115 = 0; // 关闭LED
DELAY_US(100000);
GpioDataRegs.GPDDAT.bit.GPIO115 = 1; // 点亮LED
}
}
void SCIInit(void)
{
// GPIO
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;
EDIS;
//FIFO
// TX
SciaRegs.SCIFFTX.all=0xE000;
// RX
SciaRegs.SCIFFRX.all=0x2000;
// FIFO TX delay
SciaRegs.SCIFFCT.all=0x0;
// Stop bit, Parity
SciaRegs.SCICCR.all =0x0007;
// disable TX, RX
SciaRegs.SCICTL1.all =0x0003;
// interrupt
SciaRegs.SCICTL2.all =0x0000;
// baud rate
SciaRegs.SCIHBAUD.all =0x0000;
SciaRegs.SCILBAUD.all =0x0035;
// enable TX, RX
SciaRegs.SCICTL1.all =0x0023;
}
作者:
tronlong-gxd
时间:
2018-12-17 17:12
提示:
作者被禁止或删除 内容自动屏蔽
作者:
chendelta
时间:
2018-12-25 15:03
本帖最后由 chendelta 于 2018-12-25 15:15 编辑
tronlong-gxd 发表于 2018-12-17 17:12
您好:
建议您从以下几点去排查问题。
1,间隔中断,Rx的的输入被保持为0状态的时间超过了一个帧传输 ...
关掉了Rx和Tx中断,禁用Rx,还是不行。示波器上看输出波形也是时有时无。
有一个可重复现象:用示波器探针点到 底板上 UART-RS232转换芯片SP3232EE 的 T1in 脚,再移开,会连续收到一批数据,基本上是对的,但也不全对;然后又断断续续。难道是硬件问题?
作者:
tronlong-gxd
时间:
2018-12-25 15:23
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 嵌入式开发者社区 (https://51dsp.net/)
Powered by Discuz! X3.4