你好对话框,
I am learning UART through your DA14580 Basic kit and and am currently trying to periodically send out a byte via uart to measure with an oscilloscope to see how it works. I have written the following code:
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;
while(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的内容的任何显式命令,一旦我用要发送的数据填写它。你能用这个指向正确的方向吗?
Thanks,
svl0822

Hello svl0822,
您可以使用UART驱动程序实现更高级别的抽象和更容易控制UART。这将为您节省大量时间,因为您不需要以什么顺序思考,您应该控制寄存器。为此,包括UART驱动程序(UART2.c)到您的项目。您还需要定义
cfg_printf_uart2.在你的da14580_config.hfile. Definition will include uart initialization in fileperiph_setup.c.:#ifdef CFG_PRINTF_UART2
setBits16(CLK_PER_REG,UART2_ENABLE,1);
UART2_INIT(UART_BAUDRATE_115K2,3);
#万一
包括UART.H.header file where you want to use UART. Check theUART.H.文件以查看您使用的功能。
还记得引脚混合periph_setup.c.配置正确的UART别针。你需要做的functions
GPIO_reservationsandset_pad_functions。您应该已经找到了初始定义。PS:是否有一些需要直接操纵寄存器?最可能没有什么好事。它已经被认为是处理它的正确方法,所以我建议使用UART驱动程序,或者至少你可以拍摄它的示例。
vesan,
包括的更高级别代码非常令我初学者。我无法遵循不同文件中发生的事情,我想学习低级寄存器操作,以真正了解UART初始化和用法的过程。
在我使用的另一个微控制器(MSP430)中,写入播放TROR角色的寄存器立即通过配置为UART配置的引脚串联发字节。DA14580是否具有相似的功能?
Thanks,
svl0822
vesan,
I've looked at the files included and have added #include "uart2.c" into my arch_main.c file.
这产生了一堆错误:
。\ 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: Error: L6200E: Symbol uart2_flow_off multiply defined (by uart2.o and arch_main.o).
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_FINISH_TRANSFERS_FUNC乘以(由UART2.O和ARCH_MAIN.O)。
。\out\full_emb_sysram.axf: Error: L6200E: Symbol uart2_finish_transfers multiply defined (by uart2.o and arch_main.o).
。\ out \ full_emb_sysram.axf:错误:l6200e:符号UART2_READ_FUNC乘以定义(由UART2.O和ARCH_MAIN.O)。
。\out\full_emb_sysram.axf: Error: L6200E: Symbol uart2_read multiply defined (by uart2.o and arch_main.o).
。\out\full_emb_sysram.axf: Error: L6200E: Symbol uart2_write_func multiply defined (by uart2.o and arch_main.o).
。\out\full_emb_sysram.axf: Error: L6200E: Symbol uart2_write multiply defined (by uart2.o and arch_main.o).
。\out\full_emb_sysram.axf: Error: L6200E: Symbol UART2_Handler_func multiply defined (by uart2.o and arch_main.o).
Should i un-include something from this file now to prevent double definitions?
Hello svl0822,
一般来说,将文件中的文件纳入代码并不是一个好主意。这确实很可能导致多种定义。尝试更换
#include "uart2.c"with#include“uart.h”你想用UART做些什么?
你好Vesan,
I need the UART to communicate with another uC which will then transmit data to the DA14580 for further wireless transmission.
I have written some code to try to use P2_0 for transmission via 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(sample, 1, NULL);
UART2_FINISH_TRANSFERS();
}
我还改变了GPIO_CONFIGUREPIN中的引脚配置,以便为UART2保留P2_0和P2_1。
但是,我没有看到除恒定高信号之外的P2_0上的任何东西,这意味着它已被正确初始化为UART,并且在UART模式下空白。我相信我应该从0x92看到10010010。我需要做些什么才能在DA14580的PIN 2_0上看到这些级别?
Thanks,
svl0822
对话中的某个人可以提供一些洞察力吗?当我加载Blinky代码并探测相应的端口时,我能够看到函数printf_string的信号,这是一个包装器,用于将寄存器UART_RBR_THR_DLL_REG设置为已发送字符的十六进制值。当我在由模板制作的项目中的p2_0上做同样的时候,我看到什么都不是恒定的高信号。
Hello svl0822,
Maybe you can just use functionality of
app_console.c。I think you should configure your pins inperiph_setup.c.rather than do it manually withSetBits16。也许这也很有用?
对不起,我没有看过这么低的操纵uart水平