标题:
STM32-SST25VF016B-SPI-mini 程序
[打印本页]
作者:
WANGXL
时间:
2020-4-29 15:56
标题:
STM32-SST25VF016B-SPI-mini 程序
转载STM32-SST25VF016B-SPI-mini 程序,需要的下载
单片机源程序如下:
/****************************************************************************
* Copyright (C), 2011 奋斗嵌入式工作室
*
* 本例程在 奋斗版STM32开发板V2,2.1,V3,MINI上调试通过
*
* 文件名: main.c
* 内容简述:
* 演示将一段字符串写入SST25VF016B的1页中,然后读出并通过USART1传送出去,同时LED1亮。
字符串:SPI SST25VF016B Example: This is SPI DEMO, 终端上出现这一行字,说明SST25VF016B的读写正常
*
定义:
TXD1----- PA9-US1-TX
RXD1----- PA10-US1-RX
速率:115200,n,8,1
* 文件历史:
* 版本号 日期 作者 说明
* v0.2 2011-7-22 sun68 创建该文件
*
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "stm32f10x_usart.h"
extern void SPI_Flash_Init(void);
extern unsigned char SST25_buffer[];
/* Private define ------------------------------------------------------------*/
#define TxBufferSize1 (countof(TxBuffer1) - 1)
#define RxBufferSize1 (countof(TxBuffer1) - 1)
/* Private macro -------------------------------------------------------------*/
#define countof(a) (sizeof(a) / sizeof(*(a)))
/* Private variables ---------------------------------------------------------*/
uint8_t TxBuffer1[] = "SPI SST25VF016B Example: This is SPI DEMO, 终端上出现这一行字,说明SST25VF016B的读写正常";
/* Private function prototypes -----------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void Delay(__IO uint32_t nCount);
void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,uint16_t Len);
void Usart1_Init(void);
GPIO_InitTypeDef GPIO_InitStructure;
int16_t USART_FLAG;
extern void SST25_W_BLOCK(uint32_t addr, u8 *readbuff, uint16_t BlockSize);
extern void SST25_R_BLOCK(uint32_t addr, u8 *readbuff, uint16_t BlockSize);
/* Private functions ---------------------------------------------------------*/
/****************************************************************************
* 名 称:int main(void)
* 功 能:主函数
****************************************************************************/
int main(void)
{
uint8_t a=0;
uint16_t i=0;
RCC_Configuration(); //设置系统时钟
GPIO_Configuration(); //IO口设置
Usart1_Init(); //串口1初始化
SPI_Flash_Init(); //SPI1 SST25VF016B初始化
/* 将测试用的数据复制到读写缓存区里 */
for(i=0; i<TxBufferSize1;i++) SST25_buffer[i]=TxBuffer1[i];
SST25_W_BLOCK(0, SST25_buffer,4096); //将册数数据写入到SST25VF016B的0页里
Delay(0xffff);
SST25_R_BLOCK(0, SST25_buffer,4096); //从SST25VF016B的0页里读出数据
a=0;
for(i=0; i<TxBufferSize1;i++){
if(SST25_buffer[i]==TxBuffer1[i]) a=1; //读出的数据和测试数据进行比较, 以判别是否读写正常
else {a=0; i=TxBufferSize1;}
}
if(a==1) {
GPIO_SetBits(GPIOB, GPIO_Pin_5); //读写正确LED1 亮
USART_OUT(USART1,&SST25_buffer[0],TxBufferSize1); //将读出的数据通过串口输出
}
while (1);
}
/****************************************************************************
* 名 称:void Usart1_Init(void)
* 功 能:串口1初始化函数
****************************************************************************/
void Usart1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 , ENABLE); //使能串口1时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //USART1 TX
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //A端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1 RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //复用开漏输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //A端口
USART_InitStructure.USART_BaudRate = 115200; //速率115200bps
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位1位
USART_InitStructure.USART_Parity = USART_Parity_No; //无校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
/* Configure USART1 */
USART_Init(USART1, &USART_InitStructure); //配置串口参数函数
/* Enable the USART1 */
USART_Cmd(USART1, ENABLE);
}
/****************************************************************************
* 名 称:void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,uint16_t Len)
* 功 能:串口输出函数
****************************************************************************/
void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,uint16_t Len){
uint16_t i;
for(i=0; i<Len; i++){
USART_SendData(USARTx, Data[i]);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
}
}
/****************************************************************************
* 名 称:void Delay(__IO uint32_t nCount)
* 功 能:延时函数
****************************************************************************/
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
/****************************************************************************
* 名 称:void RCC_Configuration(void)
* 功 能:系统时钟配置为72MHZ, 外设时钟配置
****************************************************************************/
void RCC_Configuration(void){
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC
| RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE , ENABLE);
}
/****************************************************************************
* 名 称:void GPIO_Configuration(void)
* 功 能:通用IO口配置
****************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //状态LED1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出模式最大速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
复制代码
所有资料51hei提供下载:
STM32-SST25VF016B-SPI-mini.7z
(179.82 KB, 下载次数: 16)
2020-4-29 18:28 上传
点击文件名下载附件
下载积分: 黑币 -5
KD`A_0P0PU7[(NN5FQ0GLKS.png
(72.79 KB, 下载次数: 52)
下载附件
2020-4-29 15:54 上传
文件内具体内容
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1