第一部分-驱动

TOUCH硬件:

SPI2---NFC【注意不是MX默认的SPI2需要自己修改!!】

【CS-->B12 RST-->PC6   MOSI-->PB15 MISO-->PB14 SCK-->PB13】

CS-->B12  RST-->PC6

ST官方:

#define SPI1_CS_Pin GPIO_PIN_6
#define SPI1_CS_GPIO_Port GPIOB

#define IRQ_3911_Pin GPIO_PIN_0
#define IRQ_3911_GPIO_Port GPIOA
#define IRQ_3911_EXTI_IRQn EXTI0_IRQn

用到SPI1

CS脚基本没问题!复位脚基本没有问题!中断脚暂时不懂!!!!

TOUCH其实用到了!!

用PB1做了中断脚!!!!!!!!11
#define IRQ_3911_Pin                    GPIO_PIN_1
#define IRQ_3911_GPIO_Port            GPIOB

#define ST25R3911_INT_PIN           IRQ_3911_Pin        /*!< GPIO pin used for ST25R3911 External Interrupt    */
#define ST25R3911_INT_PORT          IRQ_3911_GPIO_Port  /*!< GPIO port used for ST25R3911 External Interrupt   */

此图错误

1修改本地TOUCH的spi如下

void MX_SPI1_Init(void)
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;//gjh
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;//gjh

2抽象一层en.ST25R3911_Discovery_FW\ST25R3911B_DISCO_FW_v1_2_8\common\STM32\Src

他是贴近STM32库函数 我叫做STM32SPI2.C .H

[其实也可以直接搞spi。c 为什么ST代码没有呢?MX的没有]

#ifndef __STM32SPI2_H
#define __STM32SPI2_H



#include "spi.h"
#include "main.h"


void spiInit(SPI_HandleTypeDef *hspi);


void spiSelect(GPIO_TypeDef *ssPort, uint16_t ssPin);


void spiDeselect(GPIO_TypeDef *ssPort, uint16_t ssPin);


HAL_StatusTypeDef spiTxRx(const uint8_t *txData, uint8_t *rxData, uint16_t length);
   
#endif 
#include "STM32SPI2.h"
#include <string.h>

#define SPI_TIMEOUT   1000
#define SPI_BUF_LEN   512


static uint8_t   txBuf[SPI_BUF_LEN];
static uint8_t   rxBuf[SPI_BUF_LEN];

SPI_HandleTypeDef *pSpi = 0;


void spiInit(SPI_HandleTypeDef *hspi)
{
    pSpi = hspi;

    /* enabling SPI block will put SCLK to output, guaranteeing proper state when spiSelect() gets called */
    __HAL_SPI_ENABLE(hspi);
}

void spiSelect(GPIO_TypeDef *ssPort, uint16_t ssPin)
{
  HAL_GPIO_WritePin(ssPort, ssPin, GPIO_PIN_RESET);
}     

void spiDeselect(GPIO_TypeDef *ssPort, uint16_t ssPin)
{
   HAL_GPIO_WritePin(ssPort, ssPin, GPIO_PIN_SET);
}

HAL_StatusTypeDef spiTxRx(const uint8_t *txData, uint8_t *rxData, uint16_t length)
{  
  if(pSpi == 0)
    return HAL_ERROR;
  
  if(length > SPI_BUF_LEN)
  {
    return HAL_ERROR;
  }
  
  /* Initialize Tx data*/
  if(txData != NULL)
  {
    memcpy(txBuf, txData, length );
  }
  else
  {
    memset(txBuf, 0x00, length );
  }

  return HAL_SPI_TransmitReceive(pSpi, txBuf, (rxData != NULL) ? rxData : rxBuf, length, SPI_TIMEOUT);
}

猜你喜欢

转载自blog.csdn.net/weixin_42381351/article/details/89915686