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);
}