木子-387117 发表于 2017-2-21 17:05:49

xuezhimeng2010 发表于 2017-2-21 17:03
你这个初始化代码调用了么?看下spi1的寄存器

调用啦MOSI输出数据MISO都有对应的返回数据 而且示波器自己读是正确的

xuezhimeng2010 发表于 2017-2-21 17:15:19

木子-387117 发表于 2017-2-21 17:05
调用啦MOSI输出数据MISO都有对应的返回数据 而且示波器自己读是正确的

那看下输入引脚上的配置,一步步看寄存器吧

木子-387117 发表于 2017-2-21 17:16:21

xuezhimeng2010 发表于 2017-2-21 17:03
你这个初始化代码调用了么?看下spi1的寄存器

全速跑起来keil5里面的工具看寄存器 COPL CPHA 都是0因为我循环发送接收数据所以BSY TXE时而0时而1 但是RXNE时而0时而1的频率很慢按理说应该有TXE变化速度一半啊

木子-387117 发表于 2017-2-21 17:19:24

xuezhimeng2010 发表于 2017-2-21 17:15
那看下输入引脚上的配置,一步步看寄存器吧

我觉得问题在于我用示波器检测到MISO返回数据了 而且是正确数据但是receive函数读不到

木子-387117 发表于 2017-2-21 21:38:17

watershade 发表于 2017-2-21 20:56
是这样的。我看你的SPI两个字节是连续发送。你是用这两个命令之后来实现可以从波形上明显看出中间有一段停 ...

首先谢过水影先森的解答~~
1.确实我访问的器件需要MOSI先给八位地址再给八位数据,然后MISO返回寄存器数据,
2.HAL_SPI_TransmitReceive我想到了直接发送两个字节了 把地址和数据一起发出去,但是接收的还是全0
   奇怪的是我用示波器测出来是有数据的 而且是正确的真是诡异
3.CPAL和CPOL设置都为0 检查过了
4.liming2就是简单的 uchar类型

木子-387117 发表于 2017-2-22 14:32:43

:):):)刷新一下

zbber 发表于 2017-2-22 15:27:28

什么叫实际测试有数据但是采集不到?

木子-387117 发表于 2017-2-22 15:57:55

zbber 发表于 2017-2-22 15:27
什么叫实际测试有数据但是采集不到?

就是示波器我自己测数据 用示波器观察MISO有返回数据~~~但是receive函数接收存起来一直都是0

木子-387117 发表于 2017-2-22 17:23:03

void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{

GPIO_InitTypeDef GPIO_InitStruct;
if(spiHandle->Instance==SPI1)
{
/* USER CODE BEGIN SPI1_MspInit 0 */

/* USER CODE END SPI1_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_SPI1_CLK_ENABLE();

    /**SPI1 GPIO Configuration   
    PA4   ------> SPI1_NSS
    PA5   ------> SPI1_SCK
    PA6   ------> SPI1_MISO
    PA7   ------> SPI1_MOSI
    */
    GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
    GPIO_InitStruct.Alternate = GPIO_AF0_SPI1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
               
                GPIO_InitStruct.Pin = GPIO_PIN_6;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT ;
                GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
                HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN SPI1_MspInit 1 */

/* USER CODE END SPI1_MspInit 1 */
}
}

watershade 发表于 2017-2-22 21:31:55

木子-387117 发表于 2017-2-21 21:38
首先谢过水影先森的解答~~
1.确实我访问的器件需要MOSI先给八位地址再给八位数据,然后MISO返回寄存器数 ...

那你试着用中断的方式再读一下。要不就是你MISO管脚的配置有问题。你用官方的例程编译一下试试
页: 1 2 [3] 4
查看完整版本: SPI全双工模式 实际测试有数据但是采集不到