main.c
int main(void)
{
int32_t addr0; //spi读取的数据
int32_t data = 0xffffffff; //spi写入数据
for( ;; )
{
Reg_Write_0(uint32_t data)
addr = Reg_Read();
printf("spi1 is %d , %x",addr,addr);
vTaskDelay(1000);
}
}
查询芯片的数据手册,查看spi0的引脚
(1)本次使用的是SPI0读取某个芯片的地址,spi.c
#include "bsp_spi.h"
void SPI0_Init(void) //SPI0
{
spi_parameter_struct spi_init_struct;
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOE);
rcu_periph_clock_enable(RCU_AF);
rcu_periph_clock_enable(RCU_SPI0);
/* SPI0_SCK(PA5), SPI0_MISO(PA6) and SPI0_MOSI(PA7) GPIO pin configuration */
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_7);
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
/* SPI0_CS(PA4) GPIO pin configuration */
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
/* chip select invalid*/
SPI0_CS_HIGH();
/* SPI0 parameter config */
spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
spi_init_struct.device_mode = SPI_MASTER;
spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT;
spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_2EDGE;
spi_init_struct.nss = SPI_NSS_SOFT;
spi_init_struct.prescale = SPI_PSC_64;
spi_init_struct.endian = SPI_ENDIAN_MSB;
spi_init(SPI0, &spi_init_struct);
/* enable SPI0 */
spi_enable(SPI0);
}
uint32_t Reg_Read_0(uint8_t addr)
{
uint8_t a,b,c;
uint32_t reg_data;
SPI0_CS_LOW();
spi0_flash_send_byte(addr);
a = spi0_flash_read_byte();
b = spi0_flash_read_byte();
c = spi0_flash_read_byte();
reg_data = (a << 16) | (b << 8) | c;
SPI0_CS_HIGH();
return reg_data;
}
void Reg_Write_0(uint32_t data)
{
SPI0_CS_LOW();
spi0_flash_send_byte((uint8_t)((data >> 24) & 0xFF));
spi0_flash_send_byte((uint8_t)((data >> 16) & 0xFF));
spi0_flash_send_byte((uint8_t)((data >> 8) & 0xFF));
spi0_flash_send_byte((uint8_t)(data & 0xFF));
SPI0_CS_HIGH();
}
uint8_t spi0_flash_send_byte(uint8_t byte)
{
/* loop while data register in not emplty */
while (RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_TBE));
/* send byte through the SPI0 peripheral */
spi_i2s_data_transmit(SPI0,byte);
/* wait to receive a byte */
while(RESET == spi_i2s_flag_get(SPI0,SPI_FLAG_RBNE));
/* return the byte read from the SPI bus */
return(spi_i2s_data_receive(SPI0));
}
uint8_t spi0_flash_read_byte(void)
{
return(spi0_flash_send_byte(0xA5));
}
(3)spi.h
#ifndef __BSP_SPI_H_
#define __BSP_SPI_H_
#include "bsp.h"
#define SPI0_CS_LOW() gpio_bit_reset(GPIOA, GPIO_PIN_4)
#define SPI0_CS_HIGH() gpio_bit_set(GPIOA, GPIO_PIN_4)
uint32_t Reg_Read_0(uint8_t addr);
void Reg_Write_0(uint32_t data);
uint8_t spi0_flash_send_byte(uint8_t byte);
uint8_t spi0_flash_read_byte(void);