命令发送到通过UART

8个职位/ 0个新职位
最后一篇
svl0822
离线
最后一次露面:6年2个月前
加入:2014-11-17十九20
命令发送到通过UART

你好对话框,

我正在通过您的DA14580基本工具包学习UART,并且目前正在尝试定期通过UART发送一个字节,以用示波器测量,看看它如何工作。我写了以下代码:

SetWord16 (CLK_AMBA_REG 0 x01);
SetWord16(SET_FREEZE_REG,FRZ_WDOG);

SetWord16 (CLK_PER_REG UART1_ENABLE);
SetWord16(UART_LCR_REG,0x80的);//设置位访问DLH和DLL寄存器
SetWord16(UART_IER_DLH_REG,(UART_BAUDRATE_115K2&0xFF的>> 8)); //组高字节
SetWord16(UART_RBR_THR_DLL_REG,UART_BAUDRATE_115K2&为0xFF); //组低字节
SetBits16(UART_MCR_REG,UART_SIRE,0);//模式0为正常,1为IRDA
SetWord16(UART_IIR_FCR_REG,1);//启用FIFO
SetBits16(UART_IER_DLH_REG,ERBFI_dlh0,0);// IER访问,可用的数据禁止中断
SetBits16(UART_LCR_REG,UART_DLS,0×03);

SetBits16(P10_MODE_REG,PUPD,0×03);
SetBits16(P20_MODE_REG,PID,0×02);

N久,J;
n = 0;
j = 0;

而(1)
{
而(N <200000){
n ++;
}
n = 0;
J ++;
如果(j%2 == 0){
SetWord16 (UART_RBR_THR_DLL_REG 0 x92);
SetBits16(UART_MCR_REG,UART_RTS,0×01);
}
别的{
SetBits16 (P1_RESET_DATA_REG P2_RESET 0 x01);
SetWord16 (UART_RBR_THR_DLL_REG 0 x0);
}
}

探测端口2_0显示高,因为功能性,但空闲UART是高举这是有道理的 - 但是,我找不到任何明确的命令传送UART_RBR_THR_DLL_REG的内容,一旦我有要发送的数据填充它。你可以点我在这个正确的方向是什么?

谢谢,
svl0822

VesaN
离线
最后一次露面:5年11个月前
大师 掌握
加入:2014年6月26日08:49
你好svl0822,

你好svl0822,

你可以使用UART驱动程序来实现的抽象和UART更容易控制的更高的水平。这将节省您大量的时间,因为你不需要考虑以什么顺序,你应该控制寄存器。要做到这一点包括UART驱动程序(uart2.c)到您的项目。您还需要定义CFG_PRINTF_UART2在你的da14580_config.h文件。定义将在文件中包含uart初始化periph_setup.c


# ifdef CFG_PRINTF_UART2
SetBits16(CLK_PER_REG,UART2_ENABLE,1);
uart2_init(UART_BAUDRATE_115K2,3);
#万一

包括uart.h要在其中使用UART的头文件。检查uart.h文件,看看你有什么用功能。

也请记住针confiugration在periph_setup.c配置正确的UART引脚。你需要在函数中做GPIO_reservationsset_pad_functions.你应该已经发现最初的定义。

PS:是有一些特殊的需要直接操纵寄存器?最有可能没事找事跟随它。它已经被想好是什么,所以我建议使用UART驱动程序处理它的正确的方法,或者至少你可以从它采取的例子。

svl0822
离线
最后一次露面:6年2个月前
加入:2014-11-17十九20
VesaN,

VesaN,

这包括更高级别的代码非常混乱像我这样的初学者。我不能遵循什么是跨越不同的文件发生的事情,我想学习水平低寄存器操作,才能真正了解UART的初始化和使用的过程。
在另一个微控制器,我用(MSP430),写入播放THR的作用,立即在全球配置为UART引脚系列送出字节的寄存器。是否DA14580具有类似的功能?

谢谢,
svl0822

svl0822
离线
最后一次露面:6年2个月前
加入:2014-11-17十九20
VesaN,

VesaN,

我查看了包含的文件,并在arch_main.c文件中添加了#include "uart2.c"。
这产生了一堆错误:

\出\ full_emb_sysram.axf:错误:L6200E:符号UART2_Handler乘(由uart2.o和arch_main.o)所定义。
\出\ full_emb_sysram.axf:错误:L6200E:符号uart2_init_func乘(由uart2.o和arch_main.o)所定义。
\出\ full_emb_sysram.axf:错误:L6200E:符号uart2_init乘(由uart2.o和arch_main.o)所定义。
\出\ full_emb_sysram.axf:错误:L6200E:符号uart2_flow_on_func乘(由uart2.o和arch_main.o)所定义。
\出\ full_emb_sysram.axf:错误:L6200E:符号uart2_flow_on乘(由uart2.o和arch_main.o)所定义。
\出\ full_emb_sysram.axf:错误:L6200E:符号uart2_flow_off_func乘(由uart2.o和arch_main.o)所定义。
, \ \ full_emb_sysram。axf: Error: L6200E: Symbol uart2_flow_off multiply defined (by uart2. axf: Error: L6200E: Symbol uart2_flow_offo和arch_main.o)。
\出\ full_emb_sysram.axf:错误:L6200E:符号uart2_finish_transfers_func乘(由uart2.o和arch_main.o)所定义。
, \ \ full_emb_sysram。axf: Error: L6200E: Symbol uart2_finish_transfers multiply defined (by uart2. axf) . axf: Error: L6200E: Symbol uart2_finish_transferso和arch_main.o)。
\出\ full_emb_sysram.axf:错误:L6200E:符号uart2_read_func乘(由uart2.o和arch_main.o)所定义。
, \ \ full_emb_sysram。xf: Error: L6200E: Symbol uart2_reado和arch_main.o)。
, \ \ full_emb_sysram。axf: Error: L6200E: Symbol uart2_write_func multiply defined (by uart2. axf: Error: L6200E: Symbol uart2_write_func multiply defined (by uart2. axf)o和arch_main.o)。
, \ \ full_emb_sysram。xf: Error: L6200E: Symbol uart2_write define (by uart2. axf) . axf: Error: L6200E: Symbol uart2_writeo和arch_main.o)。
, \ \ full_emb_sysram。axf: Error: L6200E: Symbol UART2_Handler_func multiply defined (by uart2. axf)o和arch_main.o)。

我现在应该从这个文件中删除一些内容来防止双重定义吗?

VesaN
离线
最后一次露面:5年11个月前
大师 掌握
加入:2014年6月26日08:49
你好svl0822,

你好svl0822,

一般来说,是不是一个好主意,以.c文件包含在你的代码。这的确是最有可能导致多个定义。尝试更换# include“uart2.c”#包括“uart.h”

你要什么专门与UART呢?

svl0822
离线
最后一次露面:6年2个月前
加入:2014-11-17十九20
你好VesaN,

你好VesaN,

我需要UART与另一个uC通信,然后将数据传输到DA14580进行进一步的无线传输。

我已经写了一些代码来尝试使用P2_0通过UART 2进行传输。


periph_init ();
uart2_init(UART_BAUDRATE_115K2,3);
uart2_flow_off();
SetBits16(P20_MODE_REG,PID,为0x4);
Uint8_t sample[] = {0x92};
而(1){
uart2_write(样本1空);
uart2_finish_transfers();
}

我也改变了引脚配置在GPIO_ConfigurePin预留P2_0和P2_1为UART2。

不过,我没有看到关于P2_0什么比恒定的高信号,这意味着它被正确初始化UART和UART模式空转等。我相信,我应该从0x92看到10010010。什么我需要做的是能够看到的DA14580的销2_0这些水平?

谢谢,
svl0822

svl0822
离线
最后一次露面:6年2个月前
加入:2014-11-17十九20
来自Dialog的人

可以从对话的人提供一些见解?当我加载的Blinky代码和探测相应的端口我能看到功能printf_string,这是用于寄存器UART_RBR_THR_DLL_REG设置于所发送的字符的十六进制值的包装信号。当我做P2_0同样在从模板做了一个项目,我什么也看不见,但持续的高信号。

VesaN
离线
最后一次露面:5年11个月前
大师 掌握
加入:2014年6月26日08:49
你好svl0822,

你好svl0822,

也许你可以使用的功能app_console.c.我觉得你应该把你的引脚配置进去periph_setup.c而不是用SetBits16

这也许是有用的呢?

对不起,我没有看过成操纵UART的如此之低的水平