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