木子-387117 发表于 2017-2-21 13:47:12

无力了 应该不是硬件问题啊试了两个板子 都是一样的

jackten 发表于 2017-2-21 14:23:48

我也来学习学习                  

木子-387117 发表于 2017-2-21 14:26:54

jackten 发表于 2017-2-21 14:23
我也来学习学习

我已经分析不出了

xmshao 发表于 2017-2-21 16:19:34

不知你用哪个芯片。
不过不管哪个芯片,STM32各系列库里都有SPI全双工的例程,先用例程跑下。

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

本帖最后由 木子-387117 于 2017-2-21 16:51 编辑

xmshao 发表于 2017-2-21 16:19
不知你用哪个芯片。
不过不管哪个芯片,STM32各系列库里都有SPI全双工的例程,先用例程跑下。 ...
STM32L031的没找到例程

xuezhimeng2010 发表于 2017-2-21 16:24:53

贴上代码来看看

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

本帖最后由 木子-387117 于 2017-2-21 16:47 编辑

xuezhimeng2010 发表于 2017-2-21 16:24
贴上代码来看看两种方式调用HAL库函数单独测试过
uint8_t liming=0x06;地址
uint8_t liming2=0x00;
uint8_t lmGET_data;返回数据存放
      while(1){
               
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 ,GPIO_PIN_RESET );
          HAL_SPI_Transmit(&hspi1,&liming2,sizeof(liming2),1000);      
          HAL_SPI_Receive(&hspi1,&lmGET_data,sizeof(lmGET_data),1000);
                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 ,GPIO_PIN_SET );
               
if(lmGET_data==0x6c)
printf("\r\n LoRaOn \r\n");      

   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 ,GPIO_PIN_RESET );
       HAL_SPI_Transmit(&hspi1,&liming,sizeof(liming),1000);
       HAL_SPI_TransmitReceive(&hspi1, &liming2, &lmGET_data, 1, 1000);
   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 ,GPIO_PIN_SET );
if(lmGET_data==0x6c)
printf("\r\n LoRaOn \r\n");      
}

xuezhimeng2010 发表于 2017-2-21 16:55:19

或许你的初始化配置有问题,贴出你的spi配置图or代码

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

本帖最后由 木子-387117 于 2017-2-21 17:03 编辑

xuezhimeng2010 发表于 2017-2-21 16:55
或许你的初始化配置有问题,贴出你的spi配置图or代码9楼有spi协议(今天传图太多 不让传了~~只能劳驾往上翻一翻了)
/* SPI1 init function */
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;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
    Error_Handler();
}

}

xuezhimeng2010 发表于 2017-2-21 17:03:26

你这个初始化代码调用了么?看下spi1的寄存器
页: 1 [2] 3 4
查看完整版本: SPI全双工模式 实际测试有数据但是采集不到