5个帖子/ 0新
最后一篇
index219
离线
最后一次露面:1年9个月前
加入:2016年5月23日07:00
DSPS工程中使用UART2发送数据时死机

问题描述:
1.在工程DA1458x_DSPS_v_5.150.2中,每隔1秒通过UART2打印数据0-21,结果死机,将打印数据改为0-20,可以循环打印。
请问是什么地方干扰了UART2的操作?还是需要特殊设置某些参数?
P.S active_1s()函数在官方演示外设工程uart2_async中是可以循环打印的。

空隙active_1s(无效)
{
uint8_t I;
对于(I = 0;我<21; i ++在){
write_txbuf(ⅰ);
}
而(1){
做 {
//进度的所有等待事件
schedule_while_ble_on();
}
而((app_asynch_proc()));//将控制权授予该应用程序,尝试去到断电
......
active_1s();
......
}

关键词:
设备:
Gongyu_Dialog
离线
最后一次露面:2天前1周
加入:2016年4月27日07:07
不知道你的write_txbuf函数的内容

不知道你的write_txbuf函数的内容,我这里用了这个函数来替代你的write_txbuf。
并且把

active_1s();//放在USE_WDOG这个位置之前
如果(USE_WDOG)
wdg_reload(WATCHDOG_DEFAULT_PERIOD);

我这里打印是好的。

空隙uart_send_byte(炭CH)
{
而((GetWord16(UART2_LSR_REG)0×20)== 0);检查//读取状态REG如果THR是空的
SetWord16(UART2_RBR_THR_DLL_REG,(0xFF的&CH));//写THR寄存器
}

index219
离线
最后一次露面:1年9个月前
加入:2016年5月23日07:00
write_txbuf函数是参考官方演示的外设历程来的

write_txbuf函数是参考官方演示的外设历程来的。我修改成你函数试试
空隙write_txbuf(uint8_t TXBUF)
{
//写字符UART2,然后等待同步完成。
tx_in_progress = 1;
uart2_write(TXBUF,1,uart_write_cb);
而(tx_in_progress)
;
}

index219
离线
最后一次露面:1年9个月前
加入:2016年5月23日07:00
回调函数将变量清零。

回调函数将变量清零。
uart_write_cb()
{
tx_in_progress = 0;
}

我按照你提供的发数据函数,是可以运行的,请教下,我是用的官方演示历程的方式,引起死机的原因是什么?

Gongyu_Dialog
离线
最后一次露面:2天前1周
加入:2016年4月27日07:07
因为原先的发送函数会调用到uart2_thr_empty

因为原先的发送函数会调用到uart2_thr_empty_isr。在里面会调用uart2_txfifo_full_getf来检查FIFO是否满。如果满了,直接就不放进FIFO了。
也就调用不到回调函数将标记清0。所以如果FIFO里数据移走的速度小于你放数的速度,就会一直死循环了。