同时使用UART和SPI

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
8个帖子/ 0新
最后发表
lewiso.
离线
最后看到:3年8个月前
加入:2017-03-23 05:19
同时使用UART和SPI

嗨,对话框中,

我是BLE的新手,一直在使用DA14580-B开发套件。

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

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

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

是否有可能想要我想要做?正如我可以通过UART和外部传感器同时通过SPI与计算机通信?

当我尝试这么做时,我从传感器读取的都是1。

您是否可以建议我无法成功从传感器读取的任何原因?任何帮助都会非常感谢!

下面是读取和写入传感器寄存器的部分代码:

uint8_t R_BIT = 0x80;
unit8_t W_MASK = 0x7F;

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(0x00);
spi_cs_high();

返回dataread;

设备:
lewiso.
离线
最后看到:3年8个月前
加入:2017-03-23 05:19
一个想到我要使用

我的一个想法是使用逻辑分析器来确认SPI引脚的值是正确的,但是我不确定如何在Keil中使用这个应用程序。

例如,我知道这可能听起来很傻,但我怎么知道大头针的名字,所以我可以添加他们的绘图?

提前谢谢!

IM_Dialog
离线
最后看到:2个月2周前
加入:2016-12-06 22:25
我建议使用一个

我建议使用示波器或逻辑分析仪查看SPI信号并检查它们的行为正常。

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

lewiso.
离线
最后看到:3年8个月前
加入:2017-03-23 05:19
嗨IM_Dialog,

嗨IM_Dialog,

我尝试在keil中使用逻辑分析仪,但仍然无法使其工作。我的问题是点击设置并尝试添加我的引脚时,我会为我尝试的一切获得错误“未知信号”。

是否有任何进一步的设置,我必须做,以便能够使用逻辑分析器?

这是我的user_periph_setup.h:
/ **
**************************************************************************************

* @file user_periph_setup.h

* @brief设置外设头文件。

*版权所有(c)2015.对话半导体有限公司yabo国际娱乐未发表的工作。这台电脑
*计划包括机密,专有信息,是一个商业秘密
*对yabo国际娱乐话半导体有限公司禁止所有使用,披露和/或复制
*除非得到书面授权。保留所有权利。

*和贡献者。

**************************************************************************************
* /

#ifndef user_periph_setup_h.
#定义USER_PERIPH_SETUP_H

/ *
*包含文件
**************************************************************************************
* /

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

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

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

如da1458x_peripheral _setup.h <1=> Basic <2=> Pro <3=> Expert .h
#define hw_config(0)

#define HW_CONFIG_BASIC_DK (HW_CONFIG==0 && SDK_CONFIG==1) || HW_CONFIG==1
#define hw_config_dk (HW_CONFIG==0 && SDK_CONFIG==2) || HW_CONFIG==2
#define hw_config_expert_dk((hw_config == 0 && sdk_config == 3)|| hw_config == 3)

//*** << configuration section >>> * end of configuration section >

/****************************************************************************************/
/* UART configuration modified on 05/07/2016 */
/****************************************************************************************/

//选择UART设置
#define uart2_baudrate uart_baudrate_115k2 // baudrate in bits / s:{9k6,14k4,19k2,28k8,38k4,57k6,115k2}
#define UART2_DATALENGTH UART_CHARFORMAT_8 //数据长度:{5,6,7,8}
#define UART2_PARITY UART_PARITY_NONE //奇偶校验:{UART_PARITY_NONE, UART_PARITY_EVEN, UART_PARITY_ODD}
#define UART2_STOPBITS UART_STOPBITS_1 //停止位:{UART_STOPBITS_1, UART_STOPBITS_2}
#define uart2_flowcontrol uart_flowcontrol_disabled // flow control:{uart_flowcontrol_disabled,uart_flowcontrol_enabled}
#define uart_enabled.

/****************************************************************************************/
/ * I2C EEPROM配置* /
/****************************************************************************************/

#define i2c_eeprom_size 0x20000 // EEPROM大小以字节为单位
#define I2C_EEPROM_PAGE 256 // EEPROM的页大小(以字节为单位)
#define i2c_speed_mode i2c_fast // 1:标准模式(100 kbits / s),2:快速模式(400 kbits / 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 FLASH配置*/
/****************************************************************************************/

#define SPI_FLASH_DEFAULT_SIZE 131072 // SPI Flash内存大小,单位是字节
#define spi_flash_default_page 256.
#定义SPI_SECTOR_SIZE 4096

#define spi_en_gpio_port gpio_port_0.
#define spi_en_gpio_pin gpio_pin_3.

#define spi_clk_gpio_port gpio_port_0.
#define spi_clk_gpio_pin gpio_pin_0.

#定义SPI_DO_GPIO_PORT GPIO_PORT_1
#定义SPI_DO_GPIO_PIN GPIO_PIN_1

#define spi_di_gpio_port gpio_port_1.
#定义SPI_DI_GPIO_PIN GPIO_PIN_3

/ *启用WKUPCT。wkupct_quadec驱动所需。* /
#define wkup_enabled.

/****************************************************************************************/
/ * UART引脚配置* /
/****************************************************************************************/

#定义UART1_TX_GPIO_PORT GPIO_PORT_0
#定义UART1_TX_GPIO_PIN GPIO_PIN_4

#定义UART1_RX_GPIO_PORT GPIO_PORT_0
#define uart1_rx_gpio_pin gpio_pin_5.

#define uart_enabled.

/****************************************************************************************/
/* LED配置*/
/****************************************************************************************/
#define gpio_alert_led_port gpio_port_1.
#define gpio_alert_led_pin gpio_pin_0.

/ *
*函数声明
**************************************************************************************
* /

/ **
**************************************************************************************
* @brief启用Pad和外围时钟假设外围设备的电源域
*下降了。设置UART和SPI时钟。
* @return无效
**************************************************************************************
* /
空白periph_init(无效);

/ **
**************************************************************************************
* @brief Map端口引脚。Uart、SPI端口引脚和GPIO端口映射
* @return无效
**************************************************************************************
* /
void set_pad_functions(void);

/ **
**************************************************************************************
每个应用程序在这里保留自己的gpio。
* @return无效
**************************************************************************************
* /
void gpio_reservations(无效);

#endif // user_periph_setup_h.

lewiso.
离线
最后看到:3年8个月前
加入:2017-03-23 05:19
嗨IM_Dialog,

嗨IM_Dialog,

今天我把一个示波器放在SPI_CLK引脚(端口0引脚0),不能检测时钟信号。我能够观察到CS引脚在开始读/写时由高到低,在完成读/写时由低到高。但我没有探测到时钟信号。

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

我的问题是以下:是否有另一条指令分配SPI时钟到我所选择的引脚(端口0引脚0)或有一个预先定义的引脚上的SPI时钟DA14580?

提前谢谢,
刘易斯

弗拉德
离线
最后看到:6个月5天前
加入:2017-05-17 10:22
嗨lewiso,

嗨lewiso,
您是否使用相同的销钉和UART?如果是这样,在DA14580 SDK中有一个项目,...... \ flash_programmer \。它通过UART发送/接收数据,并写入/读取SPI Flash。在某些情况下甚至通过相同的引脚,改变其功能。也许这个项目会给你一个线索。

lewiso.
离线
最后看到:3年8个月前
加入:2017-03-23 05:19
你好弗拉德,

你好弗拉德,

我使用不同的引脚为UART和SPI。好的,我会看一下他的项目。

我觉得我缺少一个设置SPI_CLK引脚作为时钟信号的指令,你能告诉我如何去做吗?

谢谢,
刘易斯

MT_dialog
离线
最后看到:3个月1周前
工作人员
加入:2015-06-08 34
嗨lewiso,

嗨lewiso,

为了设置SPI时钟,您还必须将SPI时钟功能分配给指定的引脚,例如,要将指定的引脚设置为SPI时钟引脚(用于主设备),您将必须包含以下语句periph_init()函数gpio_configurepin(spi_gpio_port,spi_clk_pin,输出,pid_spi_clk,false);以及其他PIN功能(MISO,MOSI和CS)。执行此操作后,您必须启用SPI模块,这是通过调用正确设置参数调用SPI_Init()函数的驱动程序完成的。为了看到CLK线上的时钟,您必须执行SPI交易,您可以检查任一检查VLAD是否建议的内容,或者我建议的内容是检查SDK中的peripheral_examples中的spi_flash项目,这只是有关如何使用SPI闪存的SPI接口的简单演示。

由于MT_dialog