同时使用UART和SPI

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
8个帖子/ 0个新
最后一篇
lewiso
离线
最后一次露面:3年6个月前
加入:2017-03-23 05:19
同时使用UART和SPI

嗨对话框,

我是新手的新手,一直在使用da14580-b dev套件。

我的目标是通过SPI读取外部传感器(MPU6500)的值,然后将这些数据值发送到计算机进行信号处理。

到目前为止,我已经能够设置与计算机的UART通信(即能够将字符串打印到tera术语)。

接下来,我尝试初始化外部传感器,然后通过SPI从传感器读取数据,然后在TERA项中打印这些值。

有可能做我想做的事吗?我能同时通过UART和外部传感器与计算机通信吗?

当我尝试这样做时,我从传感器读取的所有情况都是1的。

你能告诉我为什么我不能从传感器成功读取数据吗?任何帮助都是非常好的,谢谢!

以下是我在传感器上读取和写入寄存器的代码的一部分:

uint8_t r_bit = 0x80;
Unit8_t w_mask = 0x7f;

void writereg(Unit8_t地址,Unit8_t数据)
{
地址&= w_mask;

spi_cs_low();
spa_access(地址);
spa_access(数据);
spi_cs_high ();

}

uint8_t readReg (unit8_t地址)
{
地址| = r_bit;
unit32_t dataRead = 0;

spa_cs_low();
dataRead = spa_access(地址);
dataRead = spa_access (0 x00);
spi_cs_high ();

返回dataRead;
}

设备:
lewiso
离线
最后一次露面:3年6个月前
加入:2017-03-23 05:19
我的一个想法是利用

我认为我要使用逻辑分析仪来确认SPI引脚的值是正确的,但我不确定如何在Keil中使用此应用程序。

例如,我知道这可能听起来很傻,但我如何知道引脚的名称,所以我可以将它们添加到绘制?

提前致谢!

im_dialog.
离线
最后一次露面:3周13小时前
加入:2016-12-06 22:25
我建议使用

我建议使用示波器或逻辑分析仪来查看SPI信号,并检查它们的行为是否如预期的那样。

SPI接口使用的DA14580引脚通常在user_periph_setup.c文件中包含的set_pad_functions函数中定义。

lewiso
离线
最后一次露面:3年6个月前
加入:2017-03-23 05:19
嗨im_dialog,

嗨im_dialog,

我试过在Keil中使用逻辑分析器,但仍然不能让它工作。我的问题是,当我点击设置和尝试添加我的引脚,我得到错误的“未知信号”的一切,我尝试。

是否有任何进一步的设置,以便能够使用逻辑分析仪?

这是我的user_外围设置。h:
/ * *
**************************************************************************************
*
* @file user_periph_setup.h.
*
* @brief外设设置头文件。
*
*版权所有(C) 2015。雷竞技电竞平台对话半导体有限公司,未出版作品。这台电脑
*程序包含机密,专有信息,是商业机密
*天雷竞技电竞平台宇半导体有限公司禁止所有使用、披露和/或复制
*除非书面授权。版权所有。
*
*和贡献者。
*
**************************************************************************************
* /

的ifndef USER_PERIPH_SETUP_H
#define user_periph_setup_h.

/*
*包括文件
**************************************************************************************
* /

# include“rwip_config.h”
# include“global_io.h”
#include“arch.h”
#include“da1458x_periph_setup.h”
//#包括“i2c_eeprom.h”

/*
*定义
**************************************************************************************
* /

// *** <<<在上下文菜单中使用配置向导>>> *

// DK选择<0 =>如da1458x_periph_setup.h <1 => Basic <2 => Pro <3 =>专家
#定义HW_CONFIG (0)

#define hw_config_basic_dk((hw_config == 0 && sdk_config == 1)|| hw_config == 1)
#define hw_config_pro_dk((hw_config == 0 && sdk_config == 2)|| hw_config == 2)
#define HW_CONFIG_EXPERT_DK (HW_CONFIG==0 && SDK_CONFIG==3) || HW_CONFIG==3

// *** <<<配置部分>>> *

/ **************************************************************************************** /
/ * UART配置于05/07/2016 * /
/ **************************************************************************************** /

//选择UART设置
#define UART_BAUDRATE_115K2 // Baudrate in bits/s: {9K6, 14K4, 19K2, 28K8, 38K4, 57K6, 115K2}
#define uart2_datalength uart_charformat_8 // datalength中位数:{5,6,7,8}
#define uart2_parity uart_parity_none // parity:{uart_parity_none,uart_parity_even,uart_parity_odd}
#define uart2_stopbits uart_stopbits_1 //停止位:{uart_stopbits_1,uart_stopbits_2}
#define uart2_flowcontrol_disabled //流量控制:{UART_FLOWCONTROL_DISABLED, UART_FLOWCONTROL_ENABLED}
#定义UART_ENABLED

/ **************************************************************************************** /
/* i2c eeprom配置*/
/ **************************************************************************************** /

#define I2C_EEPROM_SIZE 0x20000 // EEPROM大小(字节
#define i2c_eeprom_page 256 // EEPROM的页面大小以字节为单位
#define I2C_SPEED_MODE I2C_FAST // 1:标准模式(100kbits /s), 2:快速模式(400kbits /s)
#define i2c_address_mode i2c_7bit_addr // 0:7位寻址,1:10位寻址
#define i2c_address_size i2c_2bytes_addr // 0:8位存储器地址,1:16位存储器地址,3:24位存储器地址

/ ** /
/ **************************************************************************************** /
/ * SPI闪光灯配置* /
/ **************************************************************************************** /

#define spi_flash_default_size 131072 // spi闪存大小以字节为单位
#定义SPI_FLASH_DEFAULT_PAGE 256
#define spi_sector_size 4096.

#定义SPI_EN_GPIO_PORT GPIO_PORT_0
#定义SPI_EN_GPIO_PIN GPIO_PIN_3

#定义SPI_CLK_GPIO_PORT GPIO_PORT_0
#定义SPI_CLK_GPIO_PIN GPIO_PIN_0

#define spi_do_gpio_port gpio_port_1.
#define spi_do_gpio_pin gpio_pin_1.

#定义SPI_DI_GPIO_PORT GPIO_PORT_1
#define spi_di_gpio_pin gpio_pin_3.

/ *启用wkupct。wkupct_quadec驱动程序要求。* /
#定义WKUP_ENABLED

/ **************************************************************************************** /
/* uart引脚配置*/
/ **************************************************************************************** /

#define uart1_tx_gpio_port gpio_port_0.
#define uart1_tx_gpio_pin gpio_pin_4.

#define uart1_rx_gpio_port gpio_port_0.
#定义UART1_RX_GPIO_PIN GPIO_PIN_5

#定义UART_ENABLED

/ **************************************************************************************** /
/ * LED配置* /
/ **************************************************************************************** /
#定义GPIO_ALERT_LED_PORT GPIO_PORT_1
#定义GPIO_ALERT_LED_PIN GPIO_PIN_0

/*
*功能声明
**************************************************************************************
* /

/ * *
**************************************************************************************
* @brief启用pad和外设时钟,假设外设电源域
*是下来。设置Uart和SPi时钟。
* @return void.
**************************************************************************************
* /
void periph_init(空白);

/ * *
**************************************************************************************
* @brief映射端口引脚。映射UART和SPI端口引脚和GPIO端口
* @return void.
**************************************************************************************
* /
空白set_pad_functions(无效);

/ * *
**************************************************************************************
* @brief每个应用程序在这里保留自己的GPIO。
* @return void.
**************************************************************************************
* /
空白GPIO_reservations(无效);

# endif / / USER_PERIPH_SETUP_H

lewiso
离线
最后一次露面:3年6个月前
加入:2017-03-23 05:19
嗨im_dialog,

嗨im_dialog,

今天,我将示波器放在SPI_CLK引脚(端口0引脚0)上,无法检测到时钟信号。在完成读/写后,我能够观察到读/写和低到高电平的CS引脚从高到低电平。但我无法检测到时钟信号。

我已经在SPI_CTRL_REG中设置了SPI时钟以打开并选择时钟分割因子。

我的问题是以下内容:是否有另一条指令将SPI时钟分配给I已选择的引脚(端口0引脚0),或者是否有用于DA14580上的SPI时钟的预定识别引脚?

提前致谢,
刘易斯

vlad.
离线
最后一次露面:4个月1周前
加入:2017-05-17十
嗨lewiso,

嗨lewiso,
SPI和UART使用相同的引脚吗?如果是,在da14580 sdk中有一个项目,..utilities\flash_programmer\。它通过UART发送/接收数据,并写入/读取SPI flash。在某些情况下,甚至通过相同的引脚,改变它们的功能。也许这个项目会给你一些提示。

lewiso
离线
最后一次露面:3年6个月前
加入:2017-03-23 05:19
嗨vlad,

嗨vlad,

我正在为UART和SPI使用不同的引脚。好的,我会看看他的项目吗?

我觉得我缺少一个用于将SPI_CLK引脚设置为时钟信号的指令,您是否能够指导我如何去这件事?

谢谢,
刘易斯

mt_dialog.
离线
最后一次露面:1个月2个星期前
职员
加入:2015-06-08 34
嗨lewiso,

嗨lewiso,

为了设置SPI时钟你也必须SPI时钟functionallity分配给指定的密码,例如为了设置指定的销作为SPI时钟针(主)你必须包括以下语句periph_init()函数GPIO_ConfigurePin (SPI_GPIO_PORT、SPI_CLK_PIN、输出、PID_SPI_CLK假);以及其他引脚功能(MISO, MOSI和CS)。在这之后,您必须启用spi模块,这是由驱动程序在使用正确的设置参数调用spi_init()函数时完成的。为了看到时钟时钟线,你将不得不执行一个spi的事务,您可以检查检查一下弗拉德好心的建议,我建议是检查在SDK中的peripheral_examples spi_flash项目,这是一个简单的演示如何使用spi接口spi flash。

谢谢mt_dialog.