資源簡介
SPI.rar

代碼片段和文件信息
#include?“spi.h“
#include?“stm8l15x_spi.h“
#include?“l(fā)ed.h“
/*
note:
????1??dma接收時數(shù)據(jù)會左移一位
????2??正常接收時會出現(xiàn)丟包
*/
//硬件SPI驅(qū)動flash
uint8_t?debug_status?=?0;
uint32_t?flash_id?=?0;
uint8_t?spi_tx_buf[DMA_BUF_TX_SIZE]?=?{0};
uint8_t?spi_rx_buf[DMA_BUF_RX_SIZE]?=?{0};
uint8_t?spi_busy_status?=?0;
void?spi_tx_dma_config(void);
//初始化
void?spi_init(void)
{
????CLK_PeripheralClockConfig(CLK_Peripheral_SPI1ENABLE);
????SYSCFG_REMAPPinConfig(REMAP_Pin_SPI1FullENABLE);//開啟PA2-?PA3-?PC6-?PC5的重映射
????
????//MISO
????GPIO_Init(GPIOASPI_MISOGPIO_Mode_In_PU_No_IT);
????GPIO_ExternalPullUpConfig(GPIOASPI_MISOENABLE);
????
????//MOSI
????GPIO_Init(GPIOASPI_MOSIGPIO_Mode_Out_PP_High_Fast);
????GPIO_ExternalPullUpConfig(GPIOASPI_MOSIENABLE);
????
????//CLK
????GPIO_Init(GPIOCSPI_CLKGPIO_Mode_Out_PP_High_Fast);
????
????//NSS
????GPIO_Init(GPIOB?SPI_NSS?GPIO_Mode_Out_PP_High_Fast);
????GPIO_SetBits(GPIOBSPI_NSS);
????
????//SPI
????SPI_DeInit(SPI1);
????SPI_Init(SPI1?SPI_FirstBit_MSB?SPI_BaudRatePrescaler_2?SPI_Mode_Master?
?????????????SPI_CPOL_High?SPI_CPHA_2Edge?SPI_Direction_2Lines_FullDuplex?SPI_NSS_Soft?0x07);???
????
//????SPI_ITConfig(SPI1SPI_IT_ERRENABLE);
//????ITC_SetSoftwarePriority(SPI1_IRQn??ITC_PriorityLevel_1);
????
????SPI_Cmd(SPI1?ENABLE);
????spi_tx_dma_config();??
????
}
void?spi_set_cs_high(void)
{
????GPIO_SetBits(GPIOBSPI_NSS);
}
void?spi_set_cs_low(void)
{
????GPIO_ResetBits(GPIOBSPI_NSS);
}
uint8_t?spi_send_onebyte(uint8_t?data)
{???
????uint8_t?recv;
????
????/*?Loop?while?DR?register?in?not?emplty?*/??
????while?(SPI_GetFlagStatus(SPI1?SPI_FLAG_TXE)?==?RESET);??
????/*?Send?byte?through?the?SPI1?peripheral?*/??
????SPI_SendData(SPI1?data);?
????/*?Wait?to?receive?a?byte?*/??
????while?(SPI_GetFlagStatus(SPI1?SPI_FLAG_RXNE)?==?RESET);??
????/*?Return?the?byte?read?from?the?SPI?bus?*/??
????recv?=?SPI_ReceiveData(SPI1);???
????
????return?0;
}
uint8_t?spi_read_onebyte(void)
{?
????uint8_t?data;
????
????/*?Loop?while?DR?register?in?not?emplty?*/??
????while?(SPI_GetFlagStatus(SPI1?SPI_FLAG_TXE)?==?RESET);??
????/*?Send?byte?through?the?SPI1?peripheral?*/??
????SPI_SendData(SPI1?0xFF);?
????/*?Wait?to?receive?a?byte?*/??
????while?(SPI_GetFlagStatus(SPI1?SPI_FLAG_RXNE)?==?RESET);??
????/*?Return?the?byte?read?from?the?SPI?bus?*/??
????data?=??SPI_ReceiveData(SPI1);???????
????
????return?data;
}
//寫使能
void?flash_chip_write_able(void)
{
????//開始通訊
????spi_set_cs_low();
????
????//發(fā)送指令
????spi_send_onebyte(FLASH_CHIP_WRITE_ENABLE);
????
????//結(jié)束通信
????spi_set_cs_high();
}
//寫失能
void?flash_chip_write_disable(void)
{
????//開始通訊
????spi_set_cs_low();
????
????//發(fā)送指令
????spi_send_onebyte(FLASH_CHIP_WRITE_DISABLE);
????
????//結(jié)束通信
????spi_set_cs_high();
}
uint8_t?flash_chip_read_status(void)
{
????uint8_t?status;
????
????//開始通訊
????spi_set_cs_low();
????
????//發(fā)送讀狀態(tài)指令
????spi_s
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????11203??2018-05-10?10:29??spi.c
?????文件???????1766??2018-05-10?10:29??spi.h
-----------?---------??----------?-----??----
????????????????12969????????????????????2
評論
共有 條評論