你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
中山无雪 发表于 2016-10-21 23:39 初始化SPI有问题
zbber 发表于 2016-10-21 17:58 HAL库里接收发送函数里面有存储数组,你只需要根据参数要求定义好接收位置即可 ...
stary666 发表于 2015-7-22 14:02 寄存器没配置好
creep 发表于 2015-7-22 14:20 HAL库函数HAL_SPI_Transmit里面就带有TXE标志位检测了,同样的HAL_SPI_Receive里面也有RXNE检测了,没有必 ...
gronau 发表于 2015-7-22 14:38 HAL库里接收发送函数里面有存储数组,你只需要根据参数要求定义好接收位置即可。 ...
lslp 发表于 2015-7-22 14:43 什么意思?我自己定义了一个数组,用来放接收的数据,HAL_SPI_receive函数的第三个参数不就是存放数据的 ...
lslp 发表于 2015-7-22 14:33 问题是我接收函数一直就收不到,我去掉while函数,依然就收不到数据
creep 发表于 2015-7-22 14:53 如果你想练手或者测试SPI的话建议还是直接连个外设比如外部FLASH或者SD卡模块,那样简单很多。 ...
gronau 发表于 2015-7-22 14:50 还有就是注意是8位还是16位通信啊。
lslp 发表于 2015-7-22 15:01 我想用spi控制nrf24l01实现无线通信。做过吗?给提点意见
lslp 发表于 2015-7-22 15:00 这个注意到了,,而且你说的数据大小,函数参数里也有定义。。我刚才说错了,第二个参数是数据地址,第三 ...
void Spi_init(SPI_TypeDef *p){
RCC->APB2ENR|=RCC_APB2ENR_IOPAEN|RCC_APB2ENR_SPI1EN;
GPIOA->CRL&=0x0000FFFF; //PA4 CS /5 CLK /6 MISO /7 MOSI SPI.
GPIOA->CRL|=0xB8B30000; //PA4 CS O /5 CLK AFO /6 MISO AFI /7 MOSI AFO.
GPIOA->ODR|=GPIO_ODR_ODR4|GPIO_ODR_ODR5|GPIO_ODR_ODR6|GPIO_ODR_ODR7; //CS H/MISO H.
p->CR1|=SPI_CR1_MSTR; //master configuration.
p->CR1|=SPI_CR1_DFF; //16-bit data frame format.
p->CR1|=SPI_CR1_CPHA; //CPOL=0 CPHA=1. mode 1.
p->CR1|=SPI_CR1_BR_1; //f_PCLK/8=9MHz.
p->CR1|=SPI_CR1_SPE|SPI_CR1_SSM|SPI_CR1_SSI;//enable spi.
}
这个是CUBE自动生成的初始化函数:
/* SPI1 init function */
static void MX_SPI1_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 7;
hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
}
这个接收位置的定义指的是什么?看示波器图片上,MISO是有波形的,且CLK的第一、二边沿都有1信号存在,所以即使CLK的相位不正确的话,也应该有1的存在,不会一直是0呀?
能具体一点么?
问题是我接收函数一直就收不到,我去掉while函数,依然就收不到数据
什么意思?我自己定义了一个数组,用来放接收的数据,HAL_SPI_receive函数的第三个参数不就是存放数据的地址么?
你说的这个函数我用过,应该还有一个参数是配置接收个数的。仔细看一下。
还有就是注意是8位还是16位通信啊。
如果你想练手或者测试SPI的话建议还是直接连个外设比如外部FLASH或者SD卡模块,那样简单很多。
嗯嗯。。
这个注意到了,,而且你说的数据大小,函数参数里也有定义。。我刚才说错了,第二个参数是数据地址,第三个参数是数据大小
我想用spi控制nrf24l01实现无线通信。做过吗?给提点意见
没做过,但是基本的SPI配置都是差不多的,根据nrf2410的SPI时序要求,把SPI的初始化,读写函数写好,剩下的就是配置nrf2410的部分了,这个应该有很多参考代码。
个人建议拿示波器边调试边测量信号比较快,也容易查找问题所在。