你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
xuezhimeng2010 发表于 2017-2-21 17:03 你这个初始化代码调用了么?看下spi1的寄存器
木子-387117 发表于 2017-2-21 17:05 调用啦 MOSI输出数据MISO都有对应的返回数据 而且示波器自己读是正确的
xuezhimeng2010 发表于 2017-2-21 17:15 那看下输入引脚上的配置,一步步看寄存器吧
watershade 发表于 2017-2-21 20:56 是这样的。我看你的SPI两个字节是连续发送。你是用这两个命令之后来实现可以从波形上明显看出中间有一段停 ...
zbber 发表于 2017-2-22 15:27 什么叫实际测试有数据但是采集不到?
木子-387117 发表于 2017-2-21 21:38 首先谢过水影先森的解答~~ 1.确实我访问的器件需要MOSI先给八位地址再给八位数据,然后MISO返回寄存器数 ...
调用啦 MOSI输出数据MISO都有对应的返回数据 而且示波器自己读是正确的
那看下输入引脚上的配置,一步步看寄存器吧
全速跑起来 keil5里面的工具看寄存器 COPL CPHA 都是0 因为我循环发送接收数据所以BSY TXE时而0时而1 但是RXNE时而0时而1的频率很慢 按理说应该有TXE变化速度一半啊
我觉得问题在于我用示波器检测到MISO返回数据了 而且是正确数据 但是receive函数读不到
首先谢过水影先森的解答~~
1.确实我访问的器件需要MOSI先给八位地址再给八位数据,然后MISO返回寄存器数据,
2.HAL_SPI_TransmitReceive我想到了直接发送两个字节了 把地址和数据一起发出去,但是接收的还是全0
奇怪的是我用示波器测出来是有数据的 而且是正确的 真是诡异
3.CPAL和CPOL设置都为0 检查过了
4.liming2就是简单的 uchar类型
就是示波器我自己测数据 用示波器观察 MISO有返回数据~~~但是receive函数接收存起来一直都是0
{
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 */
}
}
那你试着用中断的方式再读一下。要不就是你MISO管脚的配置有问题。你用官方的例程编译一下试试