命令通过UART传输

8个帖子/ 0新
最后一篇
SVL0822
离线
最后一次露面:5年8个月前
加入:2014-11-17 19:20
命令通过UART传输

你好对话框,

我正在通过您的DA14580基本套件学习UART,目前正在尝试通过UART定期发出一个字节,以使用示波器测量它是如何运作的。我写了以下代码:

setword16(clk_amba_reg,0x01);
setword16(set_freeeze_reg,frz_wdog);

setword16(clk_per_reg,uart1_enable);
setword16(UART_LCR_REG,0x80);//设置位以访问DLH和DLL寄存器
setword16(UART_IIR_DLH_REG,(UART_BAUDRATE_115K2&0xFF >> 8)); //设置高字节
setword16(UART_RBR_THR_DLL_REG,UART_BAUDRATE_115K2&0xFF); //设置低字节
setBits16(UART_MCR_REG,UART_SIRE,0);// mode 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,0x03);

setbits16(p10_mode_reg,pupd,0x03);
setBits16(p20_mode_reg,pid,0x02);

long n,j;
n = 0;
j = 0;

而(1)
{
而(n <200000){
n ++;
}
n = 0;
J ++;
if(j%2 == 0){
setword16(UART_RBR_THR_DLL_REG,0x92);
setBits16(UART_MCR_REG,UART_RTS,0x01);
}
别的{
setBits16(p1_reset_data_reg,p2_reset,0x01);
setword16(UART_RBR_THR_DLL_REG,0x0);
}
}

探测端口2_0显示了很高的是,因为功能但空闲UART保持高电平,但是,我找不到任何用于传输UART_RBR_THR_DLL_REG的内容的任何显式命令,一旦我用要发送的数据填写它。你能用这个指向正确的方向吗?

谢谢,
SVL0822

vesan.
离线
最后一次露面:5年4个月前
格鲁鲁 掌握
加入:2014-06-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.文件以查看您使用的功能。

还记得引脚混合periph_setup.c.配置正确的UART引脚。您需要在功能中进行gpio_revations.set_pad_functions.。您应该已经找到了初始定义。

PS:是否有一些需要直接操纵寄存器?最可能没有什么好事。它已经被认为是处理它的正确方法,所以我建议使用UART驱动程序,或者至少你可以拍摄它的示例。

SVL0822
离线
最后一次露面:5年8个月前
加入:2014-11-17 19:20
vesan,

vesan,

包括的更高级别代码非常令我初学者。我无法遵循不同文件中发生的事情,我想学习低级寄存器操作,以真正了解UART初始化和用法的过程。
在我使用的另一个微控制器(MSP430)中,写入播放TROR角色的寄存器立即通过配置为UART配置的引脚串联发字节。DA14580是否具有相似的功能?

谢谢,
SVL0822

SVL0822
离线
最后一次露面:5年8个月前
加入:2014-11-17 19:20
vesan,

vesan,

我看过包括的​​文件,并将#include“uart2.c”添加到我的Arch_main.c文件中。
这产生了一堆错误:

。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_HANDLER乘法定义(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_INIT_FUNC乘法常识(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_INIT乘法定义(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_FLOW_ON_FUNC乘以定义(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_FLOW_ON乘法定义(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_FLOW_OFF_FUNC乘法(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_FLOW_OFF乘法定义(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_FINISH_TRANSFERS_FUNC乘以(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_FINISH_TRANSFERS乘以定义(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_READ_FUNC乘以定义(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_READ乘法定义(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_WRITE_FUNC乘以定义(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_WRITE乘法定义(由UART2.O和ARCH_MAIN.O)。
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_HANDLER_FUNC乘以定义(由UART2.O和ARCH_MAIN.O)。

我现在应该从这个文件中包含一些东西来防止双重定义吗?

vesan.
离线
最后一次露面:5年4个月前
格鲁鲁 掌握
加入:2014-06-26 08:49
你好svl0822,

你好svl0822,

一般来说,将文件中的文件纳入代码并不是一个好主意。这确实很可能导致多种定义。尝试更换#include“uart2.c”#include“uart.h”

你想用UART做些什么?

SVL0822
离线
最后一次露面:5年8个月前
加入:2014-11-17 19: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,null);
UART2_FINISH_TRANSFERS();
}

我还改变了GPIO_CONFIGUREPIN中的引脚配置,以便为UART2保留P2_0和P2_1。

但是,我没有看到除恒定高信号之外的P2_0上的任何东西,这意味着它已被正确初始化为UART,并且在UART模式下空白。我相信我应该从0x92看到10010010。我需要做些什么才能在DA14580的PIN 2_0上看到这些级别?

谢谢,
SVL0822

SVL0822
离线
最后一次露面:5年8个月前
加入:2014-11-17 19:20
可以从对话中获取某人

对话中的某个人可以提供一些洞察力吗?当我加载Blinky代码并探测相应的端口时,我能够看到函数printf_string的信号,这是一个包装器,用于将寄存器UART_RBR_THR_DLL_REG设置为已发送字符的十六进制值。当我在由模板制作的项目中的p2_0上做同样的时候,我看到什么都不是恒定的高信号。

vesan.
离线
最后一次露面:5年4个月前
格鲁鲁 掌握
加入:2014-06-26 08:49
你好svl0822,

你好svl0822,

也许你可以使用功能app_console.c.。我想你应该把你的别针配置在内periph_setup.c.而不是手动用SetBits16

也许这也很有用?

对不起,我没有看过这么低的操纵uart水平