|
我将原来的程序中的硬件spi修改成软件spi,导致一直在Tag_Measure_Dis中无法跳出。
希望能提供帮助
以下是软件spi的代码:
#define SPI_SCK_PIN GPIO_Pin_13 //NEED TO CHANGE
#define SPI_SCK_GPIO_PORT GPIOB //NEED TO CHANGE
#define SPI_MOSI_PIN GPIO_Pin_15 //NEED TO CHANGE
#define SPI_MOSI_GPIO_PORT GPIOB //NEED TO CHANGE
#define SPI_MISO_PIN GPIO_Pin_14 //NEED TO CHANGE
#define SPI_MISO_GPIO_PORT GPIOB //NEED TO CHANGE
#define SPI_NSS_PIN GPIO_Pin_3 //NEED TO CHANGE
#define SPI_NSS_GPIO_PORT GPIOC //NEED TO CHANGE
//#define SPI_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
//#define SPI_MISO_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
//#define SPI_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
//#define SPI_NSS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
#define MOSI_H GPIO_SetBits(SPI_MOSI_GPIO_PORT, SPI_MOSI_PIN)
#define MOSI_L GPIO_ResetBits(SPI_MOSI_GPIO_PORT, SPI_MOSI_PIN)
#define SCK_H GPIO_SetBits(SPI_SCK_GPIO_PORT, SPI_SCK_PIN)
#define SCK_L GPIO_ResetBits(SPI_SCK_GPIO_PORT, SPI_SCK_PIN)
#define MISO GPIO_ReadInputDataBit(SPI_MISO_GPIO_PORT, SPI_MISO_PIN)
#define NSS_H GPIO_SetBits(SPI_NSS_GPIO_PORT, SPI_NSS_PIN)
#define NSS_L GPIO_ResetBits(SPI_NSS_GPIO_PORT, SPI_NSS_PIN)
uint8_t t;
void delay(uint8_t t)
{
uint8_t i;
for(i=1;i<t;i++)
;
}
void SOFTSPI_Init(void)
{
/*##-2- Configure peripheral GPIO #######################*/
/* SPI SCK GPIO pin configuration */
GPIO_InitTypeDef GPIO_InitStruct;
/*##-1- Enable peripherals and GPIO Clocks #########################*/
/* Enable GPIO TX/RX clock */
RCC_APB2PeriphClockCmd(
RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO,
ENABLE);
//sck
GPIO_InitStruct.GPIO_Pin = SPI_SCK_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(SPI_SCK_GPIO_PORT, &GPIO_InitStruct);
//cs
GPIO_InitStruct.GPIO_Pin = SPI_NSS_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(SPI_NSS_GPIO_PORT, &GPIO_InitStruct);
NSS_H;
//mo
GPIO_InitStruct.GPIO_Pin = SPI_MOSI_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(SPI_MOSI_GPIO_PORT, &GPIO_InitStruct);
//mi
GPIO_InitStruct.GPIO_Pin = SPI_MISO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(SPI_MISO_GPIO_PORT, &GPIO_InitStruct);
}
/* CPOL = 0, CPHA = 0, MSB first */
uint8_t SOFT_SPI_RW_MODE0( uint8_t write_dat )
{
uint8_t i, read_dat;
for( i = 0; i < 8; i++ )
{
if( write_dat & 0x80 )
MOSI_H;
else
MOSI_L;
write_dat <<= 1;
read_dat <<= 1;
if( MISO )
read_dat++;
SCK_H;
delay(t);
SCK_L;
delay(t);
}
return read_dat;
}
|
|