⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c[2010-03-16-09-04-06].sfb

📁 STM32_fatfs_shell_SDHC.rar
💻 SFB
📖 第 1 页 / 共 3 页
字号:
/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
 * File Name          : main.c
 * Author             : MCD Application Team
 * Version            : V2.0
 * Date               : 05/23/2008
 * DescriptWHY8W-QT9DJ-P0VNX-L15PE-W4DCR-VP3FMion        : Main program body
 ********************************************************************************
 * 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 SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 * FOR MORE INFORMATION PLEASE CAREFULLY READ THE LICENSE AGREEMENT FILE LOCATED 
 * IN THE ROOT DIRECTORY OF THIS FIRMWARE PACKAGE.
 *******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "config.h"
#include "dataflash.h"
#include "string.h"
#include "stm32f10x_lib.h"
/* Private functions ---------------------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void USART_Configuration(void);
void ADC_Configuration(void);
void Time_Adjust(void);
void Time_Show(void);
void Time_Display();
u8 USART_Scanf(u32 value);
void RTC_Config(void);
void Update(void);
void CheckSD(void);
void DataFlashInit(void);
FRESULT scan_files(char* path);
FRESULT RemoveFile(void);
void CopyFiles(void);
void TIM_TRIGGER_INIT(void);
void TIM_Configuration(void);
u16 filter(void) ;
void write_file_tmp(void);

#define RTCClockOutput_Enable  /* RTC Clock/64 is output on tamper pin(PC.13) */
#define ADC1_DR_Address    ((u32)0x4001244C)   
#define FILEAMOUNT 11


TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_ICInitTypeDef  TIM_ICInitStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

vu16 ADCConvertedValue;
ErrorStatus HSEStartUpStatus;
u16 AD_value;
u16 AD_value_mul4;
int pulse_count;
FATFS fs[2]; // Work area (file system object) for logical drive
FIL fsrc, fdst, fap; // file objects
FRESULT res, re; // FatFs function common result code
UINT br, bw, bt;
; // File R/W count
FILINFO finfo, fno;
DIR dirs;
time_t current_time;
struct tm time_now;
u8 passwordflag;
u8 timedata[30];
u8 currentFileName[13];
u8 password[6] = 0;
u8 timeFirstSet=0;

char fileNames[30][30];
char machine[20] = "machine1";
char shellEnable=FALSE;

char sdFlag=0;

int main(void) {
#ifdef DEBUG
	debug();
#endif
	RCC_Configuration();
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	GPIO_Configuration();
	USART_Configuration();
	/* System clocks configuration */
	ADC_Configuration();
	/* NVIC configuration */
	NVIC_Configuration();
	//初始化延时函数
	delay_init(72);
	/* GPIO configuration */
	SPI_Configuration();
	bw = SD_Init();
	SPI_FLASH_Init();
	f_mount(0, &fs[0]);
	f_mount(1, &fs[1]);
	/*
	 // _show_free_Fat();
	 // res = f_open(&fsrc, "config.txt", FA_OPEN_EXISTING | FA_READ);
	 // res = f_read(&fsrc, te, 18, &br);
	 // f_mount(0,&fs);
	 // bw=f_mkfs(0,1,0);
	 // _show_free_Fat();
	 // res = f_open(&fdst, "2.txt", FA_CREATE_ALWAYS | FA_WRITE);
	 // for(i=0;i<100;i++)
	 // bw= f_write(&fsrc,a,18,&br); 
	 // f_puts("今天是\r\n",&fdst);
	 // res = f_write(&fdst, power, 18, &bw);
	 // f_close(&fdst);
	 // res = f_open(&fsrc, "2.txt", FA_OPEN_EXISTING | FA_READ);
	 // res = f_read(&fsrc, te, 18, &br);
	 // time_now = Time_GetCalendarTime();
	 // CheckSD();	 */
	
	RTC_Config();	
	DataFlashInit();
//	  res=f_mkfs(0,1,0);
	TIM_Configuration();
		 TIM_TRIGGER_INIT();
		 
		/*	
	while (1) {
	pulse_count = TIM_GetCounter(TIM1);
	TIM_SetCounter(TIM1, 0);
	delay_ms(1000);
		printf("\r\n 脉冲值 : %d ",pulse_count);
	}
 */
 //写入配置文件
       write_file_tmp();
	Time_Show();

	/* Display time in infinite loop */
}

#ifdef  DEBUG							
/**************
 *****************************************************************
 * Function Name  : assert_failed
 * Description    : Reports the name of the source file and the source line number
 *                  where the assert_param error has occurred.
 * Input          : - file: pointer to the source file name
 *                  - line: assert_param error line source number
 * Output         : None
 * Return         : None
 *******************************************************************************/
void assert_failed(u8* file, u32 line)
{
	/* User can add his own implementation to report the file name and line number,
	 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

	/* Infinite loop */
	while (1)
	{
	}
}
#endif



void TIM_TRIGGER_INIT(void)
{
	TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
	TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);	// Time base configuration

	TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);

	TIM_SetCounter(TIM1, 0);
	TIM_Cmd(TIM1, ENABLE);
}

/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/

/*******************************************************************************
 * Function Name  : RCC_Configuration
 * Description    : Configures the different system clocks.
 * Input          : None
 * Output         : None
 * Return         : None
 *******************************************************************************/

void RCC_Configuration(void) {
	/* 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/2 */
		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) {
		}
	}
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
			| RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
			| RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF
			| RCC_APB2Periph_GPIOG, ENABLE);


	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);		/* TIM1 clock enable */

  /* TIM2 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

	

}



void TIM_Configuration(void)
{
//  TIM_OCInitTypeDef  TIM_OCInitStructure ;
  TIM_DeInit( TIM2);//复位TIM2定时器

  /* TIM2 configuration */
  TIM_TimeBaseStructure.TIM_Period = 1000; //最大计数值0xffff      
  TIM_TimeBaseStructure.TIM_Prescaler = 35999;//分频0x36       
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; // 时钟分割  
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //计数方向向上计数
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  
  /* Clear TIM2 update pending flag[清除TIM2溢出中断标志] */
  TIM_ClearFlag(TIM2, TIM_FLAG_Update);


  /* Enable TIM2 Update interrupt [TIM2溢出中断允许]*/
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);  

  /* TIM2 enable counter [允许tim2计数]*/
  TIM_Cmd(TIM2, ENABLE);
}



/*******************************************************************************
 * Function Name  : NVIC_Configuration
 * Description    : Configures Vector Table base location.
 * Input          : None
 * Output         : None
 * Return         : None
 *******************************************************************************/
void NVIC_Configuration(void) {

	NVIC_InitTypeDef NVIC_InitStructure;
#ifdef  VECT_TAB_RAM
	/* Set the Vector Table base location at 0x20000000 */
	NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
	/* Set the Vector Table base location at 0x08000000 */
	NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif

	NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1);
	/* Enable the RTC Interrupt */
	NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);


	/* Enable the TIM2 gloabal Interrupt [允许TIM2全局中断]*/
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

    /* Enable the USART1 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

	
	
}

void ADC_Configuration(void) {

	ADC_InitTypeDef ADC_InitStructure;
	DMA_InitTypeDef DMA_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	DMA_DeInit( DMA1_Channel1);
	DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
	DMA_InitStructure.DMA_MemoryBaseAddr = (u32) & ADCConvertedValue;
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
	DMA_InitStructure.DMA_BufferSize = 1;
	DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
	DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
	DMA_InitStructure.DMA_Priority = DMA_Priority_High;
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
	DMA_Init(DMA1_Channel1, &DMA_InitStructure);

	/* Enable DMA1 channel1 */
	DMA_Cmd(DMA1_Channel1, ENABLE);

	/* ADC1 configuration ------------------------------------------------------*/
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStructure.ADC_ScanConvMode = ENABLE;
	ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStructure.ADC_NbrOfChannel = 1;
	ADC_Init(ADC1, &ADC_InitStructure);

	/* ADC1 regular channel14 configuration */
	ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_55Cycles5);

	/* Enable ADC1 DMA */
	ADC_DMACmd(ADC1, ENABLE);

	/* Enable ADC1 */
	ADC_Cmd(ADC1, ENABLE);

	/* Enable ADC1 reset calibaration register */
	ADC_ResetCalibration( ADC1);
	/* Check the end of ADC1 reset calibration register */
	while (ADC_GetResetCalibrationStatus(ADC1))
		;

	/* Start ADC1 calibaration */
	ADC_StartCalibration(ADC1);
	/* Check the end of ADC1 calibration */
	while (ADC_GetCalibrationStatus(ADC1))
		;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -