/**
******************************************************************************
* @file TIM/PWM_Input/main.c
* @author MCD Application Team
* @version V3.0.0
* @date 04/06/2009
* @brief Main program body
******************************************************************************
* @copy
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2>
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "main.h"
/** @addtogroup StdPeriph_Examples
* @{
*/
/** @addtogroup TIM_PWM_Input
* @{
*/
#define AT45DB_BUFFER_1_WRITE 0x84 /* 写入第一缓冲区 */
#define AT45DB_BUFFER_2_WRITE 0x87 /* 写入第二缓冲区 */
#define AT45DB_BUFFER_1_WRITE_FLASH 0x82 /* 写入第一缓冲区 */
#define AT45DB_BUFFER_2_WRITE_FLASH 0x85 /* 写入第二缓冲区 */
#define AT45DB_BUFFER_1_READ 0xD4 /* 读取第一缓冲区 */
#define AT45DB_BUFFER_2_READ 0xD6 /* 读取第二缓冲区 */
#define AT45DB_B1_TO_MM_PAGE_PROG_WITH_ERASE 0x83 /* 将第一缓冲区的数据写入主存储器(擦除模式)*/
#define AT45DB_B2_TO_MM_PAGE_PROG_WITH_ERASE 0x86 /* 将第二缓冲区的数据写入主存储器(擦除模式)*/
#define AT45DB_MM_PAGE_TO_B1_XFER 0x53 /* 将主存储器的指定页数据加载到第一缓冲区 */
#define AT45DB_MM_PAGE_TO_B2_XFER 0x55 /* 将主存储器的指定页数据加载到第二缓冲区 */
#define AT45DB_PAGE_ERASE 0x81 /* 页删除(每页512/528字节) */
#define AT45DB_SECTOR_ERASE 0x7C /* 扇区擦除(每扇区128K字节)*/
#define AT45DB_READ_STATE_REGISTER 0xD7 /* 读取状态寄存器 */
#define AT45DB_BLACK_ERASE 0x50 /* 块删除(每块4KByte)*/
#define AT45DB_MM_PAGE_READ 0xD2 /* 直接读主存储器的内存页*/
#define AT45DB_16HZ_Block_Number 64 //占用256K字节存储空间,那么要占用256/4=64个Block
typedef enum {FLASH_BUFFER1=0, FLASH_BUFFER2} FLASH_BUFFER_NUM;
#define FLASH_PAGE_COUNT 4096 // 0..4095
#define FLASH_PAGE_SIZE 512
#define FLASH_SIZE_KBYTE 2112
#define AT45db161_SPI_SELECT() GPIO_ResetBits(GPIOB, GPIO_Pin_12) /* AT45db161 CS = L */
#define AT45db161_SPI_DESELECT() GPIO_SetBits(GPIOB, GPIO_Pin_12) /* AT45db161 CS = H */
// set Page (12Bit) and Byte Address (10Bit)
#define ADR_P_B_1(page) (unsigned char)(page>>6) // 2 res.bits + 6 bits of 12-bit page-address
#define ADR_P_B_2(page, address) (unsigned char)(page<<2)|(address>>8) // 6 bit page-address and 2bit Byte-address
#define ADR_P_B_3(address) (unsigned char)address // 8 bit Byte-address
// set Byte Address (10Bit)
#define ADR_B_1(address) (unsigned char)(address>>8) // 6 don't care + Bit8,9 of address (2bit address)
#define ADR_B_2(address) (unsigned char)(address) // bit7 .. Bit0 of address (8bit address)
// set Page Address (12Bit)
#define ADR_P_1(page) (unsigned char)(page>>6) // 2 res.bits + 6 bits of 12-bit page-address
#define ADR_P_2(page) ((unsigned char)(page))<<2 // 6 bit of 12-bit page-address + 2 don't care
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
uint16_t waste_number=0,send_waste_number=0;
uint8_t TxBuffer[40];
uint8_t Waste_buffer[40];
ErrorStatus HSEStartUpStatus;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
void RCC_Configuration(void);
void AT45db161_SPI_Configuration(void);
void write_at45db161(uint8_t *pdata);
void read_at45db161(void);
void Time3_Configuration(void);
void Time4_Configuration(void);
void NVIC_Configuration(void);
/* Private functions ---------------------------------------------------------*/
void delay_ms(uint16_t ms)
{
u16 i;
for(; ms != 0; ms--)
{
for(i=0;i<7200;i++)
{
}
}
}
/*
void delay_us(uint16_t us)
{
u8 i;
for(; us != 0; us--)
{
for(i=0;i<7;i++)
{
}
}
}
*/
/**
* @brief Main program
* @param None
* @retval : None
*/
int main(void)
{
uint8_t i;
/* System Clocks Configuration */
RCC_Configuration();
NVIC_Configuration();
Time3_Configuration();
Time4_Configuration();
/* Configure the GPIO ports */
AT45db161_SPI_Configuration();
while(1)
{
for(i=0;i<209;i++)
{
Waste_buffer[0]=0x5a;
Waste_buffer[1]=0x49;
Waste_buffer[2]=0x25;
Waste_buffer[3]=0xf5;
Waste_buffer[4]=0x92;
Waste_buffer[5]=0x20;
Waste_buffer[6]=0x11;
Waste_buffer[7]=0x08;
Waste_buffer[8]=0x02;
Waste_buffer[9]=0x09;
Waste_buffer[10]=0x10;
Waste_buffer[11]=0x11;
Waste_buffer[12]=i;
Waste_buffer[13]=0x00;
write_at45db161(Waste_buffer);
read_at45db161();
}
i=1;
}
}
/**
* @brief Configures the different system clocks.
* @param None
* @retval : None
*/
void RCC_Configuration(void)
{
/* Setup the microcontroller system. Initialize the Embedded Flash Interface,
initialize the PLL and update the SystemFrequency variable. */
//SystemInit();
/* RCC system reset(for debug purpose) */
RCC_DeInit();
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if (HSEStartUpStatus == SUCCESS)
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/4 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{}
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while (RCC_GetSYSCLKSource() != 0x08)
{}
}
/*Same as above */
//SystemInit();
/*APB1 enable User according to apply select Can control power consumption*/
//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SRAM, ENABLE);
//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FLITF, ENABLE);
//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
//RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, ENABLE);
/*APB1 enable User according to apply select Can control power consumption*/
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, E
- 1
- 2
前往页